题
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 查询。
其他提示
我只是想为需要的人添加一小段代码。
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;
}
不隶属于 StackOverflow