多年前我编写了一个 PC 审计工具,并且一直在更新它。基本功能之一是报告正在审核的 PC 上运行的 Windows 版本,我一直使用 GetVersionEx 调用。
这适用于并包括 Windows 8,但在 Windows 10 下不受支持,实际上 Windows 10 会像 Windows 8 一样返回 8.2。微软似乎没有引入任何东西作为直接替代,而是建议您检查所需的特定功能而不是查看操作系统,但出于审核目的,我实际上想要操作系统名称。
“扫描仪”是一个必须在非特权帐户下运行的 C++ 程序,所以我认为我没有阅读过另一个建议 - 选择系统 DLL 的版本(如 kernel32.dll)将起作用,因为这些文件夹通常无法访问给用户。
欢迎任何其他建议/想法!
原文由 user1169502 发布,翻译遵循 CC BY-SA 4.0 许可协议
从 Windows 8.1 开始,
GetVersion()
和GetVersionEx()
以应用程序表现为准:较新的 Version Helper 函数 只是
VerifyVersionInfo()
的包装器。从 Windows 10 开始,它现在也受到表现形式的影响:要获得 真正 的操作系统版本,无论表现形式如何,请使用
RtlGetVersion()
、NetServerGetInfo()
或NetWkstaGetInfo()
代替。它们都报告了准确的操作系统版本,并且不受表现形式的影响(还没有?)。(微软曾经建议查询系统 DLL 的文件版本,但当 Windows 没有更新系统 DLL 版本以匹配时,他们 不再 建议。)