2015-09-05 168 views
4

由于.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

+0

我会张贴关于[体现您的应用程序]的答案(https://msdn.microsoft.com/en-us/library/windows/desktop /dn481241%28v=vs.85%29.aspx),这样'Environment.OSVersion.Version'就能返回正确的值(我最近必须这样做才能让我的软件检测Windows 10),但如果您使用的是非Windows平台,我不确定它会对您有所帮助。我做了一些搜索,看来Mono似乎在听'app.manifest'文件时遇到问题。 –

+0

这就是我发现的问题。但是,如果有一个Windows 10.1或甚至11个程序,为了让他的应用程序正确检测到该版本,该程序需要重新编译该程序。而且,考虑到应用的生命周期,仅仅因为OsVersion返回每个清单允许的最后一个版本,在以前的版本中考虑在这种Windows中运行旧版应用可能是错误的。不知道我是否清楚...微软的这个决定是相当令人不安的...... –

回答

7

如果使用其他平台比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的操作系统 。

注:

+0

非常有趣......但是:有没有一种方法不依赖于Windows特定的技术? –

+0

看看这个单声道常见问题解答:[如何检测执行平台?](http://www.mono-project。com/docs/faq/technical /#how-to-detect-the-execution-platform) –

+0

谢谢:您的解决方案和此页面之间的混合是我一直在寻找的。 –

相关问题