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

通过Win32_OperatingSystem获取Windows版本标识(如23H2)是否有内置方法?

问题:是否有内置方法直接获取Windows版本描述(如23H2)?

你目前通过WMI的Win32_OperatingSystem获取Build Number,再通过预定义映射表转换为营销版本号(如23H2)的代码如下:

std::map<CString, CString> mapWindowsVersions
{
    { L"22631", L"23H2" },
    { L"22621", L"22H2" },
    { L"22000", L"21H2" },
    { L"19044", L"21H2" },
    { L"19043", L"21H1" },
    { L"19042", L"20H2" },
    { L"19041", L"2004" },
    { L"18363", L"1909" },
    { L"18362", L"1903" },
    { L"17763", L"1809" },
    { L"17134", L"1803" },
    { L"16299", L"1709" }
};
VARIANT vtProp{};
hres = pclsObj->Get(L"BuildNumber", 0, &vtProp, 0, 0);
strSystemInfo.AppendFormat(L"  Build Number: %s\r\n", mapWindowsVersions[vtProp.bstrVal]);
VariantClear(&vtProp);

针对你的问题,结论是:Windows没有原生的内置方法直接返回“23H2”这类营销版本号。原因是这类版本号属于微软的营销命名,并非系统内核层面的正式标识,系统本身仅维护内部的Build Number(如22631)。

不过可以参考以下几种替代方案:

  • 继续使用映射表(推荐):这是最可靠的方式,只要根据官方更新的Build与营销版本对应关系维护映射表即可,稳定性和兼容性都有保障。
  • 读取注册表项:可以读取HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion路径下的DisplayVersion值,该值通常会显示类似“23H2”的字符串。但注意:部分旧版Windows(如早期Windows 10)可能没有这个值,且该值的长期稳定性未得到官方承诺,后续版本可能变更。
  • 使用版本API:GetVersionEx或VerifyVersionInfo这类API可以获取系统的主版本、次版本和Build号,但Windows 8.1及之后版本需要配置应用程序清单才能返回正确信息,且最终仍需自行映射到营销版本号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:48:18