这是一个与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版本。