2012-01-21 88 views
0

我有.NET可執行文件託管在分開的AppDomain中的插件。 有時在應用程序使用過程中,此插件之一會鎖定文件並阻止其移動或刪除。什麼執行堆棧/ .NET AppDomain擁有文件句柄?

我需要找出誰擁有文件句柄?

問題是間歇性的,很難重現。有5個插件。 這不是禁止插件訪問這些文件或殺死句柄的解決方案(就像Unlocker一樣)。

我想:

首先,Sysinternals的 - 但它表明只有誰擁有具有指定名稱的文件的過程。

其次,在約WinDbg的文章和文檔說明我可以使用過程和處理,但得到的未來:!!!

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 86(我的過程是32位)

的Windows 7 SP1 64位

回答

2

如果你知道被鎖定,那麼該文件最容易做的事情將是在您的進程上運行ProcMon並監視該文件,並查看哪個線程將其打開,然後在windbg中檢查該線程。您可以通過右鍵單擊該操作並轉至屬性來查看哪個線程在procmon中打開了一個文件。這會給你線程ID和線程堆棧跟蹤。

如果你不能這樣做,我會嘗試完全卸載windbg,然後安裝x64版本。 x64可以打開x86和x64,然後再次嘗試命令。