現在のプロセスのAppDomainをトラバースする方法

オリジナルリンク: http://www.cnblogs.com/VisualStudioDesigner/archive/2011/01/11/1932987.html

  .NET Frameworkは、実際に他のAppDomain現在のプロセスに取得していない管理インタフェースを提供します!したがって、我々はこのことを達成するためにベアラ・インターフェース(ホスティングインタフェース)を助けます。
  Mscoree.dllで、.NET、1.0 ICorRuntimeHostは幸いEnumDomainsとNextDomain方法を持っているのインターフェースを提供しますが、:にMscoree.dllを実際に直接公共の実装で:CorRuntimeHostClass。だから、私たちは、その後にEnumDomainsとNextDomainメソッドを呼び出すCorRuntimeHostClassを作成する必要があります。

public static IList<AppDomain> GetAppDomains()
{
    IList<AppDomain> list = new List<AppDomain>();
    IntPtr enumHandle = IntPtr.Zero;
    CorRuntimeHostClass host = new CorRuntimeHostClass();
    try
    {
        host.EnumDomains(out enumHandle);
        object domain = null;
        while (true)
        {
            host.NextDomain(enumHandle, out domain);
            if (domain == null) break;
            AppDomain appDomain = (AppDomain)domain;
            list.Add(appDomain);
        }
        return list;
    }
    catch (Exception e)
    {
        return null;
    }
    finally 
    {
        host.CloseEnum(enumHandle); 
        Marshal.ReleaseComObject(host); 
    }
}

 

以下のためにMscoree.dll アセンブリ参照用のCOM :参照 C:\ WINDOWS \ Microsoft.NET \ Frameworkの\ vxxxxxxは\ mscoree.tlb

にMscoree.dll より詳細な情報を参照してください.NETの陰の英雄:にMscoree.dll

ます。https://www.cnblogs.com/VisualStudioDesigner/archive/2011/01/11/1932987.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_30698297/article/details/94790667