實驗室 1g:建置零售版映像
我們將詳細說明建立零售 Windows IoT 核心版映射所需的步驟,並將它快閃到特定的硬體裝置上。
必要條件/需求
請確定您已從建立 基本映射建立基本映射,以及完成上述所有實驗室。
您需要安裝下列工具來完成本節:
- 零售程式碼簽署憑證
- 交叉簽署憑證
- Visual Studio
- Windows 評定與部署 KiT (Windows ADK)
- IoT Core PowerShell 環境
- [記事本] 或 [VS Code] 之類的文字編輯器
修改專案組態檔
請遵循下列步驟,新增任何您想要新增至零售映射的自訂應用程式或布建套件。
- 若要新增自訂應用程式,您應該遵循將 應用程式新增至映射中所列的指示。 不過,您會在執行Add-IoTProductFeature命令時指定
Retail
,Test
如下所示:
Add-IoTProductFeature ProductX Retail APPX_HELLOWORLDAPP -OEM
or addfid ProductX Retail APPX_HELLOWORLDAPP -OEM
這會將名為 APPX_HELLOWORLDAPP 的 FeatureID 新增至指定的產品的零售 OEMInput XML 檔案。
- 將包含的 Windows IoT 核心版功能降至最低。 您也可以使用 Windows IoT 核心版的測試映射,移除預設 (隨附的任何測試應用程式) 。 這包括 IoT Core 預設應用程式,以及任何其他開發人員工具或測試功能。 您可以使用 Remove-IoTProductFeature來執行此動作:
Remove-IoTProductFeature ProductX Test IOT_BERTHA
or removefid ProductX Test IOT_BERTHA
正確簽署並包含您的應用程式
如果您有一或多個想要包含在 Windows IoT 核心版零售映射中的自訂應用程式,您必須在零售映射中包含這些應用程式時,確認這些應用程式是否已正確簽署。 針對您想要包含在映射中的每個應用程式,請遵循下列步驟。 請注意,如果您只包含一個應用程式,則可以略過步驟 8 和 9。
在技術人員電腦上安裝零售程式碼簽署憑證。
在 Visual Studio 中開啟自訂應用程式,然後開啟 Package.appxmanifest 檔案。
按一下 [ 封裝] 索引標籤,然後按一下 [ 選擇憑證...] 按鈕。
- 顯示的對話方塊會顯示用於程式碼簽署的憑證。 按一下 [ 設定憑證...] 下拉式清單,然後 選取 [從憑證存放區挑選...]:
出現提示時,請選擇您的零售程式碼簽署憑證,然後按一下 [ 確定]。
將專案儲存在 Visual Studio 中,然後建置 Appx 套件。 請注意,建置此套件時,應該提示您輸入零售程式碼簽署憑證的密碼。
建置 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 核心版零售映射。 請先確認您的電腦上已安裝零售程式碼簽署憑證,再遵循下列步驟:
- 設定 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>
以系統管理員身分執行 IoT Core PowerShell 環境 。
設定零售簽署的環境。 這是使用 Set-IoTRetailSign來完成:
Set-IoTRetailSign On
(or) retailsign on
- 建置套件:
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
,並將其複製到目錄。
如果您從步驟 5 重新簽署.CAB檔案,請將重新簽署的.CAB檔案
C:\IoT\Workspaces\ContosoWS\Build\<arch>\pkgs
複製到 ,覆寫現有的檔案。 在我們的範例中,這些檔案會C:\IoT\Workspaces\ContosoWS\Build\arm\pkgs
複製到 。執行下列命令來建置 yoru 零售映射:
New-IoTFFUImage ProductX Retail
(or)buildimage ProductX Retail
- 然後,您可以如 快閃影像中所述,閃爍零售映射。
使用的命令
以下是) 建立零售 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
將功能新增至零售設定
使用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
邏輯,您可以在裝置的每個開機時略過測試應用程式。 基本上,您的測試應用程式會在每次開機時執行,但「傳遞」到開機時的最終應用程式。 如有需要,您可以設定邏輯,讓裝置在測試應用程式上失敗時,不會繼續到最終應用程式。 如果您需要確認裝置在每次開機時都經過完整測試且功能,這會很有説明。
優點:您可以在每次開機時自動測試裝置,以確保已正確設定特定條件,且裝置已完整測試 (且安全) 。
缺點:您的測試應用程式隨附于零售映射中。 您的應用程式可能會有安全性漏洞。 請確定您的測試應用程式視需要鎖定。 由於測試應用程式的本質,您可以修改裝置的功能。