2009-08-09 54 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_PATH代替COR_PROFILER。它直接指向分析代理DLL。例如:

集COR_PROFILER_PATH = C:\ Program Files文件\ MyProfiler \ MyAgent.dll

記住COR_PROFILER_PATH只能在CLR4後。 另一種選擇是使用GUID insid的PROGID。例如:

組COR_PROFILER = MyProfiler.MyAgent

的ProgID是本HKEY_CLASSES_ROOT下注冊