O arquivo bloqueado por qual processo?
-
21-09-2019 - |
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.
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 :))