質問
.NET デスクトップ アプリケーションが読み込んだすべてのアセンブリを確認するにはどうすればよいですか?顧客に電話で問い合わせて、PC にインストールされている XYZ のバージョンを確認できるように、情報ボックスにそれらを入力したいと考えています。
マネージド アセンブリとアンマネージド アセンブリの両方が表示されると便利です。リストが長くなるのは承知していますが、追加検索を行う予定です。
解決
using System;
using System.Reflection;
using System.Windows.Forms;
public class MyAppDomain
{
public static void Main(string[] args)
{
AppDomain ad = AppDomain.CurrentDomain;
Assembly[] loadedAssemblies = ad.GetAssemblies();
Console.WriteLine("Here are the assemblies loaded in this appdomain\n");
foreach(Assembly a in loadedAssemblies)
{
Console.WriteLine(a.FullName);
}
}
}
他のヒント
それか、System.Reflection.Assembly.GetLoadedModules() のいずれかです。
AppDomain.GetAssemblies はアセンブリのみを反復処理することに注意してください。 現在 アプリドメイン。アプリケーションには複数の AppDomain が存在する可能性があるため、希望どおりに動作する場合もあれば、動作しない場合もあります。
PowerShell バージョン:
[System.AppDomain]::CurrentDomain.GetAssemblies()
みたいです AppDomain.CurrentDomain.GetAssemblies();
うまくいきます:)
アンマネージドを含むすべての DLL については、EnumProcessModules をピン呼び出ししてモジュール ハンドルを取得し、各ハンドルに対して GetModuleFileName を使用して名前を取得できます。
見る http://pinvoke.net/default.aspx/psapi.EnumProcessModules そして http://msdn.microsoft.com/en-us/library/ms683197(VS.85).aspx (pinvoke.net にはこれの署名がありませんが、それを理解するのは簡単です)。
64 ビットの場合は EnumProcessModulesEx を使用する必要があります