2013-01-09 66 views
1

是否有可能在運行時詢問當前在ARM設備上執行了Windows應用商店應用(針對ARM和x86/64進行編譯),還是在Microsoft Surface平板上執行了更具體的應用在C#或是否有必要編譯相同的應用程序的兩個版本,以不同的plattforms行爲不同?檢測Windows應用商店的平臺

+0

爲什麼你會希望它的行爲不同 - 這正是微軟不提供檢測我懷疑的方法的原因! –

回答

3

這可以通過下面的代碼(本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測試,測試我不會認爲很撒手人寰計數。想想很辛苦,爲什麼需要這些信息(它只是用於統計,或者是你改變你的應用程序的行爲,如果是的話,爲什麼!?)

+0

+1謝謝,我會盡力的。 – HCL

+0

將DLLImport調用到WIn32調用在ARM設備上工作嗎? –

1
using Windows.ApplicationModel; 

Package package = Package.Current; 
PackageId packageId = package.Id; 

String arch = String.Format("{0}", packageId.Architecture); 

這將返回「X86」或「ARM」,取決於底層硬件。

+0

你確定這可以工作嗎?我目前無法測試它,但是我懷疑PackageId.Architecture將返回「中立」而不是執行過程的架構,因爲只有一個包(請參閱我的文章)。 – HCL

+0

只需再次檢查設置爲「任何CPU」的項目,它就會返回底層架構。 – gdc

+0

+1很酷,謝謝 – HCL