> ## 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.

# 串流安裝：狀態

> 串流安裝：狀態

在安裝進行中且使用者正在遊玩時，遊戲必須追蹤支援遊戲進行所需的內容，並檢查是否已安裝所需的內容。遊戲可以使用系統 API 來查詢硬碟上區塊的狀態，以及正在下載之內容的進度。

如果使用者嘗試進入需要尚未安裝之內容的遊戲部分，遊戲應顯示對話方塊或進度列來告知使用者，並傳達安裝的進度。此外，遊戲應一律提供使用者離開進度畫面的選項，理想情況下是讓使用者在安裝期間體驗內容。以下是範例。

在遊玩射擊遊戲的單人戰役時，使用者到達了支援戰役下一個區域的內容尚未安裝的地方。良好的使用者體驗是顯示一個呈現內容取得狀態的進度列，並提供加入多人遊戲的選項。只要將一部分多人遊戲內容納入啟動遊戲所需的資料中，即可啟用此選項。

遊戲可以監視和驗證安裝，並且可以在安裝完成時收到警示。您可以監視整個套件或套件中部分區塊的安裝。若要建立安裝監視器，請使用 [XPackageCreateInstallationMonitor](/zh-TW/reference/system/xpackage/functions/xpackagecreateinstallationmonitor)。指定監視器用於下列其中一項：

* 透過將選取器指定為參數，監視特定的一組區塊
* 透過指定零個選取器，監視整個套件

建立安裝監視器之後，為下列其中一項註冊處理常式：

* 使用 [XPackageRegisterInstallationProgressChanged](/zh-TW/reference/system/xpackage/functions/xpackageregisterinstallationprogresschanged) 註冊「安裝進度已變更」事件
* 使用 [XPackageRegisterPackageInstalled](/zh-TW/reference/system/xpackage/functions/xpackageregisterpackageinstalled) 註冊「套件已安裝」事件

「套件已安裝」事件會指出整個套件何時完成安裝。「進度已變更」事件可讓您監視安裝的進度。請注意，「進度已變更」事件也會指出安裝何時完成，因此如果您已註冊「進度已變更」處理常式，就不需要註冊「套件已安裝」處理常式。以下是範例。

某款遊戲已實作啟動標記，因此可以在完全安裝之前執行。遊戲需要知道哪些部分已安裝、哪些部分尚未安裝。為了向使用者呈現可用的賽道，遊戲需要知道與特定賽道名稱之賽道相關聯的區塊何時已安裝。

```cpp theme={null}
class GameTrackMonitor 
{ 
public: 
 
    HRESULT StartMonitoring(XTaskQueueHandle queue, const char* trackName) 
    { 
        char id[PACKAGE_IDENTIFIER_MAX_LENGTH]; 
 
        XPackageChunkSelector selector; 
        selector.type = XPackageChunkSelectorType::Tag; 
        selector.tag = trackName; 
 
        RETURN_IF_FAILED(XPackageGetCurrentProcessPackageIdentifier(_countof(id), id)); 
 
        XPackageInstallationMonitorHandle monitor; 
 
        RETURN_IF_FAILED(XPackageCreateInstallationMonitor( 
            id,         // Identity to monitor. 
            1,          // Number of selectors. 
            &selector,  // Selectors. 
            1000,       // Resolution of monitor in ms. 
            queue,      // Queue where updates are performed. 
            &monitor)); 
 
        XTaskQueueRegistrationToken token; 
 
        HRESULT hr = XPackageRegisterInstallationProgressChanged( 
            monitor, 
            this, 
            [](void *context, XPackageInstallationMonitorHandle monitor) 
        { 
            GameTrackMonitor* pthis = static_cast<GameTrackMonitor*>(context); 
            XPackageInstallationProgress progress; 
 
            XPackageGetInstallationProgress(monitor, &progress); 
            pthis->DrawProgress(progress); 
            if (progress.completed) 
            { 
                pthis->TrackReady(); 
                XPackageCloseInstallationMonitorHandle(monitor); 
            } 
        }, &token); 
 
        if (FAILED(hr)) 
        { 
            XPackageCloseInstallationMonitorHandle(monitor); 
        } 
 
        return hr; 
    } 
 
private: 
 
    void DrawProgress(const XPackageInstallationProgress& progress) 
    { 
        // ... 
    } 
 
    void TrackReady() 
    { 
        // ... 
    } 
};
```

## 參考 API 文件

* [XPackage (API 內容)](/zh-TW/reference/system/xpackage/xpackage_members)
  * 函式
    * [XPackageCreateInstallationMonitor](/zh-TW/reference/system/xpackage/functions/xpackagecreateinstallationmonitor)
    * [XPackageRegisterInstallationProgressChanged](/zh-TW/reference/system/xpackage/functions/xpackageregisterinstallationprogresschanged)
    * [XPackageRegisterPackageInstalled](/zh-TW/reference/system/xpackage/functions/xpackageregisterpackageinstalled)


## Related topics

- [XBOX 主機遊戲的認證測試 XBOX 需求](/zh-TW/publishing/certification/console-cert-tested-requirements.md)
- [媒體驗證測試步驟](/zh-TW/publishing/game-publishing/concepts/certification/certification-media-validation-test-steps.md)
- [XBOX Series X|S 總覽](/zh-TW/paths/series-xs/overview.md)
- [XR001 遊戲穩定性](/zh-TW/publishing/certification/fma/xr-001.md)
- [安裝 GDK 工具鏈](/zh-TW/home/setup-install/download-install.md)
