从Metro应用程序检测桌面可用性(检测ARM,检测Windows RT系统)

时间:2012-09-04 22:48:26

标签: windows-8 arm microsoft-metro windows-runtime desktop

这是一个与Get OS-Version in WinRT Metro App C#相关但不重复的问题。

是否有任何选项可以从Metro应用程序中检测系统上是否有可用的桌面功能?我知道不支持检测操作系统版本,这是可以的。

但是我的metro应用程序需要知道它正在运行的系统上是否有可用的桌面。

By Desktop我指的是可扩展的桌面 - 桌面,可以安装第三方桌面应用程序。我们知道基于ARM的单元也将具有桌面,但仅限于Microsoft内置程序。

我是否可以区分我的Metro应用程序是否在基于ARM的平板电脑上运行,该平板电脑具有不可扩展的桌面,而在具有可扩展桌面的所有其他(基于英特尔)设备上运行?

3 个答案:

答案 0 :(得分:3)

经过一些更广泛的搜索后,我找到了GetNativeSystemInfo方法。提示立即在SO网站上 - 这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
    }

这似乎是我正在寻找的解决方案。如果没有,请告诉我,或让我知道与这种方法有关的任何问题。谢谢。

答案 1 :(得分:1)

如果这是HTML,您可以使用window.cpuClass来获取它是ARM,x86还是amd64。

非动态版本是使用特定于目标的体系结构而不是AnyCPU,然后使用#ifdefs的flavor来在构建时对其进行硬编码。但是,您必须向商店提交3个包裹。

答案 2 :(得分:0)

使用try {} catch(){}访问这些库,如果出现任何问题,请假设ARM版本。