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

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

有帮助吗?

解决方案

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

然而,长的答案是,您可以使用各种 API 调用和 WMI 方法来查找此信息,但不要指望它会快速而简单。

如果你想使用 API 调用,请查看 NtQuery系统信息 带有 SYSTEM_PROCESS_INFORMATION 参数的函数。这是那些可爱的“未记录”方法之一,附带了精彩的免责声明:

NtQuerySystemInformation 可能是 更改或将来不可用 Windows 版本。应用 应使用替代函数 在本主题中列出。

所以我建议避免这种情况,转而使用 WMI。

您可以使用 WMI Win32_进程 类来枚举当前在计算机上运行的所有进程,然后枚举每个进程持有的所有句柄,直到找到您要查找的文件。不幸的是,没有简单的方法可以“嘿,哪个进程正在锁定这个文件”,它只能以相反的方式工作,您必须向下搜索进程列表,直到找到锁定您感兴趣的文件的进程。

我推荐 CodeProject 上一篇不错的小文章,标题为 如何:(几乎)通过 C# 实现 WMI 中的所有内容第 2 部分:流程. 。(如果您喜欢这类内容,第 1 部分也值得一读)

其他提示

出色地...这不完全是 .NET 的做法......但假设您只想使用一个简单的实用程序来了解,请查看 来自 SysInternals 的句柄.

看起来像有人想出这一个(你可以学习一些法文以及:))

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top