You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级SDK 10.0.22621.0后PdhAddCounter在Windows 10中失效

问题定位分析

结论先行:大概率是SDK更新引发的兼容性问题,系统版本差异为次要影响因素

核心原因拆解

  • 你的代码在旧SDK(10.0.17763.0)编译时完全正常,仅升级SDK后才触发错误,这是最直接的指向——SDK版本变化引入了兼容性冲突。
  • Win7升级到Win10的机器能正常运行,是因为这类系统的性能计数器注册表项、服务状态保留了旧的兼容配置;而纯净版Win10(或更新到特定版本的Win10)的性能计数器环境更“新”,和高版本SDK编译的程序出现了适配断层。

具体可能的SDK相关诱因

  1. 编译宏版本提升:高版本SDK会默认将_WIN32_WINNT宏设为更高值(对应Win10 22H2),导致PDH函数调用时启用了更严格的路径解析逻辑,原本合法的\\Processor(_Total)\\% Processor Time路径在新逻辑下无法被识别。
  2. PDH库行为调整:高版本SDK附带的PDH头文件或库文件,对计数器路径的校验、对象查找逻辑做了修改,使得硬编码的旧路径格式无法匹配新的系统计数器对象。

快速验证方法

  • 用旧SDK(10.0.17763.0)重新编译程序,放到出问题的纯净Win10机器上运行:
    • 若能正常工作,100%确认是SDK更新导致的问题;
    • 若仍报错,再排查Win10系统的性能计数器状态(比如运行命令lodctr /R重置计数器后重试)。

临时解决思路

  1. 尝试修改计数器路径格式,比如改为\\*Processor(_Total)\\% Processor Time(添加星号),或者使用PdhLookupPerfNameByIndex通过索引获取计数器路径,避免硬编码字符串的兼容性问题。
  2. 编译时手动指定_WIN32_WINNT宏为旧版本值(例如#define _WIN32_WINNT 0x0A00,对应Win10 1809,即SDK17763对应的系统版本),强制程序使用旧的PDH函数行为。

内容的提问来源于stack exchange,提问作者ehardin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:30:50