實驗室 1b:將應用程式新增至您的映像
我們現在將採用像是 IoT 核心版預設 應用程式 () 、封裝應用程式,以及建立可載入到裝置的新 Windows IoT 核心版映射等應用程式。
注意
此程式與背景和前景應用程式相同。 唯一要注意的差別在於,只能選取一個前景應用程式作為啟動應用程式,而所有其他已安裝的 aps 都會以背景應用程式的形式執行。
必要條件/需求
注意
當您完成此製造指南時,ProjectA 會開始類似于 C:\IoT-ADK-AddonKit\Source-arm\Products\SampleA 中的 SampleA 映射。
我們將使用從 實驗室 1a:建立基本映射所建立的 ProjectA 映射。
您也需要下列工具來完成本節:
- Visual Studio
- Windows 評定及部署套件 (Windows ADK)
- Windows IoT 核心套件
- IoT 核心版 ADK Add-Ons
- IoT 核心版 Powershell 環境
- 記事本或 VS Code 之類的文字編輯器
支援的應用程式類型
通用 Windows 平台 (UWP) 應用程式
IoT 核心版是以 UWP 為中心的 OS,UWP 應用程式是其主要應用程式類型。
通用 Windows 平臺 (UWP) 是所有版本Windows 10的常見應用程式平臺,包括Windows 10 IoT 核心版。 UWP 是 WinRT) Windows 執行階段 (演進。 您可以 在這裡找到更多資訊和 UWP 的概觀。
傳統 UWP 應用程式
UWP 應用程式僅適用于 IoT 核心版,就像在其他Windows 10版本一樣。 Visual Studio 中的簡單空白 Xaml 應用程式會正確地部署到 IoT 核心版裝置,就像在手機或Windows 10電腦上一樣。 IoT 核心版完全支援所有標準 UWP 語言和專案範本。
傳統 UWP app-model 有一些新增功能可支援 IoT 案例,而利用它們的任何 UWP app 都需要新增至其資訊清單的對應資訊。 特別是必須將 「iot」 命名空間新增至這些標準 UWP 應用程式的資訊清單。
在資訊清單的 屬性內,您必須定義 iot xmlns,並將它新增至 IgnorableNamespaces 清單。 最終的 xml 看起來應該像這樣:
<Package
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10"
IgnorableNamespaces="uap mp iot">
背景應用程式
除了傳統 UI 應用程式之外,IoT 核心版還新增了稱為「背景應用程式」的新 UWP 應用程式類型。 這些應用程式沒有 UI 元件,而是具有實作 「IBackgroundTask」 介面的類別。 然後,他們會將該類別註冊為 「StartupTask」,以便在系統開機時執行。 由於它們仍是 UWP 應用程式,因此可以存取同一組 API,而且支援來自相同語言。 唯一的差別在於沒有 UI 進入點。
每種 IBackgroundTask 類型都會取得自己的資源原則。 這通常限制在改善這些背景應用程式是前景 UI 應用程式的次要元件之裝置上的電池使用時間和電腦資源。 在 IoT 裝置上,Background Apps 通常是裝置的主要功能,因此這些 StartupTask 會取得資源原則,以鏡像其他裝置上的前景 UI 應用程式。
您可以在 MSDN上找到背景應用程式的深入資訊。
非 UWP (Win32) 應用程式
IoT 核心版支援某些傳統 Win32 應用程式類型,例如 Win32 主控台應用程式和 NT 服務。 這些應用程式建置和執行的方式與 Windows 10 Desktop 相同。 此外,還有 IoT Core C++ 主控台專案範本,可讓您輕鬆地使用 Visual Studio 建置這類應用程式。
這些非 UWP 應用程式有兩個主要限制:
- 不支援舊版 Win32 UI:IoT 核心版不包含 API 來建立傳統 (HWND) Windows。 無法使用舊版方法,例如 CreateWindow () 和 CreateWindowEx () 或任何其他處理 Windows 控制碼的方法, (HWND) 。 之後,IoT 核心版不支援相依于這類 API 的架構,包括 MFC、Windows Forms和 WPF。
- 僅限 C++ 應用程式:目前僅支援 C++ 在 IoT 核心版上開發 Win32 應用程式。
App Service
應用程式服務是為其他 UWP app 提供服務的 UWP app。 這些服務可比擬為裝置上的網頁服務。 應用程式服務在主控 App 中以背景工作方式執行,並且可以將其服務提供給其他 App。 例如,應用程式服務可能會提供其他 App 可以使用的條碼掃描器服務。 應用程式服務可讓您建立 App 可於其所在裝置呼叫的無 UI 服務,而從 Windows 10 版本 1607 開始,則可在遠端裝置上呼叫這些服務。 從 Windows 10 版本 1607 開始,您便可以建立與主控 App 在相同處理程序中執行的應用程式服務。
如需有關建立背景應用程式服務以及從 uwp app (取用服務,以及背景工作/服務) 的其他資訊,請參閱 這裡。
透過服務、延伸模組和套件擴充您的應用程式
Windows 10有許多技術可用來擴充和元件化您的應用程式。 下表應協助您根據需求來判斷應該使用的技術。 接著是案例與技術的簡短描述。
狀況 | 資源套件 | 資產套件 | 選用套件 | 一般套件組合 | 應用程式延伸模組 | App Service | 串流安裝 |
---|---|---|---|---|---|---|---|
協力廠商程式碼外掛程式 | ✔️ | ||||||
同處理序程式碼外掛程式 | ✔️ | ||||||
UX 資產 (字串/影像) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ||
隨選內容 (例如其他層級) |
✔️ | ✔️ | ✔️ | ||||
個別授權和授權取得 | ✔️ | ✔️ | ✔️ | ||||
應用程式內取得 | ✔️ | ✔️ | |||||
最佳化安裝時間 | ✔️ | ✔️ | ✔️ | ✔️ | |||
減少磁碟使用量 | ✔️ | ✔️ | |||||
最佳化封裝 | ✔️ | ✔️ | ✔️ | ||||
減少發佈時間 | ✔️ | ✔️ | ✔️ | ✔️ |
建立 appx 套件
第一個步驟是在 IoT 裝置上執行通用 Windows 平臺 (UWP) 應用程式。 如果您已經建立並測試 UWP 應用程式,則可以略過本節
建立 UWP 應用程式。 這可以是針對 IoT 核心版所設計的任何應用程式,儲存為 Appx 套件。 在我們的範例中,我們使用 IoT 核心版預設 應用程式。
在 Visual Studio 中,將您的應用程式儲存為 Appx 套件。 若要這麼做,請按一下[專案 > 存放區 > 建立應用程式套件>],以建立 [下一步] 側載的套件>
選取 [輸出位置 ] 作為 C:\DefaultApp (或任何其他不包含 spaces 的路徑。)
選取 [產生應用程式套件組合: 永不]
按一下 [建立]。
Visual Studio 會針對您選取的 (Arm、x86、x64) 選取的架構 () 指定位置建立 Appx 檔案。 在我們的範例中,此檔案為:C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test
- 選擇性: 測試應用程式。 請注意,您可能已在建置專案時測試過應用程式。
封裝 Appx
下一個步驟是封裝 Appx 檔案,這可讓您在建置 FFU 映射) 時使用 Windows ADK (加以自訂和建置。
開啟
IoTCorePShell.cmd
。 它應該會提示您以系統管理員身分執行。使用 New-IoTAppxPackage 建立 Appx的套件。 以您的 Appx 套件取代檔案路徑位置和套件名稱。 在我們的範例中,命令如下所示:
Add-IoTAppxPackage "C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test.appx" fga Appx.MyUWPApp (or) newappxpkg "C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test.appx" fga Appx.MyUWPApp
注意
fga 參數表示 Appx 檔案是前景應用程式。 如果您以 bga 參數) 將套件指定為背景應用程式 (,而且映射中沒有其他前景應用程式,當開機 (顯示無限期) 時,系統會卡住。
這會在 建立新的資料夾
C:\MyWorkspace\Source-<arch>\Packages\Appx.MyUWPApp
,複製 appx 檔案及其相依性,並產生customizations.xml檔案,以及用來建置套件的套件 xml 檔案。請注意,如果您的 Appx 具有相依性,當您執行此命令時,需要相依性子目錄出現在與 Appx 相同的位置。 當您建置 FFU 映射時,若無法包含此專案,將會導致錯誤。
這也會將 FeatureID APPX_MYUWPAPP 新增至
C:\MyWorkspace\Source-<arch>\Packages\OEMFM.xml
檔案。從 IoT 核心殼層環境,您現在可以將套件建置到使用 New-IoTCabPackage的.CAB檔案中。
New-IoTCabPackage Appx.MyUWPApp (or) buildpkg Appx.MyUWPApp
這會將封裝建置到 底下的
C:\MyWorkspace\Build\<arch>\pkgs\<oemname>.Appx.MyUWPApp.cab
.CAB檔案中。
更新專案的組態檔
您現在可以更新專案組態檔,以將您的應用程式包含在 FFU 映射中。
使用 Add-IoTProductFeature為應用程式套件新增 FeatureID:
Add-IoTProductFeature ProductA Test APPX_MYUWPAPP -OEM (or) addfid ProductA Test APPX_MYUWPAPP -OEM
這會將名為 APPX_HELLOWOLRDAPP 的 FeatureID 新增至指定產品的 Test OEMInput XML 檔案 (
C:\IoT\Workspaces\ContosoWS\Source-arm\<product name>\TestOEMInput.xml
檔案) 。使用Remove-IoTProductFeature移除範例測試應用程式IOT_BERTHA
Remove-IoTProductFeature ProductA Test IOT_BERTHA (or) removefid ProductA Test IOT_BERTHA
建置及測試映射
從 IoT Core PowerShell 環境,使用 New-IoTCabPackage () 在工作資料夾中建置所有套件,讓您的環境準備好建立產品:
New-IoTCabPackage All
(or) buildpkg all
再次建置 FFU 映射,如 實驗室 1a:建立基本映射中所述。 您可以使用下列命令:
New-IoTFFUImage ProductX Test
(or)buildimage ProductX Test
一旦建置 FFU 檔案 (現在應該包含您的應用程式) ,您就可以將它刷新到實驗室 1a中指定的硬體裝置。
若要瞭解如何在 IoT 裝置上安裝 appx 檔案,請檢視 安裝您的應用程式 檔以取得詳細資訊。