如何在c#中获得真正的操作系统版本?
由于.NET 4和Windows 8或更高版本的平台很难确定运行程序的操作系统版本。如何在c#中获得真正的操作系统版本?
例如,在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
代表安装在计算机
//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的操作系统 。
注:
- 如果您想使用Windows API函数用于这一目的时,Windows 8.1之后要注意的是
GetVersionEx
可以改变或不可用的版本。相反,请使用Version Helper functions。 - 从Windows 8开始,
Environment.OSVersion
属性将为所有Windows平台返回相同的主版本号和次版本号。因此,我们不建议您检索此属性的值以确定操作系统版本。 - 你可能想看看Mono FAQ - How to detect the execution platform?
非常有趣......但是:有没有一种方法不依赖于Windows特定的技术? –
看看这个单声道常见问题解答:[如何检测执行平台?](http://www.mono-project。com/docs/faq/technical /#how-to-detect-the-execution-platform) –
谢谢:您的解决方案和此页面之间的混合是我一直在寻找的。 –
我会张贴关于[体现您的应用程序]的答案(https://msdn.microsoft.com/en-us/library/windows/desktop /dn481241%28v=vs.85%29.aspx),这样'Environment.OSVersion.Version'就能返回正确的值(我最近必须这样做才能让我的软件检测Windows 10),但如果您使用的是非Windows平台,我不确定它会对您有所帮助。我做了一些搜索,看来Mono似乎在听'app.manifest'文件时遇到问题。 –
这就是我发现的问题。但是,如果有一个Windows 10.1或甚至11个程序,为了让他的应用程序正确检测到该版本,该程序需要重新编译该程序。而且,考虑到应用的生命周期,仅仅因为OsVersion返回每个清单允许的最后一个版本,在以前的版本中考虑在这种Windows中运行旧版应用可能是错误的。不知道我是否清楚...微软的这个决定是相当令人不安的...... –