我怎样才能确定一个特定的文件是否在Windows中打开?

我最喜欢的Linux工具之一是lsof – 一把真正的瑞士军刀!

今天,我发现自己想知道WinXP系统上的哪个程序打开了特定的文件。 是否有任何等价于lsof的工具? 此外,有问题的文件是通过networking共享,所以我不知道这是否复杂的事情。

使用Sysinternals Suite中的Process Explorer ,查找句柄或DLL函数将让您search打开该文件的进程。

lsof -p pid的等价物是sysinternals句柄和listdlls的组合输出,即

 handle -p pid listdlls -p pid 

你可以通过sysinternals pslistfindpid。

尝试句柄 。 Filemon & Regmon对于试图弄清duce程序对你的系统做什么也很好。

尝试解锁 。

Unlocker网站有一个漂亮的图表(向下滚动后,显示与其他工具比较)。 显然,这样的比较往往是有偏见的,因为它们通常由工具作者编写,但是图表至less列出了替代scheme,以便您可以自己尝试。

如果该文件是.dll,那么您可以使用TaskList命令行应用程序查看谁打开了它:

 TaskList /M nameof.dll 

一个相当于lsof的可以从Sysinternals的句柄列表中合并输出,即:

 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 

不幸的是,你必须“以pipe理员身份运行”才能使用它们。

listdlls句柄也不会产生连续的表格forms,所以过滤文件名会隐藏PID。 findstr /c:pid: /c:<filename>应该会让你非常接近这两个实用程序

 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 [...] 

这里我们可以看到gvim.exe是打开这个文件的。

如果右键单击“计算机”(或“我的电脑”)图标,然后从popup式菜单中select“pipe理”,则会将您带到计算机pipe理控制台。

在那里,在系统工具\共享文件夹下,你会发现“打开文件”。 这可能接近你想要的,但是如果文件在networking共享上,那么你需要在文件所在的服务器上做同样的事情。

有一个程序“OpenFiles”,似乎是Windows 7的一部分。似乎它可以做你想做的。 它可以列出由远程用户打开的文件(通过文件共享),并在调用“openfiles / Local on”和系统重新启动后,应该能够显示本地打开的文件。 据说后者有性能处罚。

使用Process Explorer来查找进程ID。 然后使用Handle来找出打开的文件。

例如句柄-p

我喜欢这种方法,因为您使用的是Microsoft自身的实用程序。

在OpenedFilesView ,在选项菜单下,有一个名为“显示networking文件”的菜单项。 也许在启用的情况下,上述实用程序有一些用处。