web-dev-qa-db-ja.com

WinRT Metro App C#でOSバージョンを取得する

C#とVisual Studio11ベータ版を使用してMetroStyleアプリをプログラミングしています。ここで、OSのOSバージョンを取得したいと思います。どうすればこれを入手できますか?

「通常の」アプリケーションでそれを行う方法を見つけました。そこで、属性OSVersionを持つEnvironment-Classを取得しますが、.NETCoreにはこの属性はありません

27
SwissPrime

新しいアプリケーションの場合は、OSのバージョンではなく、特定の機能を確認する必要があります。

私の知る限り、メトロアプリケーションはwin 8でのみ利用可能であるため、OSのバージョンを確認する理由はありません。

編集:ストアアプリケーションは現在、複数のWindowsバージョンで利用できますが、OSバージョンではなく機能をテストすることをお勧めします。プロジェクトの作成時に、OSの最小バージョンがプロジェクトのビルドターゲットとして設定されます。

編集#2:アプリケーションのインストールベースでOSバージョンを追跡することに興味がある場合は、Windows8.1を対象とするアプリケーションから始めてApplicationInsightsをプロジェクトに統合できます。 。使い始める方法は次のとおりです。

http://Azure.Microsoft.com/en-us/documentation/articles/app-insights-windows-get-started/

6
linkerro

デバイスAPIを使用して低レベルのシステムコンポーネントのドライバーバージョン番号を取得することにより、正しくない可能性があるというリスクを伴うOSバージョン番号を取得できます。

受け入れられた答えは、機能をバージョン番号に結び付けるべきではないという点で正しいですが、分析など、それを使用する正当な理由があります-多くのユーザーがすでに新しいバージョンを使用していることを知っておくと便利です。それを利用するためにアプリのアップデートを検討しています。

https://github.com/AttackPattern/CSharpAnalytics/blob/master/Source/CSharpAnalytics/SystemInfo/WindowsStoreSystemInfo.cs より多くの情報とサンプルコードがあります(開示、私はそのコードを書きました)

注:コードが更新され、カスタム/複数のHALなどを処理するようになりました。

11
DamienG

実際、ユーザーエージェントフォーム(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;
    }
5

他の投稿者の回答に基づくと、OSのバージョンをテストするためのAPIはありませんが、特定のタイプのバージョンを照会するためのAPIはあります。つまり、現在のコードではWindowsの将来のリリースのバージョンを判別できない可能性がありますが、コードを更新し続けると、特定のタイプが使用可能かどうかに基づいてOSバージョンを判別できます。今のところ、現在のバージョンのWindows8を使用していると想定します。

また、試したことはありませんが、JavaScriptとの相互運用を行い、「navigator.appVersion」を解析することで取得できる可能性があります。

0
Filip Skakun