是否有一个API可以检测.NET Profiler的存在?

时间:2013-01-31 12:49:36

标签: .net profiling clr

我使用的是一个模拟工具,它使用Profiling API动态重写IL指令。我们的客户通常有多个使用Profiling API的商业产品,在很多情况下我们的分析器都没有加载。

我想通过检测.NET Profiler的存在来改善客户体验。如果找到第三方分析器,我想打印一条消息,帮助客户正确配置他们的环境。

到目前为止,我还没有找到一种可靠的方法来检测.NET Profiler的存在。我考虑过使用ID 1022解析Windows应用程序日志消息并尝试按进程ID进行匹配,但它似乎非常不稳定。我检查了SSCLI实现,结果发现有一个函数 IsProfilerPresent()执行所需的检查。我可以使用类似的公共Microsoft API吗?

1 个答案:

答案 0 :(得分:0)

Microsoft提供了Unmanaged Profiling API,使分析器能够通过公共语言运行库(CLR)监视程序的执行。 API引用两个环境变量,即进程是否应连接到探查器。这些是

  
      
  • COR_ENABLE_PROFILING:仅当此环境变量存在且设置为1时,CLR才连接到探查器。
  •   
  • COR_PROFILER:如果COR_ENABLE_PROFILING检查通过,CLR将连接到具有此CLSID或ProgID的探查器,   先前已存储在注册表中。 COR_PROFILER   环境变量定义为字符串。
  •   

取自here

我不是分析应用程序的专家,但API似乎是您需要的源。