1

标题基本上说明了一切。我需要确定 Windows Service Pack 编号(以数字形式),并且Environment.OSVersion.ServicePack(基本上只返回OSVERSIONINFO.szCSDVersion)只返回一个字符串。

在我所有的测试中,这个字符串的形式是""(无服务包)或"Service Pack X"X是一个数字。所以解析这个的算法应该很简单。

我的问题:我可以依靠这个字符串来始终使用这种格式吗?

(我的一部分说不,因为它没有记录。另一部分说是,因为如果 MS 决定返回,例如"SP 2 (x86)"Windows 7 SP2,很多现有代码肯定会中断。​​因此,他们不会这样做. 有没有人有更多的信息?)

4

2 回答 2

5

不,你不能,有些版本使用翻译的字符串!如果您查看该链接中图像中的字符串,您会发现您可能只需使用在字符串中找到的第一个数字即可。

OSVERSIONINFOEX是在NT4 SP6中加入的,调用GetVersionEx只需要在Win9x和<NT4 SP6上处理字符串,在其他系统上使用OSVERSIONINFOEX.wServicePackMajor即可。

于 2011-10-17T16:42:30.210 回答
-1

你应该BuildLabEx改用。它具有自 Windows 早期版本以来一直保持的指定格式。不确定您是否可以在 WMI 中找到它(您应该可以),但它在注册表中:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\BuildLabEx

例子:

7601.17640.amd64fre.win7sp1_gdr.110632-1508

如果它让您感觉更舒服,您最初可以依靠匹配某个正则表达式来简单起见,如果不匹配则CSDVersion回退。BuildLabEx

于 2011-10-17T16:41:25.647 回答