如何使用.net确定已安装的Windows Edition

时间:2009-10-28 11:37:31

标签: .net version

System.Environment.OSVersion似乎不表示安装了哪个版本的Windows 2003(标准版,企业版,数据中心版)。

有没有办法只使用托管代码访问此信息?

我知道我可以使用P / Invoke调用GetVersionEx并检查OSVERSIONINFOEX.wSuiteMask来获取此信息,但我正在寻找一个更简单的解决方案。

更新

尽管Win32_OperatingSystem的OSProductSuite属性看起来比Name属性更可靠,​​但使用WMI看起来还是要走的路。这是示例代码:

ManagementScope scope = new ManagementScope();
ObjectQuery query = new ObjectQuery("SELECT name, csdversion, description, OperatingSystemSKU, OSProductSuite FROM Win32_OperatingSystem");

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query))
{
    using (ManagementObjectCollection resultCollection = searcher.Get())
    {
        foreach (ManagementObject result in resultCollection)
        {
            foreach (PropertyData propertyData in result.Properties)
            {
                Debug.WriteLine(
                    propertyData.Name + ": " +
                    ((propertyData.Value == null) ? "" : propertyData.Value.ToString())
                    );
            }
        }
    }
}

3 个答案:

答案 0 :(得分:4)

您可以执行以下WMI查询:

SELECT name FROM Win32_OperatingSystem

它返回如下内容:

Microsoft Windows Server 2003标准版| C:\ WINDOWS | \ Device \ Harddisk0 \ Partition1

This article解释了如何使用.NET执行WMI查询。

答案 1 :(得分:0)

我不知道有任何方法只使用托管代码。

有一些使用here的代码GetVersionEx应该很好地封装了一些东西。

答案 2 :(得分:0)

我只是想为需要它的人添加一小段代码。

    private static string GetOSName()
    {
        string result = string.Empty;
        ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT Caption FROM Win32_OperatingSystem");
        foreach (ManagementObject os in searcher.Get())
        {
            result = os["Caption"].ToString();
            break;
        }
        return result;
    }
相关问题