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.

解决方案 »

  1.   

    打开注册表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows 2000
    如果下面有子项,你如果装sp2或sp3就会显示出来
      

  2.   

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion]
    "CSDVersion"="Service Pack 4"
      

  3.   

    to  wangj2001(乡村酒吧) 
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Updates\Windows 2000
    发现为sp2 sp5可sp5都没出来,我也就打过
    sp4,却找不到
      

  4.   

    我用WMI来可以取得。不过不是简称,是全称。
      

  5.   

    to  reformer(yifan)
    能把代码贴出来吗
      

  6.   

    我所知道的是两种方法,一种是P/Invoke下调用Win32API:BOOL GetVersionEx(  LPOSVERSIONINFO lpVersionInfo );lpVersionInfo结构
    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,从没听说过
      

  7.   

    哦,不小心又找到了WMI的实现方法SelectQuery query = new SelectQuery("Win32_OperatingSystem");
    ManagementObjectSearcher searcher = new ManagementObjectSearcher( query);
    foreach (ManagementObject mo in searcher.Get())
    Console.WriteLine("OS Version: {0} - SP {1} ",
    mo["Version"].ToString(),mo["ServicePackMajorVersion"].ToString()) ;
    }
      

  8.   

    在注册表里
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
    CSDVersion == "Service Pack 4"
    则说明已经升级到SP4