【问题标题】:How do i get "winver"?我如何获得“winver”?
【发布时间】:2021-12-09 18:39:26
【问题描述】:

我正在尝试获取 cmd 命令“winver”中显示的版本号,在我的例子中是 20H2。我如何用代码得到它?我没有找到涉及此主题的帖子。

【问题讨论】:

标签: c++ windows


【解决方案1】:

恕我直言,您维护了内部版本号及其字符串的映射,例如

#include <iostream>
#include <map>

int main() {
    std::map<int,std::string> builds = {{19042, "20H2"}, {19043, "21H1"}};
    std::cout << builds.at(19042) << std::endl;
    return 0;
}

您将获得带有GetVersion()GetVersionEx() 的内部版本号。有关列表,请参阅Wikipedia。请注意,内部版本号可能会受到兼容性设置的影响,即 Windows 可能会欺骗您。

恕我直言,Microsoft 建议使用 GetFileVersionInfo() 检查系统 DLL 的版本,例如 kernel32.dll,以获得真实版本。

如果您不喜欢其中任何一个,从注册表中获取名称可能是您正在寻找的选项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DisplayVersion

【讨论】:

  • 嗯,奇怪。虽然winver 表示 21H1,但我机器上的 kernel32.dll 和 ntdll.dll 是 19041。我现在有点担心。
  • 21H1 是一个营销名称。 dll 文件像往常一样使用正常的内部版本号。
  • @Anders:我知道,但 21H1 应该是 19043,而不是 19041
猜你喜欢
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
  • 2019-03-24
  • 2013-10-23
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多