2009-10-05 93 views
1

我想知道一个文件是否由任何进程打开(包括调用者)已经发布了很多建议,这些建议往往围绕尝试打开该文件专门和捕捉异常。如何获得所有进程的打开句柄集

在我的例子中,这没有被证明是一个傻瓜式的方法。我相信我可以通过扫描所有正在运行的进程的文件类型的所有打开的句柄来获取。

回答

1

我不认为你可以简单地用.NET和P/Invoke解决这个问题。您将需要访问低级功能。见AdaraCD在这个线程在另一个论坛发布的解决方案是使用驱动程序开发工具包(DDK):

Enum HANDLEs for a process

1

穷人的方式是从sysinternals shell处理.exe。我不知道它是否可以分发。它必须以管理员身份运行(我很确定你需要管理员权限来执行你想要的操作)。无论如何,如果你可以对它进行shell操作并将输出重定向到一个文件或捕获它的stdout,那么你只需要解析它的输出就可以得到你想要的结果。我在互联网wayback搜索,它并没有出现该标记r。曾经向他的公用事业发布过消息。

这显然不是一个好的解决方案,如果你有一个你分发的应用程序,但如果它只是在内部或许这将是足够好的。

最好的问候, 不要

0

我记得代码handle.exe有公开的信息来源,所以你可以使用这个非常实用的参考。