如何确定特定文件是否在 Windows 中打开?[关闭]
-
08-06-2019 - |
题
我最喜欢的 Linux 工具之一是 拉索夫 - 真正的瑞士军刀!
今天我发现自己想知道 WinXP 系统上的哪些程序打开了特定的文件。有没有与 lsof 等效的实用程序?此外,有问题的文件是通过网络共享进行的,因此我不确定这是否会使问题变得复杂。
解决方案
使用 流程浏览器 从 Sysinternals Suite 中,查找句柄或 DLL 功能可让您搜索打开该文件的进程。
其他提示
相当于 lsof -p pid
是 sysinternals 句柄和 listdll 的组合输出,即
handle -p pid
listdlls -p pid
你可以用 sysinternals 找到 pid pslist
.
相当于一 拉索夫 可以合并 Sysinternals 的输出 处理 和 列表DLL, , IE。:
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
不幸的是,您必须“以管理员身份运行”才能使用它们。
还 列表DLL 和 处理 不产生连续的表格形式,因此过滤文件名会隐藏 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 是打开该文件的。
尝试 解锁器.
Unlocker 网站有一个漂亮的图表(点击链接后向下滚动),显示了与其他工具的比较。显然,这种比较通常是有偏见的,因为它们通常是由工具作者编写的,但该图表至少列出了替代方案,以便您可以自己尝试。
如果文件是 .dll 那么您可以使用 任务列表 命令行应用程序查看谁打开了它:
TaskList /M nameof.dll
如果右键单击“计算机”(或“我的电脑”)图标并从弹出菜单中选择“管理”,则会进入计算机管理控制台。
在其中的“系统工具\共享文件夹”下,您将找到“打开文件”。这可能接近您想要的,但如果文件位于网络共享上,那么您需要在文件所在的服务器上执行相同的操作。
有一个程序“OpenFiles”,似乎是Windows 7的一部分。似乎它可以做你想做的事。它可以列出由远程用户打开的文件(通过文件共享),在调用“ OpenFiles /local on”并重新启动系统后,它应该能够在本地显示打开的文件。据说后者会造成性能损失。
在 打开的文件视图, ,在“选项”菜单下,有一个名为“显示网络文件”的菜单项。也许启用该功能后,上述实用程序会有一些用处。