GetVersionEx
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getversionex.aspOSVERSIONINFOEX.szCSDVersion Pointer to a null-terminated string, such as "Service Pack 3", that indicates the latest Service Pack installed on the system. If no Service Pack has been installed, the string is empty.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/sysinfo/base/getversionex.aspOSVERSIONINFOEX.szCSDVersion Pointer to a null-terminated string, such as "Service Pack 3", that indicates the latest Service Pack installed on the system. If no Service Pack has been installed, the string is empty.
如果下面有子项,你如果装sp2或sp3就会显示出来
"CSDVersion"="Service Pack 4"
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows 2000
发现为sp2 sp5可sp5都没出来,我也就打过
sp4,却找不到
能把代码贴出来吗
typedef struct _OSVERSIONINFOEX {
DWORD dwOSVersionInfoSize;
DWORD dwMajorVersion;
DWORD dwMinorVersion;
DWORD dwBuildNumber;
DWORD dwPlatformId;
TCHAR szCSDVersion[128];
WORD wServicePackMajor;
WORD wServicePackMinor;
WORD wSuiteMask;
BYTE wProductType;
BYTE wReserved;
}
其中
TCHAR szCSDVersion[128];
WORD wServicePackMajor;
WORD wServicePackMinor;
就是标识service package的
给你段我收藏的代码吧
using System;
using System.Reflection;
using System.Runtime.InteropServices;class Class1
{
static void Main(string[] args)
{
Console.WriteLine(GetServicePack());
}
[StructLayout(LayoutKind.Sequential)]
public struct OSVERSIONINFO
{
public int dwOSVersionInfoSize;
public int dwMajorVersion;
public int dwMinorVersion;
public int dwBuildNumber;
public int dwPlatformId;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)]
public string szCSDVersion;
}
[DllImport("kernel32.Dll")] public static extern short GetVersionEx(ref OSVERSIONINFO o);
static public string GetServicePack()
{
OSVERSIONINFO os = new OSVERSIONINFO();
os.dwOSVersionInfoSize=Marshal.SizeOf(typeof(OSVERSIONINFO));
GetVersionEx(ref os);
if (os.szCSDVersion=="")
return "No Service Pack Installed";
else
return os.szCSDVersion;
}
}另一种就是用程序方法读注册表
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
我没试过其实楼上的都提到了。至于wmi,从没听说过
ManagementObjectSearcher searcher = new ManagementObjectSearcher( query);
foreach (ManagementObject mo in searcher.Get())
Console.WriteLine("OS Version: {0} - SP {1} ",
mo["Version"].ToString(),mo["ServicePackMajorVersion"].ToString()) ;
}
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
CSDVersion == "Service Pack 4"
则说明已经升级到SP4