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



这是一个与WinRT Metro App C#中获取操作系统版本有关的问题,但不是它的重复问题。

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

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

我所说的桌面是指可扩展的桌面,其中可以安装第三方桌面应用程序。正如我们所知,基于ARM的设备也将拥有桌面,但只有微软内置的程序。

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

经过更广泛的搜索,我找到了GetNativeSystemInfo方法。这个提示马上就出现在SO网站上——这个问题。这种方法似乎得到了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
    }

这似乎是我一直在寻找的解决方案。如果没有,请告诉我,或者让我意识到与这种方法有关的任何问题。非常感谢。

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

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

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

最新更新