C# 获取所有进程及其对应的应用程序域

C# 获取所有进程及其对应的应用程序域,c#,visual-studio-2010,process,appdomain,C#,Visual Studio 2010,Process,Appdomain,运行程序时,是否可以获取正在运行的进程及其相应的应用程序域的列表?我知道mscoree.dll允许我使用ICorRuntimeHost.EnumDomains方法检索当前进程的所有应用程序域。有没有一种方法可以不使用外部API而只使用纯C代码来获取这些信息?我知道mdbg有一些功能可能会有所帮助,但我不知道如何使用这个调试器。我真的在寻找一个只使用C的解决方案 谢谢 编辑: 目标是在html页面上显示每个进程及其相应的应用程序域。理想情况下,应该有一个函数,该函数迭代所有正在运行的进程并检索此信

运行程序时,是否可以获取正在运行的进程及其相应的应用程序域的列表?我知道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);
        }
    }

使用位于C:\Program Files x86\Microsoft SDK\Windows\v7.0A\Bin\MdbgCore.dll中的MdbgCore.dll:

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

                    }
                }

这需要一个调试函数,ICorDebugProcess::EnumerateAppDomains。当然,有更好的方法来实现你想要的,但是这个代码的目标是完全不可见的。谢谢你的建议,但是我希望避免使用任何C++库或如果可能的话导入。