2008-08-19 21 views

Respuesta

61

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

+0

¿Esto realmente responde la pregunta? Process Explorer le permite ver qué archivos están abiertos para un determinado proceso/handle/dll/whatever, pero esa es la asignación inversa. Vea mi respuesta http://stackoverflow.com/questions/15708/lsof-equivalent-for-windows#188337 a esta pregunta. –

+5

Sí lo hace. Haga clic en Find Handle o Dll (o presione Ctrl-F), escriba el nombre del archivo que está buscando y termine con una lista de procesos con ese archivo abierto. –

+0

Process Explorer ahora se ha renombrado y se ha incluido en "Process Monitor". –

4

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

Allí, en Herramientas del sistema \ Carpetas compartidas, encontrará "Abrir archivos". 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.

+3

Tenga en cuenta que esto solo muestra archivos compartidos que están abiertos por otros usuarios de la red. No ayuda a encontrar archivos que están abiertos en el sistema local. Hacer esto en el servidor probablemente le diría 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

8

Probar Handle. Filemon & Regmon son también excelentes para tratar de averiguar qué está haciendo el programa duce foo en su sistema.

+0

Probado y me gustó Handle. Gracias. – Batandwa

+0

@slipsec FileMon y Regmon ahora se reemplazan por [Process Monitor v3.2] (https://technet.microsoft.com/en-us/sysinternals/bb896645) en las versiones de Windows comenzando con Windows 2000 SP4, Windows XP SP2, Windows Server 2003 SP1 y Windows Vista. – Lucky

5

Probar 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.

+4

Unlocker solo muestra los archivos bloqueados, no los archivos abiertos. La mayoría del software de Windows bloquea la DLL que usa, pero no sus documentos. – Tobias

36

El equivalente de lsof -p pid es la producción combinada de sysinternals manejar y listdlls, es decir

handle -p pid 
listdlls -p pid 

puede averiguar PID con sysinternals pslist.

5

Si el archivo es un archivo .dll a continuación, puede utilizar la aplicación de línea de comandosLista de Tareas para ver quién lo consiguió abrir:

TaskList /M nameof.dll 
2

Uso Process Explorer para encontrar el identificador de proceso. Luego use Handle para averiguar qué archivos están abiertos.

Ej manejar -p

me gusta este enfoque porque está utilizando los servicios públicos de la propia Microsoft.

+0

si tuviéramos el código fuente para esos – Paladin

1

En OpenedFilesView, en el menú Opciones, hay un elemento de menú llamado "Mostrar archivos de red". Tal vez con eso habilitado, la utilidad antes mencionada es de alguna utilidad.

5

un equivalente de lsof se podría combinar la salida de Sysinternals' mango 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 

Por desgracia, hay que 'ejecutar como administrador' para poder utilizarlos .

también listdlls y mango no producen forma de tabla continuo a modo de filtrar el nombre de archivo ocultaría PID. findstr /c:pid: /c:<filename> debe llegar muy estrecha con las dos empresas de servicios públicos, 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 la que tiene este archivo abierto.

3

Hay un programa "OpenFiles", parece ser parte de Windows 7. Parece que puede hacer lo que quieras. Puede enumerar archivos abiertos por usuarios remotos (a través de archivos compartidos) y, después de llamar al "abrir archivos/Local on" y reiniciar el sistema, debe poder mostrar los archivos abiertos localmente. Se dice que este último tiene sanciones de rendimiento.

+0

Vengo aquí buscando una manera de averiguar quién me impide borrar una carpeta y evitar un reinicio, y me parece que el comando que necesito requiere una configuración que ... lo adivinaste .... requiere un reinicio. ¿Qué tan muy ventanas? – Gus

Cuestiones relacionadas