如何在c#中获得真正的操作系统版本?

从.NET 4和Windows 8或更高版本的平台开始,获取运行程序的OS版本是非常不确定的。

例如,在Windows 10中运行,如果我的项目有Windows 8 DLL,那么Environment.OSVersion.Version将返回6.2.9200.0 ,即Windows 8而不是Windows 10。

在这个问题( crono的回答)中解释了这种行为: c#中的Windows版本

所以我的问题如下:我们如何能够确定(并以.NET方式保留,以便能够在非Windows平台上使用它)运行我们的应用程序的操作系统版本?

链接到MSDN:

https://msdn.microsoft.com/en-us/library/system.environment.osversion(v=vs.110).aspx

如果使用其他平台而不是Windows,则可以使用Win32_OperatingSystem WMI类。

Win32_OperatingSystem表示安装在计算机上的基于Windows的操作系统

 //using System.Linq; //using System.Management; 
 var query = "SELECT * FROM Win32_OperatingSystem"; var searcher = new ManagementObjectSearcher(query); var info = searcher.Get().Cast().FirstOrDefault(); var caption = info.Properties["Caption"].Value.ToString(); var version = info.Properties["Version"].Value.ToString(); var spMajorVersion = info.Properties["ServicePackMajorVersion"].Value.ToString(); var spMinorVersion = info.Properties["ServicePackMinorVersion"].Value.ToString(); 

请记住添加对System.Management.dll的引用。

注意:

  • 如果要将Windows API函数用于此目的,请注意在Windows 8.1之后, GetVersionEx可能会被更改或不可用于发布。 而是使用版本助手function 。
  • 从Windows 8开始, Environment.OSVersion属性返回所有Windows平台的相同主要版本号和次要版本号。 因此,我们不建议您检索此属性的值以确定操作系统版本。
  • 您可能想看看Mono FAQ – 如何检测执行平台?