代码之家  ›  专栏  ›  技术社区  ›  Irwin

文件被哪个进程锁定?

  •  10
  • Irwin  · 技术社区  · 15 年前

    在.NET中是否有方法可以确切地找出哪个进程锁定了文件?

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

    3 回复  |  直到 15 年前
        1
  •  6
  •   Simon P Stevens    15 年前

    简短的回答是不。

    然而,长期的答案是,有各种各样的api调用和wmi方法可以用来找出这些信息,但不要期望它是快速和简单的。

    如果要使用api调用,请查看 NtQuerySystemInformation 系统进程信息参数的函数。这是伴随着精彩的免责声明而来的那些可爱的“无文档”方法之一:

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

    所以我建议避免使用wmi。

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

    我推荐一篇关于codeproject的好文章 How To: (Almost) Everything In WMI via C# Part 2: Processes . (如果你喜欢这种东西,第一部分也是一本很好的读物)

        2
  •  1
  •   Nick    15 年前

    好。。。这不完全是一种.NET方式…但是假设你只是想用一个简单的工具来发现 Handle from SysInternals .

        3
  •  0
  •   holtavolt    15 年前

    看来有人已经弄明白了(你也可以学点法语:)

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