我使用的是一个模拟工具,它使用Profiling API动态重写IL指令。我们的客户通常有多个使用Profiling API的商业产品,在很多情况下我们的分析器都没有加载。
我想通过检测.NET Profiler的存在来改善客户体验。如果找到第三方分析器,我想打印一条消息,帮助客户正确配置他们的环境。
到目前为止,我还没有找到一种可靠的方法来检测.NET Profiler的存在。我考虑过使用ID 1022解析Windows应用程序日志消息并尝试按进程ID进行匹配,但它似乎非常不稳定。我检查了SSCLI实现,结果发现有一个函数 IsProfilerPresent()执行所需的检查。我可以使用类似的公共Microsoft API吗?
答案 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似乎是您需要的源。