通过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
相关产品推荐
相关产品推荐

