Pergunta

Existe uma maneira em .Net, para saber exatamente qual o processo tenha bloqueado um arquivo?

EDITAR:Eu estou fazendo isso porque eu quero que meu usuário sabe que eles não podem modificar/abrir o arquivo, porque no momento, outro programa que está a utilizar (como o Excel) tem aberto.Esperançosamente, isso ajuda.

Foi útil?

Solução

A resposta curta é não.

No entanto, a resposta longa é que existem várias chamadas de API WMI e métodos que você pode usar para localizar estas informações, mas não esperava que ser rápida e simples.

Se você quiser usar chamadas de API, dê uma olhada no NtQuerySystemInformation função com o SYSTEM_PROCESS_INFORMATION parâmetro.Este é um daqueles adoráveis "indocumentados" métodos que vem com o maravilhoso disclaimer:

NtQuerySystemInformation pode ser alterado ou não disponível no futuro versões do Windows.Aplicações deve usar as funções alternativas listados neste tópico.

Por isso gostaria de sugerir evitando que a favor da utilização de WMI.

Você pode usar o WMI Win32_Process classe para enumerar todos os processos actualmente em execução no computador e, em seguida, enumerar todos os identificadores de cada processo é de detenção, até encontrar o arquivo que você está procurando.Infelizmente não há uma maneira simples para ir "ei, qual processo é o fecho este arquivo", ele só funciona no outro sentido é preciso procurar para baixo a lista de processos até você encontrar o que está bloqueando o arquivo que você está interessado.

Eu recomendo um pequeno artigo no CodeProject intitulado Como:(Quase) Tudo No WMI através de C# Parte 2:Processos.(Parte 1 também é um bom ler se você gosta desse tipo de coisa)

Outras dicas

Bem ... não é exatamente uma maneira .NET de fazê -lo ... mas assumindo que você só quer descobrir usando um utilitário fácil, confira Manuseio de sysinternals.

Parece que alguém descobriu este (e você pode aprender alguns franceses também :))

http://www.axcis.com.au/bb/viewtopic.php?p=505

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top