[英]Get OS-Version in WinRT Metro App C#
我正在使用C#和Visual Studio 11 Beta編寫Metro風格應用程序。 現在我想獲得操作系統的操作系統版本。 我怎么能得到這個?
我發現了如何在“普通”應用程序中執行此操作。 在那里你使用OSVersion屬性的Environment-Class,但在.NET Core中沒有這個屬性
通過使用設備API獲取低級系統組件的驅動程序版本號,可以獲得操作系統版本號,但存在一些可能不正確的風險。
接受的答案是正確的,因為您不應該將功能與版本號綁定,但是有充分的理由使用它,例如分析 - 知道很多用戶已經使用新版本並且您應該是考慮應用程序更新以利用它。
https://github.com/AttackPattern/CSharpAnalytics/blob/master/Source/CSharpAnalytics/SystemInfo/WindowsStoreSystemInfo.cs有更多信息和示例代碼(披露,我寫了那段代碼)
注意:代碼已更新,現在處理自定義/多個HAL等。
對於新應用程序,您應檢查特定功能,而不是操作系統版本。
據我所知,沒有理由檢查操作系統版本,因為metro應用程序僅適用於win 8。
編輯:存儲應用程序現在可在多個Windows版本上使用,但仍建議測試功能而不是OS版本。 在創建項目時,將最低操作系統版本設置為項目的構建目標。
編輯#2:如果您對在應用程序的安裝基礎中跟蹤OS版本感興趣,可以從針對Windows 8.1的應用程序開始將Application Insights集成到您的項目中。 以下是開始使用它的方法:
http://azure.microsoft.com/en-us/documentation/articles/app-insights-windows-get-started/
事實上,有一個簡單的解決方法是在其用戶代理表單(Windows NT 6.x)中獲取Windows版本字符串。
讓人們想知道我們為什么要這樣做:收集有關我們用戶Windows版本的統計信息,並做出有關向后兼容性的明智決策。
public class OsVersion
{
public static Task<string> GetAsync()
{
var t = new TaskCompletionSource<string>();
var w = new WebView();
w.AllowedScriptNotifyUris = WebView.AnyScriptNotifyUri;
w.NavigateToString("<html />");
NotifyEventHandler h = null;
h = (s, e) =>
{
try
{
var match = Regex.Match(e.Value, @"Windows\s+NT\s+\d+(\.\d+)?");
if (match.Success)
t.SetResult(match.Value);
else
t.SetResult("Unknowm");
}
catch (Exception ex) { t.SetException(ex); }
finally { /* release */ w.ScriptNotify -= h; }
};
w.ScriptNotify += h;
w.InvokeScript("execScript", new[] { "window.external.notify(navigator.appVersion); " });
return t.Task;
}
根據其他海報的答案 - 沒有用於測試操作系統版本的API,但會有API來查詢特定類型的版本。 這意味着您可能無法使用當前代碼告知Windows未來版本的版本,但如果您不斷更新代碼 - 您可以根據特定類型是否可用來確定操作系統版本。 現在您將假設使用當前版本的Windows 8。
此外,我還沒有嘗試過,但你可以通過與JavaScript互操作並解析“navigator.appVersion”來獲得它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.