Pregunta ¿Cómo puedo determinar si un archivo específico está abierto en Windows? [cerrado]


Una de mis herramientas favoritas para Linux es lsof - ¡una auténtica navaja suiza!

Hoy me encontré preguntándome qué programas en un sistema WinXP tenían un archivo específico abierto. ¿Hay alguna utilidad equivalente a lsof? Además, el archivo en cuestión tenía más de un recurso compartido de red, así que no estoy seguro si eso complica las cosas.


75
2017-08-19 04:37


origen


Respuestas:


Utilizar Process Explorer desde la Suite Sysinternals, la función Find Handle o DLL le permitirá buscar el proceso con ese archivo abierto.


61
2017-08-19 04:48



El equivalente de lsof -p pid es la salida combinada de sysinternals handle y listdlls, es decir,

handle -p pid
listdlls -p pid

puedes encontrar pid con sysinternals pslist.


36
2018-03-01 04:48



Tratar Encargarse de. Filemon & Regmon también son geniales para tratar de descubrir qué hace el programa duce foo a su sistema.


8
2017-08-19 04:46



Tratar Unlocker.

El sitio Unlocker tiene un gráfico ingenioso (desplácese hacia abajo después de seguir el enlace) que muestra una comparación con otras herramientas. Obviamente, tales comparaciones suelen ser parciales, ya que normalmente las escribe el autor de la herramienta, pero la tabla al menos enumera las alternativas para que pueda probarlas usted mismo.


5
2017-10-09 17:35



Si el archivo es un .dll, entonces puede usar Lista de tareas aplicación de línea de comandos para ver quién la abrió:

TaskList /M nameof.dll

5
2018-04-08 18:03



Un equivalente de lsof podría ser una producción combinada de Sysinternals ' encargarse de y listdlls, es decir

c:\SysInternals>handle
[...]
------------------------------------------------------------------------------
gvim.exe pid: 5380 FOO\alois.mahdal
   10: File  (RW-)   C:\Windows
   1C: File  (RW-)   D:\some\locked\path\OpenFile.txt
[...]

c:\SysInternals>listdlls
[...]
------------------------------------------------------------------------------
Listdlls.exe pid: 6840
Command line: listdlls

  Base        Size      Version         Path
  0x00400000  0x29000   2.25.0000.0000  D:\opt\SysinternalsSuite\Listdlls.exe
  0x76ed0000  0x180000  6.01.7601.17725  C:\Windows\SysWOW64\ntdll.dll
[...]

c:\SysInternals>listdlls

Lamentablemente, debe "ejecutar como administrador" para poder usarlos.

también listdlls y encargarse de no produzca una forma continua de tabla, por lo que filtrar el nombre de archivo ocultaría el PID. findstr /c:pid: /c:<filename> debe acercarse mucho con ambos servicios, aunque

c:\SysinternalsSuite>handle | findstr /c:pid: /c:Driver.pm
System pid: 4 \<unable to open process>
smss.exe pid: 308 NT AUTHORITY\SYSTEM
avgrsa.exe pid: 384 NT AUTHORITY\SYSTEM
[...]
cmd.exe pid: 7140 FOO\alois.mahdal
conhost.exe pid: 1212 FOO\alois.mahdal
gvim.exe pid: 3408 FOO\alois.mahdal
  188: File  (RW-)   D:\some\locked\path\OpenFile.txt
taskmgr.exe pid: 6016 FOO\alois.mahdal
[...]

Aquí podemos ver que gvim.exe es el que tiene este archivo abierto.


5
2018-03-21 10:36



Si hace clic con el botón derecho en el ícono "Ordenador" (o "Mi PC") y selecciona "Administrar" en el menú emergente, eso lo llevará a la consola de Administración de equipos.

Allí, en Herramientas del sistema \ Carpetas compartidas, encontrará "Archivos abiertos". Probablemente esté cerca de lo que desea, pero si el archivo está en una red compartida, entonces tendría que hacer lo mismo en el servidor en el que vive el archivo.


4
2017-08-19 04:40