Pregunta

¿Hay alguna manera en .Net para averiguar exactamente qué proceso ha bloqueado un archivo?

Editar : Estoy haciendo esto porque quiero que mi usuario sepa que no puede modificar / abrir el archivo, porque en este momento, otro programa que está utilizando (por ejemplo, Excel) tiene abierto. Con suerte, esto ayuda.

¿Fue útil?

Solución

La respuesta corta a esto es no.

Sin embargo, la respuesta larga es que hay varias llamadas a la API de WMI y métodos que se pueden utilizar para encontrar esta información, pero no se espera que sea rápido y sencillo.

Si desea utilizar llamadas a la API, echar un vistazo a la función NtQuerySystemInformation con el parámetro SYSTEM_PROCESS_INFORMATION. Esta es una de esas preciosas métodos "sin papeles" que viene con la maravillosa renuncia:

  

NtQuerySystemInformation puede ser   alterado o no esté disponible en el futuro   versiones de Windows. aplicaciones   debe utilizar las funciones alternas   enumerado en este tema.

Así que le sugiero evitar que, en favor del uso de WMI.

Puede utilizar el WMI Win32_Process clase de enumerar todos los procesos que se están ejecutando en la máquina y, a continuación, enumerar todos los mangos cada proceso mantiene hasta que encuentre el archivo que está buscando. Desafortunadamente no hay una forma sencilla de ir "oye, ¿qué proceso está bloqueando este archivo", que sólo funciona al revés que tiene que buscar por la lista proceso hasta que encuentre el que está bloqueando el archivo que está interesado.

Me gustaría recomendar un pequeño artículo titulado agradable en CodeProject Cómo: (casi) todo en WMI a través de C # Parte 2: Procesos . (Parte 1 es también una buena lectura si te gusta ese tipo de cosas)

Otros consejos

Bueno ... no es exactamente una manera .NET de hacerlo ... pero asumiendo lo que desea es saber usar una utilidad fácil, echa un vistazo a Mango de SysInternals .

Parece que alguien ha descubierto éste hacia fuera (y es posible aprender algo de francés, así :))

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top