哪个执行堆栈/.NET AppDomain拥有文件句柄?

哪个执行堆栈/.NET AppDomain拥有文件句柄?,.net,windows,file,debugging,windbg,.net,Windows,File,Debugging,Windbg,我有一个.NET可执行文件,它在不同的应用程序域中托管插件。 有时在应用程序使用期间,其中一个插件会锁定文件并阻止其移动或删除 我需要找出谁拥有文件句柄 这个问题是间歇性的,很难重现。有5个插件。 禁止插件访问此文件或杀死句柄(就像Unlocker一样)并不是解决方案 我试过: 首先是Sysinternals,但它只显示保存具有指定名称的文件的进程 第二,正如关于WinDbg的文章和文档中所述,我可以使用它!过程和!处理,但获取下一个: 0:001> !process No export

我有一个.NET可执行文件,它在不同的应用程序域中托管插件。 有时在应用程序使用期间,其中一个插件会锁定文件并阻止其移动或删除

我需要找出谁拥有文件句柄

这个问题是间歇性的,很难重现。有5个插件。 禁止插件访问此文件或杀死句柄(就像Unlocker一样)并不是解决方案

我试过:

首先是Sysinternals,但它只显示保存具有指定名称的文件的进程

第二,正如关于WinDbg的文章和文档中所述,我可以使用它!过程和!处理,但获取下一个:

0:001> !process
No export process found 
0:001> !handle 314 ff 123 
Unknown type '123
我可以用!处理更少的参数,但我的版本(未知原因)甚至没有像中那样显示文件名。我的可执行文件引用了100个文件。 我想深入了解WinDbg的发展方向,但由于某种原因,它安装在Windows 7 SDK上,与文档中所述的功能不同,这妨碍了我进一步的研究

我有:

WinDbg 6.12.0002.633 x86(我的进程是32位)


Windows 7 SP1 x64

如果您知道文件被锁定,那么最简单的方法是在进程上运行ProcMon并监视文件,查看哪个线程打开了它,然后在windbg中检查该线程。通过右键单击操作并转到属性,可以看到哪个线程在procmon中打开了文件。这将为您提供线程ID和线程堆栈跟踪

如果你不能做到这一点,我会尝试完全卸载windbg,然后安装x64版本。x64可以同时打开x86和x64,然后重试这些命令