System.Environment.OSVersion 似乎没有指示安装了 Windows 2003 的哪个版本(Standard、Enterprise、DataCenter)。

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

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

更新

使用 WMI 看起来是可行的方法,尽管 Win32_OperatingSystem 的 OSProductSuite 属性看起来比 Name 属性更可靠。这是示例代码:

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())
                    );
            }
        }
    }
}
有帮助吗?

解决方案

您可以执行以下 WMI 查询:

从 Win32_OperatingSystem 选择名称

它返回类似这样的内容:

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

本文 解释如何使用 .NET 执行 WMI 查询。

其他提示

我不知道有什么方法可以仅使用托管代码来执行此操作。

有一些代码 这里 使用 获取版本Ex 不过,这应该可以很好地为您封装一些东西。

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

    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;
    }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top