【问题标题】:Under what legitimate circumstances might GetVersionEx produce dwMajorVersion == 7 when running under Windows XP?在 Windows XP 下运行时,GetVersionEx 在什么合法情况下会产生 dwMajorVersion == 7?
【发布时间】:2010-03-05 01:49:05
【问题描述】:

当 GetVersionEx 在 Windows XP 上成功返回时,它生成的结构的 dwMajorVersion 字段的值应该是 5。在什么合法的情况下——在 Windows XP 下运行——它的值可能是 7?

【问题讨论】:

  • 在windows 7的XP模式下运行?
  • @tommieb75:Windows 7 实际上是 Windows 6.1 版,所以 dwMajorVersion = 6。我不知道在兼容模式下运行时 GetVersionEx 的行为是什么。
  • @James:有趣...从不知道...似乎 MS 的版本在那里不同步...:P
  • “如果兼容模式生效,GetVersionEx 函数会报告操作系统,因为它标识自己,它可能不是安装的操作系统” (msdn.microsoft.com/en-us/library/ms724451%28VS.85%29.aspx)。因此,在 Windows 7 中的 XP 模式下运行,我希望 GetVersionEx 返回 5 的主要版本。
  • 一个简单的解释是 GetVersionEx() 返回 FALSE。你检查了吗?

标签: winapi version


【解决方案1】:

不是在合法的情况下。

但是:来自 Microsoft 的 Appverifier 经常更改您测试的应用程序的这些字段,以确保您的应用程序在未来版本的 Windows 上正确运行。

【讨论】:

  • 我确实安装了 AppVerifier,并且它被配置为接触有问题的进程,所以我敢打赌这就是问题所在。有可能我们应该检查特定功能而不是调用 GetVersionEx(这是 Microsoft 想要的,我猜为什么 AppVerifier 会与 GetVersionEx 发生冲突),但我还不清楚在手头的情况下是否可以这样做。
  • 是的。 AppVerifier 就是这样。我关闭了 HighVersionLie,GetVersionEx 又开始变得有意义了。你摇滚。
  • AppVerifier 与 GetVersionEx 混淆的原因是为了防止应用程序检查操作系统版本错误。很多应用程序都犯了这个错误,然后只能在例如XP 但拒绝在 Vista 上完成这项工作。
  • 对。一旦我知道要寻找什么,我就在网络上的一百个地方看到了这一点。具有讽刺意味的是,微软正试图阻止人们虚假地拒绝在新系统上运行,但这会阻止我们的代码在旧系统上做正确的事情。我们不是在寻找新功能,而是在不同系统上寻找不同的功能。在 XP 上,存在一组功能,在 Vista 上,存在另一组功能,而在 Windows 7 上,不存在类似的功能。 (这听起来像是一个琐事谜题吗?欢迎来到我的世界。)我提交了一个关于无法启用 HighVersionLie 的错误。
猜你喜欢
  • 2011-02-06
  • 1970-01-01
  • 2019-03-26
  • 2016-05-19
  • 1970-01-01
  • 2017-03-25
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多