實驗室 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 應用程式有兩個主要限制:

  1. 不支援舊版 Win32 UI:IoT 核心版不包含 API 來建立傳統 (HWND) Windows。 無法使用舊版方法,例如 CreateWindow () 和 CreateWindowEx () 或任何其他處理 Windows 控制碼的方法, (HWND) 。 之後,IoT 核心版不支援相依于這類 API 的架構,包括 MFC、Windows Forms和 WPF。
  2. 僅限 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 應用程式,則可以略過本節

  1. 建立 UWP 應用程式。 這可以是針對 IoT 核心版所設計的任何應用程式,儲存為 Appx 套件。 在我們的範例中,我們使用 IoT 核心版預設 應用程式。

  2. 在 Visual Studio 中,將您的應用程式儲存為 Appx 套件。 若要這麼做,請按一下[專案 > 存放區 > 建立應用程式套件>],以建立 [下一步] 側載的套件>

  3. 選取 [輸出位置 ] 作為 C:\DefaultApp (或任何其他不包含 spaces 的路徑。)

  4. 選取 [產生應用程式套件組合: 永不]

  5. 按一下 [建立]。

應用程式套件視窗的螢幕擷取畫面

Visual Studio 會針對您選取的 (Arm、x86、x64) 選取的架構 () 指定位置建立 Appx 檔案。 在我們的範例中,此檔案為:C:\DefaultApp\IoTCoreDefaultApp_1.2.0.0_ARM_Debug_Test

  1. 選擇性: 測試應用程式。 請注意,您可能已在建置專案時測試過應用程式。

封裝 Appx

下一個步驟是封裝 Appx 檔案,這可讓您在建置 FFU 映射) 時使用 Windows ADK (加以自訂和建置。

  1. 開啟 IoTCorePShell.cmd。 它應該會提示您以系統管理員身分執行。

  2. 使用 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 檔案。

  3. 從 IoT 核心殼層環境,您現在可以將套件建置到使用 New-IoTCabPackage的.CAB檔案中。

    New-IoTCabPackage Appx.MyUWPApp
    (or) buildpkg Appx.MyUWPApp
    

    這會將封裝建置到 底下的 C:\MyWorkspace\Build\<arch>\pkgs\<oemname>.Appx.MyUWPApp.cab .CAB檔案中。

更新專案的組態檔

您現在可以更新專案組態檔,以將您的應用程式包含在 FFU 映射中。

  1. 使用 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 檔案) 。

  2. 使用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 檔案,請檢視 安裝您的應用程式 檔以取得詳細資訊。

更新 IoT 核心版裝置上的應用程式

後續步驟

實驗室 1c:將檔案和登錄設定新增至映射