【问题标题】:How to check that the OS is at least Windows XP SP3? [duplicate]如何检查操作系统是否至少为 Windows XP SP3? [复制]
【发布时间】:2012-12-03 10:07:30
【问题描述】:

可能重复:
How do I determine if a computer is running XP Service pack 3

有大量的 C++ 代码说明了如何检查操作系统是 Windows XP,但我需要知道它是否至少是 Windows XP SP3。有什么办法吗?

【问题讨论】:

  • 重复?是的,但看在上帝的份上,不要像某些答案建议的那样使用注册表。
  • 再一次,正如我在szCSDVersion 下面发布的那样,它提供了一个字符串版本的 Service Pack,可以用于显示目的,但没有明确指示如何确定它是否真的是 SP3。跨度>
  • 所以,你这样做的方式是调用GetVersionEx传递OSVERSIONINFOEX。然后查看dwMajorVersiondwMinorVersion。如果它> 5.1,你很好。它 == 5.1,那么您使用的是 XP 并且必须检查 SP。查看wServicePackMajor并与3进行比较。
  • 在测试 SP3 时,您还需要考虑 server 2003。即 5.2 版。但服务器 2003 的早期版本早于 XP SP3。这就是为什么您应该测试功能是否可用而不是进行版本检查的原因之一。
  • 我会测试您需要的特定功能。是什么推动了对 SP3 而不是 SP2 的需求?测试它是什么。

标签: c++ windows winapi version windows-xp-sp3


【解决方案1】:

这个页面应该有帮助:

Getting the System Version (Windows)

【讨论】:

  • 很抱歉,但这并没有什么帮助。我显然是先从 Google 搜索到的那个页面,但它没有包含对 Windows XP SP3 的引用。还是我错过了什么?它只有szCSDVersion 参数,它是一个字符串!我应该以某种方式解析它吗?
  • 这个函数返回操作系统和服务包!你只需要检查输出字符串。
  • 这是正确的做法。 OSVERSIONINFOEX 结构中包含服务包信息。这个例子不是最好的指出它,但是看看wServicePackMajorwServicePackMinor 字段。
  • 好吧,字符串将完全是“Service Pack 3”,但是你是对的,字符串比较不是最可靠的方法。检查 OSVVERSIONINFO structure 的成员。对于 XP SP3,主要版本为 5,次要版本为 1,内部版本为 2600。
  • @Christian.K 不,不要检查构建。 Major.Minor == 5.1 标识 XP。
猜你喜欢
  • 1970-01-01
  • 2016-03-22
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 2013-08-13
  • 2011-02-13
  • 2010-09-16
相关资源
最近更新 更多