尽管清单设置正确,但Environment.OSVersion有时会报告Windows 8 for 8.1

时间:2014-12-01 12:28:27

标签: c# windows .net-4.5

由于Environment.OSVersion可能lie关于Win 8或8.1是否正在运行,我们在manifest中明确声明我们在应用程序中定位Windows 8.1。

但是,Environment.OSVersion.Minor在返回版本时似乎不可靠。我们将它包装在我们的一个库中,但是在我们的一些开发机器上,它返回" 2" (Windows 8),在其他" 3" (Windows 8.1)。没有应用任何特定的兼容性设置(据我们所知),但我们似乎无法跟踪问题。

是否有其他选项可以通过.Net获取Windows版本,而不使用MSDN中提到的Win32 API函数?

2 个答案:

答案 0 :(得分:1)

好吧,我用WMI做了这个,因为@ mike-z建议:

SelectQuery query = new SelectQuery(@"Select * from Win32_OperatingSystem");
string wmiVersion = String.Empty;

using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(query))
{                    
  foreach (var process in searcher.Get())
  {
     wmiVersion = process["Version"].ToString().Substring(0, 3);
  }
}  

switch (wmiVersion)
{
 case "6.3": return "Windows 8.1";
 // ...
}

答案 1 :(得分:0)

免责声明:这意味着“当其他一切都失败时......”某种答案

您可以解析VER的输出,看看它是否准确。

在我的盒子上(8.1 Pro)我看到了这个

  

C:>版本

     

Microsoft Windows [版本6.3.9600]

     

C:>