【问题标题】:Detecting the platform of a Windows Store App检测 Windows 应用商店应用的平台
【发布时间】:2013-01-31 03:33:14
【问题描述】:

是否有可能在运行时询问 Windows Store 应用程序(为 ARM 和 x86/64 编译)当前是否在 ARM 设备上执行,或者更具体地在 Microsoft Surface 平板电脑上从 c# 中执行,或者是否有必要编译同一应用的两个版本在不同平台上表现不同?

【问题讨论】:

  • 你为什么希望它表现得不同 - 这正是微软不提供检测我怀疑的方法的原因!

标签: windows-8 windows-runtime


【解决方案1】:

这可以通过以下代码完成(根据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 测试,测试我不会指望它永远存在。认真思考为什么需要这些信息(仅仅是为了统计数据,还是为了改变应用程序的行为,如果需要,为什么!?)

【讨论】:

    【解决方案2】:
    using Windows.ApplicationModel;
    
    Package package = Package.Current;
    PackageId packageId = package.Id;
    
    String arch = String.Format("{0}", packageId.Architecture);
    

    这将返回“X86”或“ARM”,具体取决于底层硬件。

    【讨论】:

    • 你确定这行得通吗?我目前无法对其进行测试,但是我怀疑 PackageId.Architecture 将返回“中性”而不是执行过程的体系结构,因为只有一个包(请参阅我的帖子)。
    • 刚刚再次检查了一个设置为“Any CPU”的项目,它确实返回了底层架构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2012-10-07
    相关资源
    最近更新 更多