2013-02-13 5 views
6

与えられたプロセス用にロードされたすべてのdllのリストを取得したいと思います。私は現在.NET Framework 4.0を使用しています。私は、Process.Modulesプロパティを使用してすべての管理対象DLLにアクセスしようとすると、bugがあることを認識しています。 (管理されていないDLLのみをリストします)。これらのDLLをすべてプログラムで取得する方法が必要です。プロセス用にすべてのDLLを取得

Process[] myProcess = Process.GetProcessesByName("MyProcess"); 
if(myProcess.Count() > 0) 
{ 
     foreach (ProcessModule processModule in myProcess[0].Modules) 
     //get information 
} 

EDIT:興味のあるプロセスは現在のAppDomainにありません。

+2

チェックアウト:AppDomain.GetAssemblies' –

+0

@AppDeveloper私は彼がAppDomainを使って別のプロセスのアセンブリを取得したいのではなく、独自のプロセスを取得したいと考えています。 – Jehof

+0

返信いただきありがとうございます。私のプロセスが現在のAppDomainで実行されていない場合、私はこれが動作するとは思わない。 – Matthew

答えて

6

私はありません、それはバグではありませんバグ

があることは承知しています。これはCLR v4の意図的なデザイン変更であり、Microsoftはそれを秘密にしていませんでした。以前のバージョンのCLRでは、アンロードされたアセンブリをアンマネージDLLと同様にエミュレートするようになっていました。しかし、これは、サイドバイサイドのインプロセスCLRバージョン管理機能を実装したときに意味をなさないことになりました。それはなくなり、戻ってこない。

これはまさに大きな問題ではありません。別のプロセスでロードされたアセンブリのリストを取得することは、デバッグインターフェイスで十分サポートされています。 ICorDebugAppDomain :: EnumerateAssemblies()はチケットです。まあ、Process.Modulesと同じくらい使いやすいとは限りません。使用方法については、MDbg sampleを参照してください。

+0

ありがとうございます。 MDbgに関する私の他の質問を見ていただけますか? [リンク](http://stackoverflow.com/questions/14877213/mdbg-debuggers-protocol-is-incompatible-with-the-debuggee) – Matthew

関連する問題