2015-09-05 118 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

謝謝:您的解決方案和此頁面之間的混合是我一直在尋找的。 –

相關問題