我有.NET可执行文件,它在分离的AppDomain中托管插件。 有时在应用程序使用期间,其中一个插件会锁定文件并阻止其移动或删除。
我需要找出谁拥有文件句柄?
问题是间歇性的,难以复制。有5个插件。 禁止插件访问此文件或终止句柄(如Unlocker确实)不是解决方案。
我试过了:
首先,Sysinternals - 但它只显示拥有指定名称的文件的进程。
其次,正如关于WinDbg的文章和文档所述,我可以使用!process和!handle,但接下来:
0:001> !process
No export process found
0:001> !handle 314 ff 123
Unknown type '123
我可以使用!带有较少参数的句柄,但是我的版本(原因不明)甚至没有像Debug Tutorial Part 5: Handle Leaks那样显示文件名。我的可执行文件引用了100个文件。 我想深入了解WinDbg的方向,但出于某种原因,从Windows 7 SDK安装它的功能与文档中的说明不同,这阻止了我的进一步调查?
我有:
WinDbg 6.12.0002.633 x86(我的进程是32位)
Windows 7 SP1 x64
答案 0 :(得分:2)
如果您知道文件被锁定,那么最简单的方法是在您的进程上运行ProcMon并监视该文件并查看打开它的线程,然后在windbg中检查该线程。您可以通过右键单击操作并转到属性来查看哪个线程在procmon中打开了一个文件。这将为您提供线程ID和线程堆栈跟踪。
如果你不能这样做,我会尝试完全卸载windbg,然后安装x64版本。 x64可以打开x86和x64,然后再次尝试命令。