2012-09-04 62 views
3

這是關係到Get OS-Version in WinRT Metro App C#但不是它的複製問題。檢測從地鐵應用程序的桌面可用性(ARM檢測,檢測到Windows RT系統)

是否有任何選項可以從Metro應用程序中檢測系統上是否有可用的桌面功能?我明白,不支持檢測操作系統版本,這是可以的。

但是我metro應用需要知道是否有它運行的系統上可用的桌面。

桌面我的意思是可擴展的桌面 - 桌面,其中可以安裝第三方桌面應用程序。正如我們所知,基於ARM的單位也將擁有桌面,但僅限於微軟內置程序。

我能區分我的Metro應用是否在基於ARM的平板電腦上運行非擴展桌面VS上的所有其他(基於Intel)與擴展的桌面設備?

+1

你試圖解決什麼場景?爲什麼商店應用需要了解桌面? –

回答

0

使用try {}趕上(){}來訪問這些庫,如果有什麼不順心假設ARM版本。

+1

具體哪些庫,Rob? –

1

如果這是HTML,您可以使用window.cpuClass得到,如果它是ARM,x86或AMD64。

非動態版本是使用目標特定的架構,而不是AnyCPU,然後用的#ifdefs在構建時硬編碼使用的口味。但是,您必須向商店提交3個包裹。

+0

不幸的是,它是XAML + C# –

+0

哦,好吧,關於3個軟件包的想法是一個解決方案。然而,3種不同包裝的缺點是什麼?更多的維護,可能會讓最終用戶感到困惑,並且...? –

+1

最終用戶不會感到困惑。他們只是從商店安裝應用程序,一切都是沒有意義的 - 他們不知道他們得到了哪個軟件包。對於你來說,你有3個軟件包可以上傳,並且根據你的測試理念,可以測試3個軟件包。 –

3

經過一些更廣泛的搜索,我發現GetNativeSystemInfo方法。該提示立即在SO網站 - 這question。這種方法似乎完全得到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 
    } 

這似乎是一個解決方案,我一直在尋找。請告訴我,如果沒有,或者讓我意識到與這種方法有關的任何問題。謝謝。

+0

如果從現在開始的幾個版本中,微軟決定發佈Windows RT for x86處理器的版本(注意:這是純粹的猜測 - 我不知道這是否在計劃中),你的應用會發生什麼?如果您使用的操作系統允許任意桌面應用程序,那麼使用處理器架構似乎是一個糟糕的方法。 –

+0

我會簡單地發佈新版本;)但同意它肯定不是最佳解決方案。但是,如果背後的哲學說:不要搜索硬件,平臺,操作系統,但搜索功能,然後我希望在未來的版本之一,將有一個簡單的API調用來找出桌面功能... –

+0

爲什麼? Jeff Brand在上面提出了這個問題:如果你知道你在運行任意桌面應用程序的計算機上運行,​​你會做什麼不同? –