如何区分服务器版本和Windows客户端版本?

时间:2011-06-16 07:16:56

标签: c# .net-2.0

如何区分服务器版本和Windows客户端版本? 示例:XP,Vista,7与Win2003,Win2008。

UPD:需要一个方法,如

bool IsServerVersion()
{
    return ...;
}

3 个答案:

答案 0 :(得分:6)

好的,Alex,看起来你可以使用WMI找到它:

using System.Management;

public bool IsServerVersion()
{
    var productType = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem")
            .Get().OfType<ManagementObject>()
            .Select(o => (uint)o.GetPropertyValue("ProductType")).First();

    // ProductType will be one of:
    // 1: Workstation
    // 2: Domain Controller
    // 3: Server

    return productType != 1;
}

您需要在项目中引用System.Management程序集。

或者没有任何LINQ类型功能的.NET 2.0版本:

public bool IsServerVersion()
{
    using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem"))
    {
        foreach (ManagementObject managementObject in searcher.Get())
        {
            // ProductType will be one of:
            // 1: Workstation
            // 2: Domain Controller
            // 3: Server
            uint productType = (uint)managementObject.GetPropertyValue("ProductType");
            return productType != 1;
        }
    }

    return false;
}

答案 1 :(得分:1)

服务器Windows版本没有特殊标志,您需要检查版本ID。看看文章中的表格: http://www.codeguru.com/cpp/w-p/system/systeminformation/article.php/c8973

答案 2 :(得分:1)

您可以通过检查注册表中的ProductType来执行此操作,如果它是ServerNT,如果它是WinNT,则它位于Windows服务器系统上。

    using Microsoft.Win32;
    String strOSProductType = Registry.GetValue("HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\ProductOptions", 
                                                "ProductType", 
                                                "Key doesn't Exist" ).ToString() ;
    if( strOSProductType == "ServerNT" )
    {
        //Windows Server
    }
    else if( strOsProductType == "WinNT" )
    {
        //Windows Workstation
    }