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

87

Una de mis herramientas favoritas para Linux es lsof , ¡una verdadera navaja suiza!

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

Daniel Fone
fuente

Respuestas:

74

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

Jay Hofacker
fuente
¿Esto realmente responde a la pregunta? Process Explorer le permite ver qué archivos están abiertos para un proceso / manejador / dll / lo que sea en particular, pero esa es la asignación inversa. Vea mi respuesta stackoverflow.com/questions/15708/… a esta pregunta.
Greg Mattes
6
Si lo hace. Haga clic en Buscar identificador o Dll (o presione Ctrl-F), escriba el nombre del archivo que está buscando y terminará con una lista de procesos con ese archivo abierto.
Jay Hofacker
Process Explorer ahora ha sido renombrado y empaquetado en "Process Monitor".
Matthew McCullough
7
@MatthewMcCullough ¿Alguna referencia? Es incorrecto, Process Explorer y Process Monitor son dos utilidades diferentes.
Alois Mahdal
2
¿Process Explorer tiene una interfaz de línea de comandos?
Anderson Green
41

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

handle -p pid
listdlls -p pid

puede averiguar pid con sysinternals pslist.

peterh - Restablecer a Monica
fuente
¿Viene con una instalación estándar de Windows como Windows 10?
Morten
10

Prueba Handle . Filemon y Regmon también son excelentes para tratar de averiguar qué le está haciendo el programa duce foo a su sistema.

slipsec
fuente
@slipsec FileMon y Regmon ahora se reemplazan por Process Monitor v3.2 en versiones de Windows que comienzan con Windows 2000 SP4, Windows XP SP2, Windows Server 2003 SP1 y Windows Vista.
Lucky
7

Un equivalente de lsof podría combinarse con la salida del identificador y listdlls de Sysinternals , 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

Desafortunadamente, debe "ejecutar como administrador" para poder utilizarlos.

Además, listdlls y handle no producen una forma de tabla continua, por lo que filtrar el nombre de archivo ocultaría el PID. findstr /c:pid: /c:<filename>debería acercarlo mucho a ambas utilidades, 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.

Alois Mahdal
fuente
5

Prueba 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, estas comparaciones suelen estar sesgadas, ya que normalmente las escribe el autor de la herramienta, pero el cuadro al menos enumera las alternativas para que pueda probarlas usted mismo.

Greg Mattes
fuente
4
Unlocker solo enumera los archivos bloqueados, no los archivos abiertos. La mayoría del software de Windows bloquea la DLL que utiliza, pero no sus documentos.
Tobias
5

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

TaskList /M nameof.dll
Sean
fuente
3

Hay un programa "OpenFiles", parece ser parte de Windows 7. Parece que puede hacer lo que quiera. Puede enumerar archivos abiertos por usuarios remotos (a través del recurso compartido de archivos) y, después de llamar a "openfiles / Local on" y reiniciar el sistema, debería poder mostrar archivos abiertos localmente. Se dice que este último tiene sanciones de rendimiento.

anónimo
fuente
1
Vine aquí buscando una manera de averiguar quién me impide eliminar una carpeta y evitar un reinicio, y encuentro que el comando que necesito requiere una configuración de configuración que ... lo adivinaste ... requiere un reinicio. Que muy muy ventanas.
Gus
amigos, tengan en cuenta que el comando openfiles tarda MUCHO tiempo en ejecutarse (del orden de 4 minutos).
NH.
2

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

Allí, en Herramientas del sistema \ Carpetas compartidas, encontrará "Archivos abiertos". Probablemente se acerque a lo que desea, pero si el archivo está en un recurso compartido de red, deberá hacer lo mismo en el servidor en el que reside el archivo.

Matt Hamilton
fuente
3
Tenga en cuenta que esto solo muestra los archivos compartidos que están abiertos por otros usuarios de la red. No ayuda a encontrar archivos abiertos en el sistema local. Hacer esto en el servidor probablemente le dirá qué usuario tenía el archivo abierto, pero no qué programa en la máquina de ese usuario. Process Explorer (como lo menciona @JayHofacker) funcionó bien para mí.
tomlogic
2

Utilice Process Explorer para encontrar la identificación del proceso. Luego use Handle para averiguar qué archivos están abiertos.

Por ejemplo, manejar -p

Me gusta este enfoque porque está utilizando utilidades de Microsoft.

pushNpop
fuente
si solo tuviéramos código fuente para esos
graywolf
2

En OpenedFilesView , en el menú Opciones, hay un elemento de menú llamado "Mostrar archivos de red". Quizás con eso habilitado, la utilidad antes mencionada sea de alguna utilidad.

M8R-qpgep8
fuente