从.NET 4和Windows 8或更高版本的平台开始,获取运行程序的操作系统版本是非常不确定的.
例如,在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
Rez*_*aei 10
如果使用其他平台而不是Windows,则可以使用Win32_OperatingSystemWMI类.
Win32_OperatingSystem表示安装在计算机上的基于Windows的操作系统
//using System.Linq;
//using System.Management;
Run Code Online (Sandbox Code Playgroud)
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();
Run Code Online (Sandbox Code Playgroud)
请记住添加引用System.Management.dll.
注意:
GetVersionEx 在Windows 8.1之后可能更改或不可用于发行版.而是使用版本助手功能.Environment.OSVersion属性为所有Windows平台返回相同的主要版本号和次要版本号.因此,我们不建议您检索此属性的值以确定操作系统版本.