如何通过设置COR_PROFILER环境变量链接到正确的Profiler

时间:2009-08-09 13:47:46

标签: .net environment-variables

在我的代码中,我需要设置一个进程将其连接到某个探查器。我明白这就是我必须要做的事情:

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之间的映射?

3 个答案:

答案 0 :(得分:0)

必须将COR_PROFILER环境变量设置为实现ICorProfilerCallback2接口的coclass的GUID。

如果您实现了自定义分析器,则可以在IDL中设置。

这是引用分析器的方法,无需知道实际路径,但为了实现此行为,必须注册具有分析器的COM dll。

答案 1 :(得分: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;
        }


    }

答案 2 :(得分:0)

您可以使用COR_PROFILER_PATH而不是COR_PROFILER。它直接指向分析代理DLL。例如:

设置COR_PROFILER_PATH = C:\ program files \ MyProfiler \ MyAgent.dll

请记住,COR_PROFILER_PATH仅适用于CLR4及之后。 另一种选择是使用PROID的GUID。例如:

设置COR_PROFILER = MyProfiler.MyAgent

PROGID在HKEY_CLASSES_ROOT

下注册