在 Windows 中,如果我想检查哪个进程正在使用某个文件,我可以使用 Process Hacker 等程序及其搜索功能来输入该文件的名称。
从它提供的信息中,我知道一个进程正在对该文件执行某些操作,但我不知道它是否锁定了该文件,或者只是读取或写入该文件。我如何获取这些信息?
更重要的是,相反的情况呢?我想找到被进程锁定或写入或读取的文件的名称。
我该怎么做?
在下面的屏幕截图中,您可以看到从文件名中找到进程名称是多么容易,但是如何找到给定进程使用的文件的名称呢?
在这个例子中,我使用 Acrobat 打开了一个名为的 PDF 文件eemeir.pdf
,但是它没有在 Acrobat 进程树中列出。
与Process Explorer相同:
PD:@user173724 建议如何使用 Process Explorer 来执行此操作,并且我还找到了如何使用 PH 来执行此操作:
我需要选择选项“查看->窗口”,然后就会出现一个非常大的信息列表。
但是它非常丑陋并且在那里找不到任何东西(Process Explorer 也是如此),它在此部分没有搜索功能。
同时右键单击“进程 -> 属性 -> 句柄”。
答案1
关于问题#2:
查找进程正在锁定或写入或读取的文件的名称
双击该进程并转到“句柄”选项卡(这不需要任何 PH 插件)。您对带有Type
=“File”的行感兴趣。
关于问题1:
正如上面的答案一样,您需要找到该进程,双击它,导航到“句柄”选项卡,然后在那里找到该文件。
然后,如果你双击文件的句柄,你会看到Granted Access
。例如,如果你在 Excel 上尝试此操作,对于 TTF 文件(这些是字体,Excel 显然不会修改它们),“授予访问权限”为“读取”,但对于 XSLX 文件或其他用户数据文件,则为“(写入、读取、删除)”。
答案2
微软有一个名为进程资源管理器的实用程序,它就像是强化版的任务管理器。单击列出的程序会显示所有正在访问的文件,它的搜索功能可让您查找正在访问文件的程序。
答案3
或者,您可以使用 sysinternals handle 命令(https://technet.microsoft.com/en-us/sysinternals/handle) 属于同一套件的一部分。
handle c:\windows
显示使用窗口或该目录下文件的所有进程。
在当前版本 4.1 中,如果您只对自己的进程感兴趣,则无需成为管理员用户。您仍然需要提升权限才能查看使用文件/目录的所有进程。