2009-08-09 3 views
0

코드에서 특정 프로파일 러에 연결하는 프로세스를 설정해야합니다. 나는 이것이 내가해야 할 것이 무엇이라고 이해 :COR_PROFILER 환경 변수를 설정하여 올바른 프로파일 러에 연결하는 방법

ProcessStartInfo processStartInfo = new ProcessStartInfo(exePath); 
processStartInfo.EnvironmentVariables["Cor_Enable_Profiling"] = "0x1"; 
processStartInfo.EnvironmentVariables["COR_PROFILER"] = "{B146457E-9AED-4624-B1E5-968D274416EC}"; 
processStartInfo.UseShellExecute = false; 

문제는 지금은 모르는, 내 선택의 프로파일에 대해 어떻게 processStartInfo.EnvironmentVariables["COR_PROFILER"]을 설정하는 것입니다, 내가 찾을 수있는 곳이있다 프로파일 러 응용 프로그램 이름과 프로파일 러 GUID 간의 매핑을 제거 하시겠습니까?

답변

0

알아 냈습니다. 여기

당신이 그것을 할 수있는 방법은 다음과 같습니다

public class RunProfiler 
    { 
    public void RunProfiler() 
    { 
     ProcessStartInfo processStartInfo = new ProcessStartInfo(exePath); 
     processStartInfo.EnvironmentVariables["Cor_Enable_Profiling"] = "0x1"; 
     processStartInfo.EnvironmentVariables["COR_PROFILER"] = RegistryCode. GetRegistry(); 
     processStartInfo.UseShellExecute = false; 
     } 
    } 
    public static class RegistryCode 
    { 

     public static string GetRegistry() 
     { 
      RegistryKey objectMe = Registry.ClassesRoot.OpenSubKey("CLSID", false); 
      string[] valueName = objectMe.GetSubKeyNames(); 
      for (int i = 0; i < valueName.Length; i++) 
      { 
       var registryValue= objectMe.OpenSubKey(valueName[i], false).OpenSubKey("InprocServer32", false); 
       if(registryValue!=null) 
       { 
        var valueName1 = (string)registryValue.GetValue(""); 
        if (valueName1!=null&&valueName1.Contains(@"C:\Program Files\Typemock\Isolator\")) // or any other path that your profiler dll is located on 
         return valueName[i]; 

       } 
      } 
      return null; 
     } 


    } 
0

COR_PROFILER 환경 변수는 ICorProfilerCallback2 인터페이스를 구현하는 coclass의 GUID로 설정되어야합니다.

사용자 정의 프로파일 러를 구현 한 경우 IDL에서 사용자가 설정합니다.

이것은 프로파일 러를 참조하는 방법이며 실제 경로를 알 필요는 없지만이 동작이 가능하려면 프로파일 러가있는 COM dll을 등록해야합니다.

0

대신 COR_PROFILER의 COR_PROFILER_PATH를 사용할 수 있습니다. 프로파일 링 에이전트 DLL을 직접 가리 킵니다.

설정 COR_PROFILER_PATH = C : 예를 들어 \ 프로그램 파일 \ 해, MyProfiler \ MyAgent.dll

는 CLR4 년 이후 작동 COR_PROFILER_PATH 명심하십시오. 또 다른 옵션은 GUID의 PROGID insted를 사용하는 것입니다. 예를 들어

세트 COR_PROFILER = MyProfiler.MyAgent

PROGID를는 HKEY_CLASSES_ROOT하에 등록

관련 문제