共用方式為


實驗室 1g:建置零售版映像

我們將詳細說明建立零售 Windows IoT 核心版映射所需的步驟,並將它快閃到特定的硬體裝置上。

必要條件/需求

請確定您已從建立 基本映射建立基本映射,以及完成上述所有實驗室。

您需要安裝下列工具來完成本節:

  • 零售程式碼簽署憑證
  • 交叉簽署憑證
  • Visual Studio
  • Windows 評定與部署 KiT (Windows ADK)
  • IoT Core PowerShell 環境
  • [記事本] 或 [VS Code] 之類的文字編輯器

修改專案組態檔

請遵循下列步驟,新增任何您想要新增至零售映射的自訂應用程式或布建套件。

  1. 若要新增自訂應用程式,您應該遵循將 應用程式新增至映射中所列的指示。 不過,您會在執行Add-IoTProductFeature命令時指定 RetailTest 如下所示:
Add-IoTProductFeature ProductX Retail APPX_HELLOWORLDAPP -OEM
or addfid ProductX Retail APPX_HELLOWORLDAPP -OEM

這會將名為 APPX_HELLOWORLDAPP 的 FeatureID 新增至指定的產品的零售 OEMInput XML 檔案。

  1. 將包含的 Windows IoT 核心版功能降至最低。 您也可以使用 Windows IoT 核心版的測試映射,移除預設 (隨附的任何測試應用程式) 。 這包括 IoT Core 預設應用程式,以及任何其他開發人員工具或測試功能。 您可以使用 Remove-IoTProductFeature來執行此動作:
Remove-IoTProductFeature ProductX Test IOT_BERTHA
or removefid ProductX Test IOT_BERTHA

正確簽署並包含您的應用程式

如果您有一或多個想要包含在 Windows IoT 核心版零售映射中的自訂應用程式,您必須在零售映射中包含這些應用程式時,確認這些應用程式是否已正確簽署。 針對您想要包含在映射中的每個應用程式,請遵循下列步驟。 請注意,如果您只包含一個應用程式,則可以略過步驟 8 和 9。

  1. 在技術人員電腦上安裝零售程式碼簽署憑證。

  2. Visual Studio 中開啟自訂應用程式,然後開啟 Package.appxmanifest 檔案。

  3. 按一下 [ 封裝] 索引標籤,然後按一下 [ 選擇憑證...] 按鈕。

套件資訊清單畫面

  1. 顯示的對話方塊會顯示用於程式碼簽署的憑證。 按一下 [ 設定憑證...] 下拉式清單,然後 選取 [從憑證存放區挑選...]

選擇憑證畫面

  1. 出現提示時,請選擇您的零售程式碼簽署憑證,然後按一下 [ 確定]。

  2. 將專案儲存在 Visual Studio 中,然後建置 Appx 套件。 請注意,建置此套件時,應該提示您輸入零售程式碼簽署憑證的密碼。

  3. 建置 Appx 檔案之後,請在 IoT Core Powershell 環境中執行下列命令:

Add-IoTAppxPackage "C:\Dev\OpenSource\ContosoApp\ContosoApp\AppPackages\ContosoApp_1.0.0.0_ARM_Debug_Test\ContosoApp_1.0.0.0_ARM_Debug.appx" fga Appx.ContosoApp
 (or) newAppxPkg "C:\Dev\OpenSource\ContosoApp\ContosoApp\AppPackages\ContosoApp_1.0.0.0_ARM_Debug_Test\ContosoApp_1.0.0.0_ARM_Debug.appx" fga Appx.ContosoApp

建置零售映射檔

一旦我們已正確簽署所有自訂應用程式套件,我們現在可以建置 Windows IoT 核心版零售映射。 請先確認您的電腦上已安裝零售程式碼簽署憑證,再遵循下列步驟:

  1. 設定 IoT 簽章以包含憑證和跨憑證的詳細資料。 這是藉由修改 IoTWorkspace.xml 位於工作區 (中的檔案來完成,例如 C:\MyWorkspace) :
<!--Specify the retail signing certificate details, Format given below -->
<RetailSignToolParam>/s my /sha1 "thumbprint" /fd SHA256 /ac "c:\DownloadedCrossCert.crt"</RetailSignToolParam>
  1. 以系統管理員身分執行 IoT Core PowerShell 環境

  2. 設定零售簽署的環境。 這是使用 Set-IoTRetailSign來完成:

Set-IoTRetailSign On
(or) retailsign on 
  1. 建置套件:
New-IoTCabPackage All
(or) buildpkg all 

建置所有套件.CAB檔案之後,您應該確認每個檔案都已使用零售憑證正確簽署。 如果有些仍然使用測試憑證簽署, (如果您使用技術人員電腦來建置測試和零售映射) ,您可以使用 Redo-IoTCabSignature重新簽署這些檔案:

Redo-IoTCabSignature  C:\BSP.IN C:\BSP.OUT
(or) re-sign.cmd C:\BSP.IN C:\BSP.OUT 

這會從 取得.CAB檔案,並使用零售憑證重新簽署這些 c:\BSP.OUT 檔案 c:\BSP.IN ,並將其複製到目錄。

  1. 如果您從步驟 5 重新簽署.CAB檔案,請將重新簽署的.CAB檔案 C:\IoT\Workspaces\ContosoWS\Build\<arch>\pkgs 複製到 ,覆寫現有的檔案。 在我們的範例中,這些檔案會 C:\IoT\Workspaces\ContosoWS\Build\arm\pkgs 複製到 。

  2. 執行下列命令來建置 yoru 零售映射:

New-IoTFFUImage ProductX Retail
(or)buildimage ProductX Retail 
  1. 然後,您可以如 快閃影像中所述,閃爍零售映射。

使用的命令

以下是) 建立零售 IoT 核心版映射的命令 (。 請注意,您的零售程式碼簽署憑證應該先安裝,而且在重新簽署.CAB檔案時,可能會提示您輸入憑證密碼。

Set-IoTRetailSign On
New-IoTCabPackage All
Redo-IoTCabSignature  C:\BSP.IN C:\BSP.OUT
xcopy C:\BSP.OUT\*.cab C:\IoT\Workspaces\ContosoWS\Build\arm\pkgs\*.cab
New-IoTFFUImage ProductX Retail

將功能新增至零售設定

  1. 使用Add-IoTProductFeature更新產品零售組態檔

    # Add application features
    Add-IoTProductFeature ProductA Test APPX_MYUWPAPP -OEM
    Remove-IoTProductFeature ProductA Test IOT_BERTHA
    # Add registry and file features
    Add-IoTProductFeature ProductA Retail FILES_CONFIGS -OEM
    Add-IoTProductFeature ProductA Retail REGISTRY_SETTINGS -OEM
    # Add provisioning feature
    Add-IoTProductFeature ProductA Retail PROV_WIFISETTINGS -OEM
    # Add driver
    Add-IoTProductFeature ProductA Retail DRIVERS_HELLOBLINKY -OEM
    

驗證零售映射

使用者只要開啟裝置上閃爍映射的裝置,即可輕鬆地驗證 Windows IoT Core 的自訂測試映射。 裝置執行之後,您可以透過各種檢查來執行,以確認裝置確實正常運作。 這些測試的簡易性取決於影像中模擬的安全性因素層級。 由於測試映射上沒有內建安全性通訊協定,因此您可以使用所有可用的開發工具來測試 IoT 裝置。

Windows IoT 核心版自訂零售映射的測試工作會變得困難,因為您可以將安全性通訊協定納入安裝到裝置的映射中。 由於這些安全性通訊協定的本質,您可能無法使用可用的測試控管來驗證裝置,因此您可能想要撰寫可在 IoT 裝置上執行的測試應用程式。 此應用程式接著會執行 IoT 裝置各種區域和功能的驗證測試。

您可以透過下列其中一種方式,測試 Windows IoT 核心版的自訂零售映射:

全新零售映射

如果您真的想要有全新的零售映射,則必須為裝置建立兩個零售映射。 這兩個映射會相同,不同之處在于一個映射會包含測試應用程式 (設定為前景應用程式) ,而另一個「全新」映射則不會。 您會將第一個映射快閃 (,其中包含的測試應用程式) ,並在 IoT 裝置上執行測試驗證。 經過驗證之後,您就可以使用第二個「全新」零售映射重新閃爍 IoT 裝置以進行散發。

優點:最終零售映射將會完全清除,而且只有視為必要專案才會包含在映射中。

缺點:將測試應用程式納入零售映射可能會造成布建套件 () 的一些潛在問題,以及測試應用程式中的潛在使用者錯誤。 這會使此零售映射與最終零售映射不同。

One-Time傳遞測試

只會建立一個最終零售映射,而且也會包含測試應用程式。 您會設定映射,讓一旦啟動全新體驗 (OOBE) 應用程式,您的測試應用程式就會啟動 (作為前景應用程式) 。 測試應用程式內的條件陳述式會觸發,讓應用程式知道在 (防止裝置第一次開啟) 電源後執行一次。

// Declare variable
Windows.Storage.ApplicationDataContainer localSettings = 
    Windows.Storage.ApplicationData.Current.LocalSettings;
    
// Set variable as boolean, numbers, or string values as needed at approperiate location within the test app
localSettings.Values["appRanOnce"] = false;    

// Read variable and verify value to check and apply logic
Object value = localSettings.Values["appRanOnce"];

注意

為了獲得最佳結果,請只使用 localSettings 來儲存變數來儲存設定值。 使用 roamingSettings 功能可能會產生不想要的結果。 localSettings 在此寫入時,只能保存 64k 的資料。 在這裡深入瞭解應用程式設定。

使用上述程式碼區塊,您可以在測試應用程式的啟動時套用邏輯,以便在後續啟動時,應用程式採取適當的動作。

那麼我可以採取的動作類型為何?

  • 啟動另一個 FGA 應用程式
  • 編輯登錄以修改開機順序

從測試應用程式啟動另一個 FGA 應用程式

如果您要啟動 Microsoft Store 應用程式,您可以使用下列程式碼片段來啟動透過市集安裝及更新的應用程式。 如需 URI 配置的其他資訊,請參閱 這裡

// Following will launch the Microsoft store app and navigate to the Games section
bool result = await Windows.System.Launcher.LaunchUriAsync(new Uri
    ("ms-windows-store://navigatetopage/?Id=Games"));

// Following will launch the One Note app using the package family name (PFN)
bool result = await Windows.System.Launcher.LaunchUriAsync(new Uri
    ("ms-windows-store://pdp/?PFN= Microsoft.Office.OneNote_8wekyb3d8bbwe"));

如果您要啟動自訂 (非 Microsoft Store) 應用程式,您可以使用 AppServiceConnection 套件系列名稱啟動應用程式, (PFN) 。

首先,您必須向系統內的應用程式服務註冊最終應用程式 (com.concurrency.lwinsapp) 。 您必須修改 , Package.appxmanifest file 以在 <Applications> 資訊清單的 區段中包含下列程式碼區塊。

<Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="AppServiceProvider.App">
      <Extensions>
        <uap:Extension Category="windows.appService" EntryPoint="MyAppService.AppLaunchService">
          <uap3:AppService Name="com.concurrency.lwinsapp" uap4:SupportsMultipleInstances="true" />
        </uap:Extension>
      </Extensions>
      ...
</Application>

下列程式碼區段會啟動自訂應用程式:

private AppServiceConnection appLaunchService;
...
this.appLaunchService = new AppServiceConnection();
this.appLaunchService.AppServiceName = "com.concurrency.lwinsapp";
this.appLaunchService.PackageFamilyName = "f3a114f7-e099-4773-8c93-77abcba14f62_004hcn5rxyy0y";
var status = await this.appLaunchService.OpenAsync();

藉由結合 和 AppServiceConnection 之間的 localSettings 邏輯,您可以在裝置的每個開機時略過測試應用程式。 基本上,您的測試應用程式會在每次開機時執行,但「傳遞」到開機時的最終應用程式。 如有需要,您可以設定邏輯,讓裝置在測試應用程式上失敗時,不會繼續到最終應用程式。 如果您需要確認裝置在每次開機時都經過完整測試且功能,這會很有説明。

優點:您可以在每次開機時自動測試裝置,以確保已正確設定特定條件,且裝置已完整測試 (且安全) 。

缺點:您的測試應用程式隨附于零售映射中。 您的應用程式可能會有安全性漏洞。 請確定您的測試應用程式視需要鎖定。 由於測試應用程式的本質,您可以修改裝置的功能。

後續步驟