Determinar qué proceso tiene un bloqueo en un archivo
Pregunta
Tengo una prueba unitaria que funciona bien localmente, pero cuando se carga al servidor de compilación de TeamCity falla con "El proceso no puede acceder al archivo porque está siendo utilizado por otro proceso".
- Antes de hacer algo en la prueba Verifico en la configuración si el archivo existe y si es así intente eliminarlo. Esto falla con el mismo error mensaje como arriba
- Cuando escribe el archivo, cierro el escritor entonces disponer de lo que creo que debería deshacerse de cualquier recurso.
Entonces tengo un par de consultas
- ¿Alguien ha tenido problemas similares y ha logrado evitarlos?
- ¿Cómo puedo averiguar programáticall qué proceso ha bloqueado egoístamente el archivo !!!
Saludos
Solución
Sysinternals FileMon tiene alguna información (desplácese hacia abajo) sobre cómo lograron esto en versiones anteriores de Windows.
Process monitor es su última versión, pero no lo hace ' No dé muchas pistas sobre cómo lo hacen. Sin embargo, hay algunos artículos de la base de conocimiento vinculados allí que deberían llevarlo a esta información.
-Adam
Otros consejos
Sysinternals handle.exe es el primer paso. O utilice Process Explorer ' Find Handle or DLL
. Sin embargo, siempre es más seguro matar el proceso que cerrar el controlador.
Programáticamente, se trata de escribir un controlador de kernel que lea la tabla de identificadores de Windows.
ProcessMon (para encontrar) y Unlocker (al menos para desbloquear) también son útiles.