.net 文件被哪个进程锁定?

.net 文件被哪个进程锁定?,.net,process,file-locking,.net,Process,File Locking,在.Net中有没有办法准确地找出哪个进程锁定了一个文件 编辑:我这样做是因为我想让我的用户知道他们无法修改/打开该文件,因为目前,他们正在使用的另一个程序(如Excel)已将其打开。希望这能有所帮助。看来有人已经想出了这个办法(你也可以学点法语:) 嗯。。。这不完全是一种.NET的方式。。。但是假设你只是想用一个简单的实用程序来找出答案,那就去看看吧。简单的回答是否定的 然而,一个很长的答案是,有各种API调用和WMI方法可以用来查找这些信息,但不要期望它快速而简单 如果要使用API调用,请查看

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


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

看来有人已经想出了这个办法(你也可以学点法语:)


嗯。。。这不完全是一种.NET的方式。。。但是假设你只是想用一个简单的实用程序来找出答案,那就去看看吧。

简单的回答是否定的

然而,一个很长的答案是,有各种API调用和WMI方法可以用来查找这些信息,但不要期望它快速而简单

如果要使用API调用,请查看带有SYSTEM_PROCESS_INFORMATION参数的函数。这是一个可爱的“未记录”方法,它附带了一个精彩的免责声明:

NtQuerySystem可能是 将来更改或不可用 Windows版本。应用 应使用备用功能 在本主题中列出

因此,我建议避免使用WMI

您可以使用该类枚举计算机上当前运行的所有进程,然后枚举每个进程持有的所有句柄,直到找到要查找的文件为止。不幸的是,没有简单的方法可以说“嘿,哪个进程锁定了这个文件”,它只起到相反的作用。你必须搜索进程列表,直到找到锁定你感兴趣的文件的进程


我推荐一篇关于CodeProject的文章,标题是。(如果你喜欢这类东西,第1部分也是一本很好的读物)

这些信息将是无用的,因为当你用它做一些事情时,它不再是准确的。真的吗?你确定…@SpaceghostAli文件总是被无限期锁定,不相关:@Josh Stodola信息不会是无用的,我给出了这个问题+1,因为我在生产系统中有一个用例,在这个用例中,这些信息会非常方便地处理活动文件。他在寻找反之亦然。没错-如果不是性能关键,你可以枚举所有进程的输出来查找文件。当我在Novell服务器上实现类似的东西时,我不得不像那样向后搜索所有东西来查找文件。我想Irwin是在问如何通过编程实现它,我不认为这对他有什么帮助。@Simon从技术上讲,他可以捕获异常,然后通过编程调用此命令行工具来获取当前正在使用该文件的进程。远非理想,是的,但可能!