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())
);
}
}
}
}
答案 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;
}