1

Windows ストア アプリで OS のバージョンを取得する方法がないことはわかっています。詳しく説明させてください。

私のアプリは、C# でプログラミングする Windows ストア アプリです。私のアプリの一部の機能は、別のデスクトップ アプリに依存しています (設計が適切ではない可能性があります)。私が知っているように、サードパーティのデスクトップ アプリは Windows RT にインストールできません。そのため、自分のアプリが Windows RT で実行されているかどうかを知りたいだけで、Windows RT で自分のアプリの一部の機能を禁止しています。GetNativeSystemInfo() は win32 API であるため、使用したくありません。その API を使用すると、アプリはどの CPU にも準拠できなくなります。

4

3 に答える 3

2

うん。方法は次のとおりです。

Task<ProcessorArchitecture> WhatProcessor()
{
    var t = new TaskCompletionSource<ProcessorArchitecture>();
    var w = new WebView();
    w.AllowedScriptNotifyUris = WebView.AnyScriptNotifyUri;
    w.NavigateToString("<html />");
    NotifyEventHandler h = null;
    h = (s, e) =>
    {
        // http://blogs.msdn.com/b/ie/archive/2012/07/12/ie10-user-agent-string-update.aspx
        // IE10 on Windows RT: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0;)
        // 32-bit IE10 on 64-bit Windows: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)
        // 64-bit IE10 on 64-bit Windows: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)
        // 32-bit IE10 on 32-bit Windows: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0) 
        try
        {
            if (e.Value.Contains("ARM;"))
                t.SetResult(Windows.System.ProcessorArchitecture.Arm);
            else if (e.Value.Contains("WOW64;") || e.Value.Contains("Win64;") || e.Value.Contains("x64;"))
                t.SetResult(Windows.System.ProcessorArchitecture.X64);
            else
                t.SetResult(Windows.System.ProcessorArchitecture.X86);
        }
        catch (Exception ex) { t.SetException(ex); }
        finally { /* release */ w.ScriptNotify -= h; }
    };
    w.ScriptNotify += h;
    w.InvokeScript("execScript", new[] { "window.external.notify(navigator.userAgent); " });
    return t.Task;
}

頑張ってください!

于 2013-06-08T04:50:16.143 に答える
0

これが本当に可能かどうかはわかりませんが、「条件付きコンパイル シンボル」で結果を得ることができます。たとえばARM、ARM ビルドのみを追加して、ARM、x86、および x64 の 3 つの個別のパッケージをビルドできます。使い方に関する記事がたくさん見つかります。これは、Visual Studio: Use Conditional Compilation to Control Runtime Settings for Different Deployment Scenariosの 1 つです。

ARMそのため、ARM 構成の特別なシンボル(このスクリーンショットのように のように)用にプロジェクトをセットアップする必要がありますLIVE

ここに画像の説明を入力

この後、C# ディレクティブ: #if、#else、#endifを使用して、ARM ビルド用にコードの一部を非表示にすることができます。

于 2013-06-07T05:02:23.690 に答える
0

アプリの一部の機能は (インストールされているかどうかに関係なく) デスクトップ アプリに依存するため、アプリの x86 バージョンであっても「インストールされていない」状態を処理する必要があります。

私なら、デフォルトでこれらの機能をすべて無効にし、起動するたびにデスクトップ アプリが存在するかどうかを確認します。存在する場合にのみ、追加機能を有効にします。

于 2013-06-07T07:37:48.573 に答える