プログラムの実行時に、実行中のプロセスのリストとそれに対応するアプリドメインを取得することはできますか?mscoree.dllを使用すると、 ICorRuntimeHost.EnumDomainsメソッドを使用して現在のプロセスのすべてのアプリドメインを取得できることを認識しています。外部APIと純粋なC#コードを使用せずにこの情報を取得する方法はありますか?mdbgには役立つ関数がいくつかあることは理解していますが、このデバッガーの使用方法がわかりません。私は本当にC#だけを使った解決策を探しています。
ありがとう
編集:目標は、実行中のすべてのプロセスを、対応するアプリドメインとともにhtmlページに表示することです。理想的には、実行中のすべてのプロセスを反復処理してこの情報を取得する関数があります。
現在のプロセスのすべてのアプリドメインを取得するコード:
private static List<AppDomainInf> GetAppDomains()
{
IList<AppDomain> mAppDomainsList = new List<AppDomain>();
List<AppDomainInf> mAppDomainInfos = new List<AppDomainInf>();
IntPtr menumHandle = IntPtr.Zero;
ICorRuntimeHost host = new CorRuntimeHost();
try
{
host.EnumDomains(out menumHandle);
object mTempDomain = null;
//add all the current app domains running
while (true)
{
host.NextDomain(menumHandle, out mTempDomain);
if (mTempDomain == null) break;
AppDomain tempDomain = mTempDomain as AppDomain;
mAppDomainsList.Add((tempDomain));
}
//retrieve every app domains detailed information
foreach (var appDomain in mAppDomainsList)
{
AppDomainInf domainInf = new AppDomainInf();
domainInf.Assemblies = GetAppDomainAssemblies(appDomain);
domainInf.AppDomainName = appDomain.FriendlyName;
mAppDomainInfos.Add(domainInf);
}
return mAppDomainInfos;
}
catch (Exception)
{
throw; //rethrow
}
finally
{
host.CloseEnum(menumHandle);
Marshal.ReleaseComObject(host);
}
}