【发布时间】:2015-11-06 12:38:05
【问题描述】:
我写了一段代码来使用GetVersionEx函数检索windows的主要和次要版本,但是这个函数总是返回主要版本6和次要版本2。
MSDN 说要使用 Version Helper API 来查找当前操作系统。我在 Windows 8.1 中构建了该项目,并引用了 Windows 8.1 工具包路径以包含 VersionHelpers 头文件。 VersionHelpers 头文件中没有 IsWindows10OrGreater() 函数。
所以我从 GitHub 下载了 VersionHelper 头文件并添加到我的项目中。编译错误消失但 IsWindows10OrGreater 函数失败。
我做错了吗?
【问题讨论】:
-
您从哪里下载 VersionHelper.h? GitHub 不仅托管一个项目...
-
如果您希望 GetVersionEx 返回正确的版本,您应该在您的清单中指定窗口 8.1/10 支持msdn.microsoft.com/en-us/library/windows/desktop/…
-
微软长期以来一直承诺他们将击败版本检查。这在Win10中完全执行。恢复版本 10 的唯一方法是构建您的程序以针对 Win10。项目 > 属性 > 链接器 > 系统 > 最低要求版本必须设置为“10.0”。这完全没有意义并非偶然:) 唯一的另一种方法是从像 kernel32.dll 这样的 DLL 获取版本资源
-
为了跟进@Hans Passant 的评论,Raymond Chen 的article 关于为什么 Windows 95 将自己称为 3.95 版而不是 4.0 版有一些关于为什么 Windows 中的版本号报告很奇怪的背景。 TL;博士; - 人们编写版本检查错误,因此 API 只报告“错误”版本号,以便新操作系统可以运行旧软件。
-
清单没有声明子系统版本。它可能有
<supportedOS>元素,但它只在 Win10 的预览版中有效,它再次被 RTM 删除。
标签: c++ windows winapi visual-c++