2012-01-21 8 views
0

私は分離されたAppDomainsのプラグインをホストする.NET実行可能ファイルを持っています。 アプリケーションの使用中にこのプラグインの1つがファイルをロックし、その移動や削除を防止することがあります。実行スタック/ .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のx86(私のプロセスが32ビットである)

のWindows 7 SP1 x64の

答えて

2

あなたがロックされたファイルを知っている場合は、一番簡単な方法は次のようになりをあなたのプロセスでProcMonを実行してファイルを監視し、どのスレッドがそれを開いているかを確認してから、そのスレッドをwindbgでチェックしてください。 procmonでファイルを開いたスレッドは、操作を右クリックしてプロパティを表示することで確認できます。これによりスレッドIDとスレッドスタックトレースが得られます。

できない場合は、windbgを完全にアンインストールしてから、x64バージョンをインストールしてみてください。 x64はx86とx64の両方を開き、コマンドを再試行できます。

関連する問題