如何确定Windows中是否打开特定文件?
我最喜欢的Linux工具之一是lsof - 一把真正的瑞士军刀!如何确定Windows中是否打开特定文件?
今天,我发现自己想知道其中的WinXP系统上的程序有一个特殊的文件打开。是否有任何与lsof等效的工具?此外,有问题的文件是通过网络共享的,所以我不确定这是否会使问题变得复杂。
如果你的“电脑”(或“我的电脑”)的图标上单击鼠标右键,然后从弹出菜单中选择“管理”,即会带你到计算机管理控制台。
在那里,在系统工具\共享文件夹下,你会发现“打开文件”。这可能与您想要的接近,但如果文件位于网络共享上,那么您需要在文件所在的服务器上执行相同的操作。
请注意,这只显示其他网络用户打开的共享文件。它无助于查找本地系统上打开的文件。在服务器上执行此操作可能会告诉您哪个用户打开了该文件,但不是该用户计算机上的哪个程序。 Process Explorer(如@JayHofacker提到的)对我来说效果很好。 – tomlogic 2012-02-27 21:45:10
尝试Unlocker。
的解锁站点有一个漂亮的图表(以下链接后向下滚动),显示了相对于其他工具。显然,这样的比较通常是有偏见的,因为它们通常由工具作者编写,但图表至少列出了替代方案,以便您可以自己尝试。
的lsof -p pid
应的是组合输出Sysinternals公司的处理和listdlls的,即
handle -p pid
listdlls -p pid
你可以找到PID与Sysinternals的pslist
。
如果该文件是一个.dll,那么你可以使用任务列表命令行应用程序,看谁得到它打开:
TaskList /M nameof.dll
一个当量lsof的可以输出从Sysinternals的手柄和listdlls的,即结合:
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
不幸的是,你必须‘以管理员身份运行’,以能够使用它们。
另外listdlls的和手柄不产生连续的台状形式,以便过滤的文件名会隐藏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是具有打开此文件的人。
有一个程序“OpenFiles”,似乎是Windows 7的一部分。似乎它可以做你想做的。它可以列出由远程用户打开的文件(通过文件共享),并在调用 “openfiles/Local on”并重启系统后,它应该能够显示本地打开的文件。据说后者有表现惩罚。
这是否真的回答了这个问题? Process Explorer可以让你看到哪些文件对于特定的进程/句柄/ dll /什么是开放的,但这是反向映射。看到我的回答http://stackoverflow.com/questions/15708/lsof-equivalent-for-windows#188337这个问题。 – 2008-10-09 17:37:33
是的。点击Find Handle或者Dll(或者点击Ctrl-F),输入你正在搜索的文件的名字,最后打开一个打开该文件的进程列表。 – 2008-10-10 00:07:33
Process Explorer现在已重命名并捆绑到“Process Monitor”中。 – 2009-02-26 15:46:44