自 .NET 4 和 Windows 8 或更高平台以来,获取运行程序的操作系统版本非常不确定。
例如,在 Windows 10 中运行,如果我的项目有一个 Windows 8 DLL,则 Environment.OSVersion.Version
返回 6.2.9200.0
,这是 Windows 8 并且不是 Windows 10。
此问题(crono 的回答)中解释了此行为:Windows version in c#
所以我的问题如下:我们如何才能确定(并保持 .NET 方式以便能够在非 Windows 平台上使用它)我们的应用程序运行的操作系统版本?
MSDN 链接:
https://msdn.microsoft.com/en-us/library/system.environment.osversion(v=vs.110).aspx
最佳答案
如果使用 Windows 以外的其他平台不是问题,您可以使用 Win32_OperatingSystem
WMI 类。
Win32_OperatingSystem
represents a Windows-based operating system installed on a computer
//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 函数,请注意
GetVersionEx
Windows 8.1 之后的版本可能会更改或不可用。相反,使用 Version Helper functions . - 从 Windows 8 开始,
Environment.OSVersion
属性为所有 Windows 平台返回相同的主要和次要版本号。因此,我们不建议您通过检索此属性的值来确定操作系统版本。 - 你可能想看看Mono FAQ - How to detect the execution platform?
关于c# - 我怎样才能在 C# 中获得真正的操作系统版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32415679/