代码之家  ›  专栏  ›  技术社区  ›  to StackOverflow

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

  •  0
  • to StackOverflow  · 技术社区  · 15 年前

    System.Environment.OSVersion似乎没有指明安装了哪个版本的Windows 2003(标准版、企业版、数据中心版)。

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

    我知道我可以使用P/Invoke调用GetVersionEx并检查osVersionInfo.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 回复  |  直到 15 年前
        1
  •  4
  •   user128300 user128300    15 年前

    您可以执行以下WMI查询:

    从Win32_OperatingSystem中选择名称

    它返回如下内容:

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

    This article 说明如何使用.NET执行WMI查询。

        2
  •  0
  •   Cocowalla    15 年前

    我不知道有什么方法可以只使用托管代码来实现这一点。

    here 使用 GetVersionEx 不过,这应该能很好地为您封装一些东西。

        3
  •  0
  •   Garrett    10 年前

        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;
        }