2

我正在开发一个使用 Profiling API 即时重写 IL 指令的模拟工具。通常,我们的客户拥有不止一种使用 Profiling API 的商业产品,并且在许多情况下,我们的分析器不会被加载。

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

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

4

1 回答 1

0

Microsoft 提供了一个非托管分析API,它使分析器能够通过公共语言运行时 (CLR) 监视程序的执行。API 引用两个环境变量,进程是否应该连接到分析器。这些是

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

取自这里

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

于 2013-01-31T13:17:47.513 回答