3

これはGet OS-Version in WinRT Metro App C#に関する質問ですが、その重複ではありません。

システムで利用可能なデスクトップ機能があるかどうかを Metro アプリケーションから検出するオプションはありますか? OS バージョンの検出がサポートされていないことは理解していますが、それで問題ありません。

ただし、メトロ アプリは、それが実行されているシステムで利用可能なデスクトップがあるかどうかを知る必要があります。

デスクトップとは、拡張可能なデスクトップ、つまりサードパーティのデスクトップ アプリケーションをインストールできるデスクトップを意味します。私たちが知っているように、ARMベースのユニットにもデスクトップがありますが、Microsoftの組み込みプログラムのみです。

Metro アプリが拡張不可能なデスクトップを備えた ARM ベースのタブレットで実行されているか、拡張可能なデスクトップを備えた他のすべての (Intel ベースの) デバイスで実行されているかを区別できますか?

4

3 に答える 3

3

さらに広範な検索を行った結果、GetNativeSystemInfoメソッドが見つかりました。ヒントはすぐにSOサイトにありました - this question . このアプローチは、Windows ストア アプリケーションで完全にサポートされているようです。pinvoke が使用されているにもかかわらず、App Cert Kit テストはスムーズに実行されました。

私は次のコードで終わった:

    [DllImport("kernel32.dll")]
    internal static extern void GetNativeSystemInfo(ref SystemInfo lpSystemInfo);

    internal static bool IsArmBased()
    {
        var sysInfo = new SystemInfo();
        GetNativeSystemInfo(ref sysInfo);
        return sysInfo.wProcessorArchitecture == ProcessorArchitectureArm; //ushort 5
    }

これは私が探していた解決策のようです。そうでない場合は教えてください。または、そのようなアプローチに関連する問題があれば教えてください。ありがとうございました。

于 2012-09-05T16:19:44.223 に答える
1

これが HTMLの場合window.cpuClass、ARM、x86、または amd64 のいずれであるかを取得するために使用できます。

非動的バージョンでは、AnyCPU ではなくターゲット固有のアーキテクチャを使用し、#ifdefs でフレーバーを使用してビルド時にハード コードします。ただし、ストアに 3 つのパッケージを送信する必要があります。

于 2012-09-05T00:53:17.003 に答える
0

これらのライブラリにアクセスするには、try {} catch(){} を使用します。問題が発生した場合は、ARM バージョンを想定してください。

于 2012-09-04T23:54:06.387 に答える