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

本文关键字:操作系统 版本 | 更新日期: 2023-09-27 18:11:16

从。net 4和Windows 8或更高的平台开始,获得运行程序的操作系统版本是相当不确定的。

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

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

所以我的问题是:我们如何才能确定地检测(并保持在。net的方式,以便能够在非windows平台上使用它)我们的应用程序运行的操作系统版本?

链接到MSDN:

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

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

如果不担心使用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<ManagementObject>().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 Functions来实现此目的,请注意GetVersionEx可能在Windows 8.1之后的版本中被更改或不可用。相反,使用Version Helper函数。
  • 从Windows 8开始,Environment.OSVersion属性返回所有Windows平台相同的主版本号和次版本号。因此,我们不建议您检索此属性的值来确定操作系统版本。
  • 你可能想看看Mono FAQ -如何检测执行平台?