6

特定のプロセスにロードされたすべてのdllのリストを取得したいと思います。現在、.NETFramework4.0を使用しています。Process.Modulesプロパティを介してすべての管理されたdllにアクセスしようとすると、バグがあることを認識しています。(管理されていないdllのみを一覧表示します)。これらすべてのdllをプログラムで取得する方法が必要です。

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

編集:私が興味を持っているプロセスは、現在のAppDomainにはありません。

4

1 に答える 1

6

バグがあることを認識しています

いいえ、それはバグではありません。これはCLRv4での意図的な設計変更であり、Microsoftはそれを秘密にしませんでした。以前のバージョンのCLRは、ロードされたアセンブリをアンマネージDLLであるかのようにエミュレートするように努めました。しかし、サイドバイサイドのインプロセスCLRバージョニング機能を実装したとき、それは意味をなさなくなりました。それはなくなって、戻ってこないでしょう。

これは必ずしも大きな問題ではありません。別のプロセスでロードされたアセンブリのリストを取得することは、デバッグインターフェイスによって十分にサポートされています。ICorDebugAppDomain :: EnumerateAssemblies()がチケットです。まあ、Process.Modulesほど使いやすいわけではありません。MDbgサンプルを使用して、その使用方法を確認してください。

于 2013-02-13T22:39:09.360 に答える