2013-02-07 2 views
1

프로그램을 실행할 때 실행중인 프로세스 목록과 해당 앱 도메인 목록을 가져올 수 있습니까? 내가 알고있다 mscoree.dllICorRuntimeHost.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); 
     } 
    } 
+0

디버깅 기능인 ICorDebugProcess :: EnumerateAppDomains()가 필요합니다. 분명히 원하는 것을 성취 할 수있는 더 좋은 방법이 있지만이 코드의 목표는 전적으로 보이지 않습니다. –

+0

제안 해 주셔서 감사합니다. 그러나 가능한 경우 모든 C++ 라이브러리 또는 가져 오기를 사용하지 않으려 고합니다. – Matthew

답변

2

MdbgCore.dll를 사용하여 C 안에 위치 : 현재 프로세스에 대한 모든 응용 프로그램 도메인을 검색

코드 \ 프로그램 파일 마이크로 소프트의 SDK \ WINDOWS \ v7.0A \ 빈 \ (86) \ MdbgCore.dll :

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

        } 
       } 
관련 문제