文件被哪个进程锁定?

时间:2010-03-19 18:35:58

标签: .net process file-locking

.Net中是否有办法确切找出锁定文件的进程?

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

3 个答案:

答案 0 :(得分:6)

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

但是,很长的答案是,您可以使用各种AP​​I调用和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)

看起来有人想出了这个(你也可以学习一些法语:))

http://www.axcis.com.au/bb/viewtopic.php?p=505