> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 遊戲封裝、更新與串流安裝測試

> 遊戲封裝、內容更新與串流安裝測試

本文說明如何在整個開發生命週期中建立用於串流安裝的套件，包括本機反覆開發、效能驗證、提交前測試，以及最終提交。本文說明 MakePkg 工具在封裝期間執行的步驟，並概述在開發期間封裝及測試串流安裝的建議做法。

## 簡介

[MakePkg.exe](/zh-TW/build/core-features/common/packaging/deployment/makepkg) 是一個將內容放入二進位封裝檔案的工具，此檔案稱為 XBOX Virtual Container (XVC)。主機用套件的副檔名為 .xvc，PC 用套件的副檔名為 .msixvc。除了副檔名不同之外，套件名稱還會加上後置字元，以區分 XBOX One 系列 (\_x) 與 XBOX Series X|S 系列 (\_xs) 套件。

MakePkg.exe 使用您遊戲的內容和對應檔作為輸入，產生使用以下其中一種金鑰加密的套件：公開的測試金鑰、隨機產生的金鑰，或可安全用於加密的穩定金鑰。用於加密的金鑰取決於套件是用於本機測試，還是要提交給 Microsoft 進行發行。以下各節詳細說明這些使用案例。

[對應檔](/zh-TW/build/core-features/common/packaging/deployment/atoc-deployment-schema)中的 XML 有兩個用途。首先，它指定遊戲在執行階段可使用之檔案的位置。其次，它指定每個檔案所屬的區塊 (chunk) 檔案。有一組區塊稱為「啟動集」，一律會在允許遊戲執行之前安裝。其餘區塊則會在遊戲執行時安裝。您可以使用 API 查詢區塊安裝的進度，並修改尚未安裝之區塊的安裝順序。

本文內容：

* [封裝期間的步驟](#steps_during_packaging)
* [開發期間封裝的建議步驟](#recommended_steps_for_packaging_during_development)
* [測試串流安裝套件](#testing_of_streaming_installation_packages)
* [最佳做法](#best_practices)
* [開啟的資料連線所造成的封裝失敗](#open-data-connections)
* [資源與指引](#resources_and_guidance)
* [另請參閱](#see_also)

<a id="steps_during_packaging" />

## 封裝期間的步驟

MakePkg 封裝程序包含數個步驟。

### MicrosoftGame.config 與檔案存在驗證

`makepkg` 命令會檢查內容來源目錄中的 [MicrosoftGame.config](/zh-TW/build/core-features/common/game-config/MicrosoftGameConfig-Overview) 檔案是否有效且可安裝。

執行 `makepkg pack` 命令時，它會確保 MicrosoftGame.config 中參考的檔案存在於來源目錄中。它會驗證這些檔案是否包含在套件的啟動集中。此驗證涵蓋二進位檔、影像檔和任何其他資源。

### 二進位簽署

XBOX Code Integrity (XCI) 會掃描並簽署您遊戲中的檔案。在此程序中，它會先修改檔案中偵測到的 PE 標頭，再將其寫入套件檔案。如果簽署失敗，就會回報錯誤訊息。該訊息包含一個命令，可讓您手動重新執行 xcihash.exe，以收集有關簽署失敗的更多詳細資料。

### 建立套件

MakePkg 一完成預先驗證步驟，就會建立套件檔案。接著 MakePkg 會將來源檔案 (包括已簽署的可執行檔) 依照 XML 對應檔中指定的區塊複製到套件檔案中。

<Note>僅限主機：建立套件的最後一個步驟是內嵌 Game OS 檔案 (GameOs.xvd)。此檔案是 Microsoft Game Development Kit (GDK) 的一部分，必須位於配置目錄中遊戲可執行檔的旁邊。`/gameos` 旗標可指定 Game OS 檔案的替代來源位置。</Note>

### 加密

| 類型 | 測試簽署 (**/lt**) | 隨機金鑰 (**/l**) | 穩定金鑰 (**/lk SECRET.LEKB**) |
| - | - | - | - |
| 差異上傳 | 是 | 否 | 是 |
| packageutil compare | 是 | 否 | 是 |
| 安全上傳 | 否 | 是 | 是 |
| 套件靜態安全保護 | 否 | 是 | 是 |
| 在開發套件上側載 | 是 | 否 | 是 |
| 在 PC 上側載 | 是 | 否 | 否 |

#### 測試簽署 (預設加密)

MakePkg 的預設行為是建立測試簽署的套件，呼叫 `makepkg pack` 時使用 `/lt` 參數也代表此行為。測試簽署會使用公開的測試加密金鑰來加密產生的套件檔案，用於在 XBOX 和 PC 上執行的效能測試驗證。雖然即時套件解密的影響在設計上對遊戲是透明的，但這可確保在認證及最終發行遊戲之前，就能發現加密可能造成的任何效能問題。由於加密使用固定金鑰，測試簽署的套件並非用於以密碼編譯方式保護內容。測試簽署的套件可以使用 **xbapp install** 安裝在開發套件上，並使用 **wdapp install** 安裝在開發 PC 上。

#### 隨機金鑰加密 (`/l` 參數)

MakePkg 的 `/l` 參數會使用隨機產生的加密金鑰來加密套件檔案。除了您的遊戲套件之外，MakePkg `/l` 還會輸出一個名稱格式為 *PackageFullName\_licenseName\_GUID.EKB* 的檔案。(請注意使用的是底線 (\_) 字元。) 使用 `/l` 參數建立的套件無法安裝在開發套件或開發 PC 上。您應該使用測試簽署的套件來測試遊戲，直到遊戲通過所有檢查和提交前測試為止。達到該狀態後，請在最終提交給 Microsoft 之前，使用 `/l` 參數執行 MakePkg。

#### 建議 - 穩定金鑰加密  (Genkey + /lk 參數)

Makepkg 的 `/lk` 參數會使用由 `makepkg genkey` 命令產生的穩定 (一律相同) 金鑰來加密套件。除了您的遊戲套件之外，`makepkg /lk` 還會輸出名稱格式為 *PackageFullName\_licenseName\_GUID.EKB* 和 *PackageFullName\_licenseName\_GUID.CEKB* 的檔案。(請注意使用的是底線 (\_) 字元。) 使用 `/lk` 參數建立的套件可以安裝在開發套件上，但無法安裝在開發 PC 上。對於 PC，您應該使用測試簽署的套件來測試遊戲，直到遊戲通過所有檢查和提交前測試為止。

這是開發套件測試與提交的建議加密模式，因為它具有下列優點：

1. packageutil compare 可以產生正確的更新大小估計值 (與 /l 不同)。
2. 它可使用與主機和 PC 下載內容更新相同的演算法，以安全的差異上傳方式上傳到 Partner Center。
3. 它可以安裝到開發套件上 (與 `/l` 不同)。
4. 它使用安全的加密金鑰資料，且只能在特定環境中解密 (與 `/lt` 不同)。

與 `/lt` 和 `/l` 加密模式不同，`/lk` 模式需要額外的一次性步驟才能使用：

1. 一次性：執行 `makepkg genkey /ekb SECRET_KEY.lekb` 以建立 SECRET\_KEY.lekb 檔案。這是本機託管金鑰 Blob (LEKB)，
   其中儲存用來加密套件的穩定內容金鑰。它應儲存在安全的位置，並僅限有需要的人員存取。在理想的
   設定中，只有正式的組建電腦/帳戶才應有權存取它。
2. 建立套件：執行 `makepkg pack /lk SECRET_KEY.lekb ...`。這會建立使用 SECRET\_KEY.lekb 檔案中所儲存金鑰加密的套件。
3. 上傳套件：XVC 和 EKB 檔案照常上傳到 Partner Center。LEKB 和 CEKB 檔案不會上傳。

`xbapp install` 會自動安裝將套件載入 XBOX 開發套件所需的 CEKB 檔案。如果您要測試的安裝
案例不是以工具為基礎的安裝 (遊戲光碟、外部儲存裝置、主機對主機傳輸)，請使用 `xbapp installkey` 命令
僅安裝 CEKB 檔案。

<Warning>LEKB 檔案的內容僅經過輕度模糊處理。您有責任透過保護 LEKB 檔案的存取權，來確保內容套件的安全性。任何擁有 LEKB 檔案及 `makepkg pack` 所輸出之內容套件檔案的人</Warning>
都能解密其內容。

<Warning>CEKB 檔案的內容可讓套件載入到任何作用中的 XBOX 開發套件上。您有責任透過保護 CEKB 檔案的存取權，來確保內容套件的安全性。任何擁有 CEKB 檔案、作用中的 XBOX 開發套件，以及 `makepkg pack` 所輸出之內容套件檔案的人</Warning>
都能在其開發套件上安裝該套件、啟動該套件，並使用 xbcp 將檔案從套件中複製出來。

### 提交驗證

MakePkg 在建立套件後，會自動對遊戲檔案執行 [Submission Validator (SubmissionValidator.dll)](/zh-TW/build/core-features/common/packaging/subval/submissionvalidator)。Submission Validator 的目標是檢查可能在稍後 Microsoft 的擷取、提交或認證程序中，或在未來的內容更新中對遊戲造成問題的錯誤和問題。您必須修正所有偵測到的問題，才能產生已簽署的套件以上傳到 Partner Center。

提交驗證程序會產生一個 XML 記錄檔，詳細說明任何失敗的性質和位置。此程序會將記錄檔寫入 MakePkg 的 `/pd` 參數所指定的套件檔案輸出位置。此記錄可能包含失敗或警告。您必須先解決失敗問題，才能將套件提交給 Microsoft。請考慮修正警告，以確保遊戲符合原則和 XBOX 需求 (XR) 指引。

當您將套件上傳到 Partner Center 並提交進行擷取程序時，驗證檢查會再次執行。此程序可確保使用最新版本的 Submission Validator 檢查遊戲，並盡早發現任何問題。

#### 提交驗證測試

| 提交與驗證測試 | 描述 |
| - | - |
| **外來檔案** | 確認遊戲不包含任何禁止的檔案。禁止的檔案包括原始程式碼和偵錯檔案 (例如 \*.c、\*.cpp、\*.obj、\*.lib、\*.cs 和 \*.h)，以及 Game OS 磁碟區中包含的任何系統檔案。 |
| **MicrosoftGame.config** | MakePkg 未執行的各種設定檢查：標誌和啟動畫面影像的解析度與位元深度。檢查套件是否正確支援模組 (僅限 PC 桌面)。 |
| **二進位掃描** | 掃描所有 .exe 和 .dll 檔案是否有任何非零售版相依性。任何受控碼二進位檔都會導致失敗 (僅限主機)。偵測到的其他問題包括非 XBOX 可執行檔 (僅限主機) 和 32 位元可執行檔 (僅限主機)。 |

隨著 Microsoft 發現新問題，具體的測試也會隨時間演進。通過 Submission Validator 檢查不應被解讀為遊戲提交在擷取和認證程序中不會出現其他問題。相反地，其目的僅在於減少因可預見錯誤而遭拒所造成的時間和成本。此外，雖然 Submission Validator 可以檢查某些與安全性相關的問題，但不應將其視為遊戲的安全性測試。

您可以從 XBOX Game Developer (XGD) 網站下載最新版本的 Submission Validator。由於此工具的演進速度可能與 XBOX One 軟體開發套件版本不同，請務必使用最新版本，以避免在提交程序中因驗證失敗而遭拒。若要取得最新版本，請參閱 [XBOX Developer Downloads->XBOX One->Submission Validator](https://aka.ms/gdkdl)。

如需 Submission Validator 的詳細資訊，請參閱 GDK 文件中的 [Submission Validator (SubmissionValidator.dll)](/zh-TW/build/core-features/common/packaging/subval/submissionvalidator)。

如果您對驗證程序有疑問，請連絡您的 Microsoft 客戶代表。

<a id="recommended_steps_for_packaging_during_development" />

## 開發期間封裝的建議步驟

若要在開發期間建立套件，請使用下列步驟。以 PC 為目標時，請使用 `wdapp` 而非 `xbapp`。

1. 使用測試簽署的套件，並從開發 PC 使用 **xbapp install** 在本機反覆開發。

   **MakePkg.exe pack /f** *Mapfile* **/d** *LooseContentDir* **/pd** *OutputFolder*

   若要開始使用，請參閱 [XBOX Developer Downloads](https://aka.ms/xgddl)。

2. 從殼層啟動或使用 **xbapp launch** 來執行您的遊戲。

   **xbapp install** *local-XVC-path* 或 **xbapp install** *http-URI*

   若要測試串流安裝的其他選項，請參閱本文稍後的[測試串流安裝套件](#testing-streaming-installation-packages-console)。

3. 使用燒錄到藍光光碟根資料夾中的測試簽署套件，測試從光碟機安裝遊戲。將光碟插入 XBOX 開發套件後，執行下列命令。

   **xbapp install** XO:\\*XVC-file-name*

4. 使用與測試簽署套件相同的封裝命令來準備最終提交，但加上 `/l` 旗標。

<a id="testing_of_streaming_installation_packages" />

## 測試串流安裝套件 (PC)

使用 `wdapp` 命令在測試 PC 上安裝套件。

<Note>目前，測試用 MSIXVC 套件必須存在於測試 PC 的實體磁碟機或網頁伺服器上。未來的更新將新增從通用命名慣例 (UNC) 共用安裝的功能。</Note>

如需詳細資訊，請參閱 [PC 封裝入門](/zh-TW/build/core-features/common/packaging/overviews/packaging-getting-started-for-PC)。

## 測試串流安裝套件 (主機)

您可以透過四種方式測試測試簽署串流安裝套件的安裝。

### 從開發 PC 串流

從開發 PC 串流不支援任何輸送量節流。安裝速度取決於開發 PC 的處理器和 I/O 特性，以及開發 PC 與開發套件之間網路連線的頻寬。在使用機械式硬碟的新式開發 PC 上，透過 Gigabit 乙太網路連線，速度預期可達 300 Mbps (約 36 MiB/s) 或更高。

**xbapp install** *dev-pc-path-to-XVC*

[透過命令列安裝](/zh-TW/tools/tools-console/commandlinetools/xbapp#xbapp-install)

[透過 XBOX Manager 安裝](/zh-TW/tools/tools-console/xbom/manager-tool-managing-applications#deploying-apps)

### 在網頁伺服器上裝載套件

如果您的網頁伺服器支援設定頻寬節流，在網頁伺服器上裝載套件可模擬不同的網路傳遞速度。XBOX One 平台會處理連線失敗和重試邏輯。除了速度之外，您的遊戲從網際網路來源安裝時的執行情況，應與從光碟安裝時相同。

**xbapp install** *http-URI-to-package*

[透過命令列安裝](/zh-TW/tools/tools-console/commandlinetools/xbapp#xbapp-install)

[透過 XBOX Manager 安裝](/zh-TW/tools/tools-console/xbom/manager-tool-managing-applications#deploying-apps)

### 將套件燒錄到光碟，然後從命令列安裝

燒錄一張根目錄中包含您 XVC 的光碟，然後使用下列命令安裝套件。

**xbapp install** XO:\\*XVC-file-name*

### 將套件燒錄到光碟，然後透過殼層安裝

燒錄一張光碟，其中包含名為 MSXC 的資料夾，且該資料夾內含您的套件。

將光碟插入執行中的開發套件。殼層會自動開始安裝您的遊戲，並在安裝啟動集後由開發套件顯示通知，此時即可啟動遊戲。

<a id="best_practices" />

## 最佳做法

### 使用子檔案內容更新

使用子檔案內容更新，以減少內容更新的大小。編寫套件配置時，請確保未來能進行最佳化的內容更新。

如需編寫可最佳化更新之套件的詳細資訊，請參閱[內容更新最佳做法](/zh-TW/build/core-features/common/packaging/packaging-updates)。

### XBOX 需求 034 (XR-034：串流安裝初始遊玩標記)

包含初始遊玩標記是選擇性的，但強烈建議使用。它可讓使用者在遊戲完全安裝之前就開始執行，同時在背景繼續安裝。根據 [XR-034](https://learn.microsoft.com/build/store/policies/Console/certification-requirements#content-packages-and-updates)：串流安裝初始遊玩標記，包含初始遊玩標記的遊戲在從初始遊玩標記啟動時，必須提供遊戲體驗。

### 測試您的遊戲

在遊戲從各種來源以不同速度安裝時測試您的遊戲。

### 使用最新的 Submission Validator

一律使用最新版本的 Submission Validator。

最新版本的 Submission Validator 可從 [XBOX Developer Downloads->XBOX One->Submission Validator](https://aka.ms/gdkdl) 取得。

<a id="open-data-connections" />

### 開啟的資料連線所造成的封裝失敗

當您使用 `xbapp install /w` 安裝套件，或 **XBOX Manager** 在啟用 **\[保持資料連線開啟]** 選項的情況下安裝套件時 (用於 Intelligent Delivery 和隨選區塊案例)，主機與 PC 上套件檔案之間的資料管道在安裝完成後仍會保持開啟。此開啟的連線會鎖定套件檔案。

如果您在此管道開啟時嘗試重新建置或重新封裝遊戲，`makepkg` 會因共用違規而失敗，因為它無法寫入已鎖定的套件檔案。

**若要解決此問題，請在重新建置之前關閉開啟的資料連線：**

* **XBOX Manager**：在 XBOX Manager 應用程式中，找到已安裝的套件並取消核取 **\[保持資料連線開啟]** 選項，或解除安裝套件後在未啟用該選項的情況下重新安裝。
* **xbapp install**：如果安裝後不需要讓管道保持開啟，請省略 `/w` 旗標。只有在開發測試期間遊戲需要在執行階段要求額外區塊時，才使用 `/w`。
* **關閉 XBOX Manager**：完全關閉 XBOX Manager 會釋放其在套件檔案上保留的所有開啟檔案控制代碼。

<Tip>如果您使用的引擎整合 (例如 Unreal Engine 的 XBOX 平台工具) 會將套件檔案輸出到固定的輸出目錄，請確保 XBOX Manager 在觸發新組建之前已釋放該檔案。在組建之間變更輸出目錄是另一種避免衝突的方法。</Tip>

<a id="resources_and_guidance" />

## 資源與指引

如需詳細資訊，請參閱下列文章：

* 系統 > 概觀 > [串流安裝與 Intelligent Delivery：概觀](/zh-TW/build/core-features/common/packaging/overviews/streaming_install-intelligent_delivery)
* 系統 > 概觀 > 串流安裝 > [動態重新排序區塊](/zh-TW/build/core-features/common/packaging/packaging-chunkreordering)
* 系統 > 概觀 > 串流安裝 > [串流安裝：狀態](/zh-TW/build/core-features/common/packaging/packaging-installstatus)
* 測試、自動化與發行 > 工具 > 串流安裝 > [部署套件結構描述](/zh-TW/build/core-features/common/packaging/deployment/atoc-deployment-schema)
* 測試、自動化與發行 > 工具 > 串流安裝 > [Make Package (makepkg.exe)](/zh-TW/build/core-features/common/packaging/deployment/makepkg)

<a id="see_also" />

## 另請參閱

[MicrosoftGame.config](/zh-TW/build/core-features/common/game-config/MicrosoftGameConfig-toc)
[Submission Validator (SubmissionValidator.dll)](/zh-TW/build/core-features/common/packaging/subval/submissionvalidator)
[Submission Validator 品質測試](/zh-TW/build/core-features/common/packaging/subval/submissionvalidator-tests)
[XBOX Manager：管理應用程式與檔案](/zh-TW/tools/tools-console/xbom/manager-tool-managing-applications#deploying-apps)


## Related topics

- [XBOX 主機遊戲的認證測試 XBOX 需求](/zh-TW/publishing/certification/console-cert-tested-requirements.md)
- [安裝 GDK 工具鏈](/zh-TW/home/setup-install/download-install.md)
- [XBOX 遊戲開發文件](/zh-TW/index.md)
- [使用 GDKX 建置並執行你的第一個主機遊戲](/zh-TW/home/build-first-title/first-console-title-walkthrough.md)
- [媒體驗證測試步驟](/zh-TW/publishing/game-publishing/concepts/certification/certification-media-validation-test-steps.md)
