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