.Net 中有没有办法准确找出哪个进程锁定了文件?
编辑:我这样做是因为我想让我的用户知道他们无法修改/打开文件,因为目前,他们正在使用的另一个程序(如 Excel)已将其打开。希望这会有所帮助。
.Net 中有没有办法准确找出哪个进程锁定了文件?
编辑:我这样做是因为我想让我的用户知道他们无法修改/打开文件,因为目前,他们正在使用的另一个程序(如 Excel)已将其打开。希望这会有所帮助。
对此的简短回答是否定的。
但是,长答案是,您可以使用各种 API 调用和 WMI 方法来查找此信息,但不要指望它会快速简单。
如果要使用 API 调用,请查看带有 SYSTEM_PROCESS_INFORMATION 参数的NtQuerySystemInformation函数。这是美妙的免责声明附带的那些可爱的“无证”方法之一:
NtQuerySystemInformation 在未来的 Windows 版本中可能会更改或不可用。应用程序应使用本主题中列出的替代功能。
所以我建议避免使用 WMI。
您可以使用WMI Win32_Process类枚举当前在机器上运行的所有进程,然后枚举每个进程持有的所有句柄,直到找到您要查找的文件。不幸的是,没有简单的方法可以去“嘿,哪个进程正在锁定这个文件”,它只能以相反的方式工作,你必须在进程列表中搜索,直到找到锁定你感兴趣的文件的那个。
我推荐一篇关于 CodeProject 的不错的小文章,标题为How To: (Almost) Everything In WMI via C# Part 2: Processes。(如果你喜欢那种东西,第 1 部分也很不错)
嗯...这不完全是一种 .NET 方式...但是假设您只是想使用一个简单的实用程序来查找,请查看来自 SysInternals 的 Handle。
看起来有人已经解决了这个问题(你也可以学习一些法语:))