27

我一直在试图弄清楚如何以编程方式识别锁定特定文件的进程。我已经搜索了 Win32 API 和 WMI,但到目前为止我找不到任何东西。我知道这是可能的 - Sysinternals 能够列出系统上每个进程访问/锁定的每个资源。

任何人都可以给我一个提示吗?

4

7 回答 7

24

您可以使用Sysinternals 中的 handle.exe

就像是:

> handle /accepteula C:\path\to\directory
...
program.exe           pid: 1234   type: File           2E4: C:\path\to\directory
...

感谢https://stackoverflow.com/a/599268/367916

于 2013-01-11T20:00:53.523 回答
9

您可以使用Microsoft 的Process Explorer

  1. 下载并解压并运行Process Explorer
  2. 单击查找菜单,然后单击查找句柄或 DLL...或按CTRL + F
  3. 将路径复制并粘贴到文件的锁定文件夹
  4. 单击Search,您可以从Process Explorer主窗口终止进程
于 2016-05-20T06:47:49.450 回答
4

如果您可以限制自己使用足够新的 Windows 版本,重新启动管理器可以告诉您哪个进程打开了特定文件

于 2014-08-12T21:31:36.890 回答
2

由于 Process Explorer 的工作方式,我怀疑您需要寻找的是一种查找附加到给定进程的文件句柄的方法,并且您必须为系统中的每个进程提取该列表并查找你的文件在里面。

于 2008-12-18T23:35:55.100 回答
0

我不知道在 Windows 中,但有人可能会发现知道在 Linux 中,您可以使用lsof命令,或者只是搜索文件夹 /proc/PROCESS_ID/fd 并查看打开文件的进程很有用。

于 2008-12-19T07:34:55.650 回答
0

WhoLockMe是一个不错的右键单击 Windows 资源管理器扩展。

于 2008-12-19T12:12:02.123 回答
0

这篇文章可能对你有帮助。

您似乎被迫使用 ntdll.dll 中未记录的函数搜索系统上每个进程的文件列表。

于 2009-07-27T14:15:10.067 回答