【发布时间】:2013-01-31 03:33:14
【问题描述】:
是否有可能在运行时询问 Windows Store 应用程序(为 ARM 和 x86/64 编译)当前是否在 ARM 设备上执行,或者更具体地在 Microsoft Surface 平板电脑上从 c# 中执行,或者是否有必要编译同一应用的两个版本在不同平台上表现不同?
【问题讨论】:
-
你为什么希望它表现得不同 - 这正是微软不提供检测我怀疑的方法的原因!
是否有可能在运行时询问 Windows Store 应用程序(为 ARM 和 x86/64 编译)当前是否在 ARM 设备上执行,或者更具体地在 Microsoft Surface 平板电脑上从 c# 中执行,或者是否有必要编译同一应用的两个版本在不同平台上表现不同?
【问题讨论】:
这可以通过以下代码完成(根据SO post):-
[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
}
这确实通过了 WACK 测试,测试我不会指望它永远存在。认真思考为什么需要这些信息(仅仅是为了统计数据,还是为了改变应用程序的行为,如果需要,为什么!?)
【讨论】:
using Windows.ApplicationModel;
Package package = Package.Current;
PackageId packageId = package.Id;
String arch = String.Format("{0}", packageId.Architecture);
这将返回“X86”或“ARM”,具体取决于底层硬件。
【讨论】: