it-swarm-es.com

¿Cómo encuentra qué proceso mantiene abierto un archivo en Windows?

Una cosa que me molesta sin fin acerca de Windows es el antiguo error compartir infracción. A menudo no puedes identificar lo que lo mantiene abierto. Por lo general, solo se trata de un editor o Explorer que solo apunta a un directorio relevante, pero a veces he tenido que recurrir a reiniciar mi máquina.

¿Alguna sugerencia sobre cómo encontrar al culpable?

538
cletus

He tenido éxito con SysinternalsProcess Explorer . Con esto, puede buscar para encontrar qué proceso (s) tiene un archivo abierto, y puede usarlo para cerrar los controladores si lo desea. Por supuesto, es más seguro cerrar todo el proceso. Ejercer precaución y juicio.

Para buscar un archivo específico, use la opción de menú Find->Find Handle or DLL... Escriba parte de la ruta al archivo. La lista de procesos aparecerá a continuación.

Si prefiere la línea de comandos, Sysinternals Suite incluye la herramienta de línea de comandos Manija , que enumera las manijas abiertas. Algunos ejemplos sobre cómo usarlo:

  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i e:\: busca todos los archivos abiertos desde la unidad E:
  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i file-or-path-in-question
455
Eddie

Puede usar el Monitor de recursos para esto que viene integrado con Windows 7, 8 y 10.

  1. Abrir Monitor de recursos , que se puede encontrar
    • Al buscar Monitor de recursos o resmon.exe en el menú de inicio, o
    • Como un botón en la pestaña Rendimiento en su ¡Administrador de tareas
  2. Vaya a la pestaña [~ # ~] cpu [~ # ~]
  3. Use el campo de búsqueda en la sección Manijas asociadas
    • Ver flecha azul en la captura de pantalla a continuación

Cuando haya encontrado el identificador, puede identificar el proceso mirando la columna Imagen y/o PID.

Luego puede intentar cerrar la aplicación como lo haría normalmente, o, si eso no es posible, simplemente haga clic derecho en el controlador y elimine el proceso directamente desde allí. ¡Pan comido!

Resource Monitor screenshot

Copiado de mi respuesta original: https://superuser.com/a/643312/62

195
Svish

Pruebe el comando archivos abiertos .

93
John Fouhy

Solo tenga mucho cuidado al cerrar las manijas; es aún más peligroso de lo que piensas, debido al reciclaje del identificador: si cierras el identificador de archivo y el programa abre otra cosa, ese identificador de archivo original que cerraste puede reutilizarse para esa "otra cosa". Y ahora adivine qué sucede si el programa continúa, pensando que está trabajando en el archivo (cuyo identificador cerró), cuando de hecho ese identificador de archivo ahora apunta a otra cosa.

ver publicación de Raymond Chen sobre este tema

Suponga que un servicio de índice de búsqueda tiene un archivo abierto para la indexación pero se ha atascado temporalmente y desea eliminar el archivo, por lo que (imprudentemente) fuerza el cierre del controlador. El servicio de índice de búsqueda abre su archivo de registro para registrar cierta información, y el identificador del archivo eliminado se recicla como el identificador del archivo de registro. La operación atascada finalmente se completa, y el servicio de índice de búsqueda finalmente llega a cerrar el identificador que tenía abierto, pero termina involuntariamente cerrando el identificador del archivo de registro.

El servicio de índice de búsqueda abre otro archivo, digamos un archivo de configuración para escribir, de modo que pueda actualizar algún estado persistente. El identificador del archivo de registro se recicla como el identificador del archivo de configuración. El servicio de índice de búsqueda desea registrar cierta información, por lo que escribe en su archivo de registro. Desafortunadamente, el identificador del archivo de registro se cerró y el identificador se reutilizó para su archivo de configuración. La información registrada va al archivo de configuración y la corrompe.

Mientras tanto, otro identificador que forzó el cierre se reutilizó como un identificador mutex, que se utiliza para ayudar a evitar que los datos se corrompan. Cuando se cierra el identificador de archivo original, se cierra el identificador de mutex y se pierden las protecciones contra la corrupción de datos. Cuanto más se ejecuta el servicio, más corruptos se vuelven sus índices. Finalmente, alguien nota que el índice está devolviendo resultados incorrectos. Y cuando intenta reiniciar el servicio, falla porque sus archivos de configuración se han dañado.

Informe el problema a la empresa que realiza el servicio de índice de búsqueda y determinan que el índice se ha dañado, el archivo de registro ha dejado de registrarse misteriosamente y el archivo de configuración se ha sobrescrito con basura. A un técnico pobre se le asigna la tarea desesperada de descubrir por qué el servicio corrompe sus índices y archivos de configuración, sin saber que la fuente de la corrupción es que forzó el cierre de un controlador.

83
Mark Sowul

He usado Handle con éxito para encontrar dichos procesos en el pasado.

29
Greg Hewgill

Lockhunter ( http://lockhunter.com/ ) funciona en sistemas de 32 y 64 bits.

11
Scoregraphic

Solo para aclarar, es más probable que esto sea el resultado de un mal comportamiento de las aplicaciones de terceros que no usan la llamada a la API CreateFile correctamente que cualquier cosa en el propio Windows. Quizás es una consecuencia del diseño de CreateFile, pero hecho está hecho y no podemos volver atrás.

Básicamente, al abrir un archivo en un programa de Windows, tiene la opción de especificar un marcador que permita el acceso compartido. Si no especifica la bandera, el programa tiene acceso exclusivo al archivo.

Ahora, si Explorer parece ser el culpable aquí, puede ser el caso que eso sea solo superficialmente, y que el verdadero culpable es algo que instala una extensión de Shell que abre todos los archivos en una carpeta para sus propios fines, pero también lo es entusiasta al hacerlo, o eso no se limpia correctamente después de sí mismo. Symantec AV es algo que he visto hacer esto antes, y no me sorprendería que otros programas AV también tuvieran la culpa. Los complementos de control de fuente también pueden tener la culpa.

Entonces, no es realmente una respuesta, pero solo algunos consejos para no siempre culpar a Windows por lo que puede ser un programa de terceros mal escrito (algo que también puede suceder en cualquier otro sistema operativo que tenga bloqueo de archivos implícito, pero cualquier sistema operativo basado en Unix ha compartido el acceso por defecto).

7
Maximus Minimus

Who Lock Me funciona bien y mantiene a las personas entretenidas con el nombre.

7
Generic Error

Apropos Explorer mantiene abierto un archivo: "Cuando esto sucede en un archivo que necesita eliminar, tiene la opción de forzar el control cerrado o reiniciar".

Puedes terminar con Explorer.

Si esto es algo único (Explorer normalmente no mantiene este archivo abierto), supongo que cerrar la sesión y volver a iniciarla hará el truco.

De lo contrario, elimine el proceso del Explorador de escritorio y haga lo que quiera mientras está fuera. Primero inicie una copia de cmd.exe (necesita una interfaz de usuario para realizar la limpieza prevista). Asegúrese de que no se estén ejecutando exploradores que no sean de escritorio. Luego, elimine el último Explorer con, por ejemplo, el Administrador de tareas. Haz lo que quieras en el símbolo del sistema. Finalmente, ejecute Explorer desde el símbolo del sistema, y ​​se convertirá en el escritorio.

Supongo que puede haber algo desagradable residual si algunos programas de la bandeja del sistema no pueden lidiar con el reinicio de Shell.

6
dave

En un servidor remoto, cuando está verificando un recurso compartido de red, algo tan simple como la consola de Computer Management puede mostrar esta información y cerrar el archivo.

6
K. Brian Kelley

Los archivos pueden bloquearse mediante procesos locales ( desbloqueador es la herramienta a utilizar) y mediante el acceso a archivos que se ingresa a través de recursos compartidos.

Hay una función incorporada en Windows que le muestra qué archivos en la computadora local están abiertos/bloqueados por una computadora remota (que tiene el archivo abierto a través de un recurso compartido de archivos):

* Select "Manage Computer" (Open "Computer Management")
* click "Shared Folders"
* choose "Open Files"

Allí incluso puede cerrar el archivo con fuerza.

5
Dirk Paessler

Con Process Hacker puedes identificar qué procesos están guardando tus archivos fácilmente:

Find Handles or DLLs

4
Ivan Kochurkin

Hay NirSoft's Vista de archivos abiertos también.

4

Las respuestas votadas anteriormente cubren situaciones en las que un proceso del programa mantiene abierto el identificador de archivo, que (afortunadamente) es la mayor parte del tiempo; sin embargo, en algunos casos (como está ocurriendo en este sistema en este momento), el sistema mismo posee un identificador de archivo abierto.

Puede identificar esta situación siguiendo las instrucciones para encontrar el proceso de retención del identificador de archivo con el Explorador de procesos anterior, y observando que el nombre del proceso aparece como 'sistema', o siguiendo las instrucciones usando el monitor de recursos y observando que no se muestra ninguna imagen tener un identificador de archivo abierto en su archivo de interés (aunque obviamente algo hace ya que no puede editar/eliminar, etc. el archivo).

Si eso sucede, su opción (hasta donde yo sé) es reiniciar u olvidarse de hacer algo con ese archivo.

2
Blair

Hay una herramienta FILEMON y muestra los archivos abiertos y los controladores. Es difícil mantenerse al día con su pantalla si lo ves en vivo, lo hace rápidamente. Pero puede evitar que se muestre en vivo y puede ver todos los archivos abiertos/actividad de escritura. Ahora propiedad de Microsoft pero originalmente de Sysinternals

0
user44304

El blog de Jeremy Zawodny me activó el Administrador de tareas ampliado hace un tiempo, y también es genial para rastrear más información sobre procesos. +1 para el Explorador de procesos también como anteriormente, especialmente para matar procesos que el Administrador de tareas estándar no terminará.

0
nedm