27

C#とVisualStudio11ベータ版を使用してMetroスタイルアプリをプログラミングしています。次に、OSのOSバージョンを取得します。どうすればこれを入手できますか?

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

4

4 に答える 4

11

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

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

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

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

于 2013-04-03T16:03:03.797 に答える
6

新しいアプリケーションの場合は、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/

于 2012-04-12T14:19:57.107 に答える
5

実際、ユーザーエージェントフォーム(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;
    }
于 2013-09-19T11:38:59.533 に答える
0

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

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

于 2012-04-12T22:40:47.613 に答える