文件被哪个进程锁定?

2024-03-31

.Net 中有没有办法准确找出哪个进程锁定了文件?

EDIT:我这样做是因为我想让我的用户知道他们无法修改/打开该文件,因为目前他们正在使用的另一个程序(例如 Excel)已打开该文件。希望这会有所帮助。


对此的简短回答是否定的。

然而,长的答案是,您可以使用各种 API 调用和 WMI 方法来查找此信息,但不要指望它会快速而简单。

如果你想使用 API 调用,请查看NtQuery系统信息 http://msdn.microsoft.com/en-us/library/ms724509%28VS.85%29.aspx带有 SYSTEM_PROCESS_INFORMATION 参数的函数。这是那些可爱的“无证”方法之一,附带了精彩的免责声明:

NtQuerySystemInformation 可能是 将来更改或不可用 Windows 版本。应用领域 应该使用替代功能 本主题中列出。

所以我建议避免这种情况,转而使用 WMI。

您可以使用WMI Win32_进程 http://msdn.microsoft.com/en-us/library/aa394372%28VS.85%29.aspx类来枚举当前在计算机上运行的所有进程,然后枚举每个进程持有的所有句柄,直到找到您要查找的文件。不幸的是,没有简单的方法可以“嘿,哪个进程正在锁定这个文件”,它只能以相反的方式工作,您必须向下搜索进程列表,直到找到锁定您感兴趣的文件的进程。

我推荐 CodeProject 上一篇不错的小文章,标题为如何:(几乎)通过 C# 实现 WMI 中的所有内容第 2 部分:进程 http://www.codeproject.com/KB/cs/EverythingInWmi02.aspx。 (如果您喜欢这类内容,第 1 部分也值得一读)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件被哪个进程锁定? 的相关文章

随机推荐