文件被哪个进程锁定?

Irw*_*win 10 .net process file-locking

在.Net中是否有办法确切地找出哪个进程锁定了文件?

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

Sim*_*ens 6

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

但是,很长的答案是,您可以使用各种AP​​I调用和WMI方法来查找此信息,但不要指望它快速而简单.

如果要使用API​​调用,请使用SYSTEM_PROCESS_INFORMATION参数查看NtQuerySystemInformation函数.这是美妙的免责声明附带的那些可爱的"无证"方法之一:

在未来的Windows版本中,NtQuerySystemInformation可能会被更改或不可用.应用程序应使用本主题中列出的备用功能.

所以我建议避免使用WMI.

您可以使用WMI Win32_Process类枚举当前在计算机上运行的所有进程,然后枚举每个进程持有的所有句柄,直到找到您要查找的文件.不幸的是,没有简单的方法去"嘿,哪个进程锁定了这个文件",它只是反过来你必须搜索进程列表,直到找到锁定你感兴趣的文件的那个.

我推荐一篇关于CodeProject的一篇很好的小文章,名为" 如何:(几乎)所有在WMI中通过C#第2部分:进程".(如果你喜欢那种东西,第1部分也是一本很好的读物)