1

プログラムの実行時に、実行中のプロセスのリストとそれに対応するアプリドメインを取得することはできますか?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);
        }
    }
4

1 に答える 1

2

C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin\MdbgCore.dll内にあるMdbgCore.dllを使用します。

CorPublish cp = new CorPublish();
foreach (CorPublishProcess process in cp.EnumProcesses())
            {
                    foreach (CorPublishAppDomain appDomain in process.EnumAppDomains())
                    {

                    }
                }
于 2013-02-14T15:28:23.763 に答える