我可以依赖OSVERSIONINFO.szCSDVersion或Environment.OSVersion.ServicePack来始终采用"Service Pack X"的形式吗?

Hei*_*nzi 1 .net c# winapi servicepacks operating-system

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

在我所有的测试,这串竟然是形式""(无服务包),或者"Service Pack X",与X作为一个数字.所以解析它的算法应该非常简单.

我的问题:我可以依赖这个字符串来始终拥有这种格式吗?

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

And*_*ers 5

不,你不能,有些版本使用翻译的字符串!如果您查看该链接中图像中的字符串,您会看到只使用字符串中找到的第一个数字就可以逃脱.

OSVERSIONINFOEX是在NT4 SP6中添加的,如果你调用GetVersionEx,你只需要处理Win9x和<NT4 SP6上的字符串,并在其他系统上使用OSVERSIONINFOEX.wServicePackMajor.