3

这是一个与Get OS-Version in WinRT Metro App C#相关的问题,但不是它的副本。

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

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

桌面是指可扩展桌面 - 桌面,可以安装第 3 方桌面应用程序。正如我们所知,基于 ARM 的单元也将拥有桌面,但仅限于 Microsoft 内置程序。

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

4

3 回答 3

3

经过更广泛的搜索后,我找到了 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
    }

这似乎是我一直在寻找的解决方案。如果不是,请告诉我,或者让我知道与这种方法相关的任何问题。谢谢你。

于 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 回答