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

515

Una cosa que me molesta sin fin sobre Windows es el antiguo error de violación de uso compartido . A menudo no puedes identificar lo que lo mantiene abierto. Por lo general, es solo un editor o explorador que 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?

cletus
fuente
12
Pensarías que después de todo este tiempo, los chicos de Windows nos darían una manera de hacerlo fácilmente desde Explorer. Me pregunto por qué esto no ha sucedido.
Cawflands
66
Encuentro que Explorer es muy a menudo el proceso problemático que se está reteniendo en un archivo sin ninguna razón obvia.
Eddie
Sé que esto no te ayuda mucho, pero creo que recordé que esta era una característica planificada de la próxima versión de Windows después de Vista y 2008 Server. o tal vez es una cosa de WinFS. no estoy seguro de dónde leí eso ...
Kip
vea mi respuesta en superusuario aquí , en resumen OpenedFilesView todavía funciona en 2019
Vijay

Respuestas:

440

He tenido éxito con Sysinternals Process Explorer . Con esto, puede buscar para encontrar qué procesos tienen abierto un archivo, y puede usarlo para cerrar los identificadores 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 en parte de la ruta al archivo. La lista de procesos aparecerá a continuación.

Si prefiere la línea de comandos, la suite Sysinternals incluye la herramienta de línea de comandos Handle , que enumera los controladores abiertos. Algunos ejemplos sobre cómo usarlo:

  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i e:\ - encuentre todos los archivos abiertos desde la unidad E:
  • c:\Program Files\SysinternalsSuite>handle.exe |findstr /i file-or-path-in-question
Eddie
fuente
17
Puede cerrar el asa, pero tenga en cuenta que está sacando la alfombra de debajo de una aplicación, los resultados serán impredecibles en el mejor de los casos.
WaldenL
12
@ Walden: Absolutamente. YMMV. Con WinXP, muchas veces he hecho que Explorer abra un identificador sin una razón obvia y me niegue a cerrarlo. Cuando esto sucede en un archivo que necesita eliminar, tiene la opción de forzar el cierre del controlador o reiniciarlo. Hasta ahora, habiendo hecho esto docenas de veces, no he sufrido ningún efecto negativo. Como con cualquier herramienta avanzada, úsela con precaución y criterio.
Eddie
55
Cerrar los identificadores puede hacer que la aplicación reutilice el identificador en otro archivo, causando corrupción. Consulte la respuesta de Jeff a continuación: serverfault.com/a/15695/79266 ... mucho más seguro para eliminar la aplicación que mantiene el archivo abierto, si usted No quiero reiniciar.
RichVel
14
Para el explorador, por cierto, mantenga presionada la tecla ctrl-shift y haga clic derecho en un área en blanco del menú de inicio, y obtendrá "Exit Explorer" - ps, no exactamente la respuesta de Jeff ..
Mark Sowul
2
No ayuda para archivos no ejecutivos ig un archivo de texto. Necesito saber quién está escribiendo en un archivo de registro. ¿Alguna idea?
Xaqron
183

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

  1. Open Resource Monitor , que se puede encontrar
    • Al buscar Resource Monitor o resmon.exe en el menú de inicio, o
    • Como un botón en la pestaña Rendimiento en su Administrador de tareas
  2. Ir 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!

Captura de pantalla del Monitor de recursos

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

Svish
fuente
2
Vale la pena señalar que puede ser difícil encontrar este programa en Windows 8; una búsqueda de 'resmon.exe' debería ubicarlo.
Kylotan
44
@Kylotan, deja de perder el tiempo buscando. Simplemente ejecute resmon directamente desde cmd
Pacerier
1
@Pacerier: bien. No estoy acostumbrado a que las cosas estén en la ruta de Windows.
Kylotan
Esto me queda mejor que 'Manejar | Alternativas FindStr 'y' Unlocker ', aunque también son efectivas
Marcus Vinicius Pompeu
44
Sigue siendo válido en Windows 10 y se puede encontrar usando el botón "Abrir monitor de recursos" dentro del Administrador de tareas -> pestaña Rendimiento.
Norman Breau
92

Prueba el comando openfiles .

John Fouhy
fuente
10
+1 para un comando incorporado, aunque yo personalmente uso ProcessExplorer la mayor parte del tiempo.
RBerteig
De mucha ayuda.
marko
77
ERROR: el sistema de destino debe ejecutar un sistema operativo de 32 bits.
Bozojoe
44
no funciona para 64 OS!
12
Esto parece estar funcionando para Windows 2012R2 de 64 bits, pero debe habilitar el servicio "abrir seguimiento local" ejecutando openfiles /local ony reiniciando. Esto hace que esta característica no sea muy útil.
Guss
82

Solo tenga mucho cuidado al cerrar las manijas; es aún más peligroso de lo que parece, debido al reciclaje del identificador: si cierra el identificador de archivo y el programa abre otra cosa, el identificador de archivo original que cerró 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 en realidad ese identificador de archivo ahora apunta a otra cosa.

ver la publicación de Raymond Chen sobre este tema

Supongamos 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 compañía que realiza el servicio de índice de búsqueda y determinan que el índice se ha dañado, que el archivo de registro ha dejado de registrarse misteriosamente y que el archivo de configuración se ha sobrescrito con basura. A algún 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.

Mark Sowul
fuente
12
advertencia importante, esto debería ir más cerca de la parte superior: un reinicio probablemente sea mejor que un archivo dañado silenciosamente.
RichVel
66
+1 ¡Esto ciertamente me hará pensar dos veces antes de forzar las manijas cerradas! Me parece extraño que Windows reutilice inmediatamente el número de un identificador cerrado, en lugar de continuar incrementando el número y solo ajustando cuando sea necesario. Eso al menos reduciría en gran medida las posibilidades de que ocurra este problema.
EM0
1
@RichVel Terminar el proceso culpable es probablemente mejor que un reinicio completo.
Dmitry Grigoryev
@DmitryGrigoryev - buen punto, y de hecho ya lo mencioné aquí
RichVel
2
Esta es una advertencia muy importante, pero no responde la pregunta ¿Cómo encuentra qué proceso mantiene abierto un archivo en Windows?
Ploni
29

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

Greg Hewgill
fuente
3
Yo uso esta herramienta todo el tiempo. Si no puedo expulsar una unidad USB, simplemente escribo "handle H:" (o la letra de la unidad). Lo mejor de todo es que puede usarlo para forzar mangos cercanos.
Chris Thompson
10

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

Scoregraphic
fuente
También está disponible en el menú contextual de ese archivo en el Explorador de Windows.
user61849
7

¡Who Lock Me funciona bien y mantiene a la gente divertida con el nombre!

Error generico
fuente
No funciona en Windows 8 y 10 de 64 bits
Rustyx
7

Solo para aclarar, es más probable que esto sea el resultado de un mal comportamiento de las aplicaciones de terceros que no utilizan 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 indicador que permita el acceso compartido. Si no especifica la bandera, el programa toma 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).

Maximus Minimus
fuente
1
No culparé a una aplicación de terceros por el hecho de que mi explorador de Windows siempre bloquea los archivos Thumbs.db en su directorio de trabajo, pero no siempre lo desbloquea cuando cambio el directorio de trabajo. Al menos están desbloqueados cuando cierro la ventana, no tengo que matar a TODOS los exploradores ...
Alexander
@Darth, ¿Eres un vendedor de Microsoft?
Pacerier
6

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.

K. Brian Kelley
fuente
Exactamente, ¿por qué hay respuestas tan complicadas?
Rohit Gupta
6

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), entonces 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 no está. 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 del shell.


fuente
1
Esto es mucho más seguro que cerrar el asa y menos perjudicial que reiniciar. También se aplica a otros programas: a menudo encuentro que un programa de Microsoft Office mantiene bloqueos en los archivos incluso después de haberlos cerrado.
RichVel
5

Los archivos pueden bloquearse mediante procesos locales (el desbloqueador es la herramienta que se debe usar) 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.

Dirk Paessler
fuente
4

También está la Vista de archivos abiertos de NirSoft .

Christopher Galpin
fuente
1
Personalmente, me gusta más que Process Explorer para estas tareas específicas.
JamesBarnett
4

Con Process Hacker puedes identificar qué procesos contienen tus archivos fácilmente:

Buscar identificadores o archivos DLL

Ivan Kochurkin
fuente
2

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.

Blair
fuente
0

El blog de Jeremy Zawodny me puso en contacto con el Administrador de tareas ampliado hace un tiempo, y también es genial para rastrear más información sobre los procesos. +1 para el Explorador de procesos como el anterior también, especialmente para eliminar procesos que el Administrador de tareas estándar no finalizará.

nedm
fuente
0

Hay una herramienta FILEMON y muestra los archivos abiertos y las manijas. 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

usuario44304
fuente
1
La versión actualizada de esto es el monitor de proceso. Puede obtenerlo aquí: http://technet.microsoft.com/en-us/sysinternals/bb896645
yitwail