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

# GameInput 側載

> 說明如何將 GameInput 執行階段部署在遊戲旁邊，而不是安裝 GameInput 可轉散發套件。

從 GameInput 4.0 開始，您可以將 GameInput 執行階段 `GameInputRedist.dll` 部署在與遊戲可執行檔相同的目錄中。這稱為*側載*。側載的執行階段可讓您的遊戲使用其建置和測試時所用的 GameInput 功能和修正，即使在未安裝 GameInput 可轉散發套件或安裝了較舊版本的系統上也是如此。此模型與 DirectX Agility SDK 所使用的模型類似。

PC 和 XBOX 主機都支援側載。在 XBOX 上，側載需要 2025 年 10 月 GDK (2510) 或更新版本，並可讓您的遊戲使用比 GDK 執行階段所支援版本更新的 API 版本，例如在 2026 年 10 月 GDK 之前使用 API v4。如需詳細資訊，請參閱 [XBOX 主機上的 GameInput](https://docs.xbox.com/zh-TW/build/core-features/common/input/overviews/input-xbox.md)。

> [!NOTE]
>
> 在 PC 上，安裝 GameInput 可轉散發套件仍是部署 GameInput 的慣用方式。已安裝的執行階段支援所有 GameInput 功能、由所有應用程式共用，並且會獨立於您的遊戲進行更新。當安裝可轉散發套件不可行時 (例如您的散發通道不支援執行安裝程式時，或在開發和測試電腦上)，請使用側載。

## 取得可側載的執行階段

[Microsoft.GameInput](https://www.nuget.org/packages/Microsoft.GameInput) NuGet 套件在下列位置包含可側載的執行階段。

| 套件中的路徑 | 內容 |
| - | - |
| `native\bin\x64\` | 適用於 64 位元 PC 遊戲的 `GameInputRedist.dll` 和 `GameInputRawInputProxy.exe` |
| `native\bin\x86\` | 適用於 32 位元 PC 遊戲的 `GameInputRedist.dll` 和 `GameInputRawInputProxy.exe` |
| `native\bin\arm64\` | 適用於 Arm64 PC 遊戲的 `GameInputRedist.dll` 和 `GameInputRawInputProxy.exe` |
| `native\bin\xbox\` | 適用於 XBOX 主機的 `GameInputRedist.dll` |

NuGet 套件不會將這些檔案複製到您的建置輸出。請在您的建置或封裝流程中新增一個步驟，將適用於目標平台和架構的檔案複製到遊戲的可執行檔旁邊。

在 PC 上，也請將 `GameInputRawInputProxy.exe` 部署在與 `GameInputRedist.dll` 相同的目錄中。側載的執行階段會使用此協助程式處理序來接收鍵盤和滑鼠輸入。側載的執行階段只會使用位於其旁邊的 Proxy，絕不會使用已安裝之可轉散發套件中的 Proxy。如果缺少 Proxy，執行階段會改為在遊戲的處理序中接收鍵盤和滑鼠輸入。

> [!WARNING]
>
> PC 和 XBOX 執行階段具有相同的檔案名稱。請確定您部署的是符合目標平台的複本。如果部署了錯誤的複本，`GameInputCreate` 會失敗並傳回 `HRESULT_FROM_WIN32(ERROR_EXE_MACHINE_TYPE_MISMATCH)` (0x800700D8)。

## 執行階段的選取方式

您不需要變更程式碼即可使用側載的執行階段。請連結 NuGet 套件中的 `gameinput.lib`，並如常呼叫 [GameInputCreate](https://docs.xbox.com/zh-TW/reference/input/gameinput/functions/gameinputcreate.md)。第一次呼叫 `GameInputCreate` 時，`gameinput.lib` 中的載入器會在下列位置尋找 GameInput 執行階段：

1. 系統目錄中的內建執行階段 `GameInput.dll`。
2. 系統目錄或 GameInput 可轉散發套件安裝目錄中的已安裝可轉散發執行階段 `GameInputRedist.dll`。
3. 遊戲可執行檔目錄中的側載執行階段 `GameInputRedist.dll`。

載入器會使用檔案版本最高的執行階段。如果兩個執行階段的版本相同，則側載的執行階段優先於已安裝的可轉散發套件，而已安裝的可轉散發套件優先於內建執行階段。

在 PC 上，當載入了側載的執行階段，且系統上已安裝較新的 GameInput 執行階段時，側載的執行階段會將所有呼叫轉送至較新的已安裝執行階段。因此，側載的執行階段可作為最低版本：您的遊戲一律會使用您隨附的版本或較新的已安裝版本。遊戲仍會被視為側載，且下一節中的限制仍然適用。

## 限制

在 PC 上，某些 GameInput 功能依賴只有在安裝 GameInput 可轉散發套件時才會存在的元件，例如管理輸入焦點的 GameInput 服務。當您的遊戲在 PC 上使用側載的執行階段時，會套用下列限制。這些限制不適用於 XBOX 主機。

* 以 `true` 呼叫 [IGameInput::EnableBackgroundInput](https://docs.xbox.com/zh-TW/reference/input/gameinput/interfaces/igameinput/methods/igameinput_enablebackgroundinput.md) 不會有任何作用，因為啟用背景輸入也會宣告系統按鈕，而側載的執行階段無法宣告系統按鈕。
* 輸入焦點不是由 GameInput 服務管理，因此 GameInput 不會一致地根據遊戲是否具有焦點來篩選輸入。視裝置而定，您的遊戲在沒有焦點時不一定會收到輸入。如果您的遊戲依賴一致的焦點行為，請在處理輸入之前檢查遊戲是否具有焦點，或安裝 GameInput 可轉散發套件。
* 在 API 版本 v1 到 v3 中，`IGameInput::SetFocusPolicy` 只接受 `GameInputDefaultFocusPolicy` 和 `GameInputEnableBackgroundInput`。其他焦點原則 (包括任何旗標組合) 都會被忽略。
* 在 API 版本 v1 到 v3 中，`IGameInput::RegisterSystemButtonCallback` 會失敗並傳回 `GAMEINPUT_E_FEATURE_REQUIRES_INSTALL` (0x838AD02B)。在 API 版本 v4 中，系統按鈕會在 `GameInputKindSystemButton` 種類的讀數中回報，這可搭配側載的執行階段運作。如需詳細資訊，請參閱 [IGameInputReading::GetSystemButtonState](https://docs.xbox.com/zh-TW/reference/input/gameinput/interfaces/igameinputreading/methods/igameinputreading_getsystembuttonstate.md)。

## 建議

* 針對 GameInput 標頭、`gameinput.lib` 和側載的執行階段，使用相同版本的 NuGet 套件。
* 在已安裝和未安裝 GameInput 可轉散發套件的情況下，都要測試您的遊戲。
* 如果您的遊戲在 PC 上需要背景輸入或一致的焦點行為，請安裝 GameInput 可轉散發套件來取代側載執行階段，或與其搭配使用。如需詳細資訊，請參閱[透過 NuGet 在 PC 和主機上使用 GameInput](https://docs.xbox.com/zh-TW/build/core-features/common/input/overviews/input-nuget.md)。

## 另請參閱

[透過 NuGet 在 PC 和主機上使用 GameInput](https://docs.xbox.com/zh-TW/build/core-features/common/input/overviews/input-nuget.md)\
[XBOX 主機上的 GameInput](https://docs.xbox.com/zh-TW/build/core-features/common/input/overviews/input-xbox.md)\
[GameInput API 版本控制](https://docs.xbox.com/zh-TW/build/core-features/common/input/overviews/input-versioning.md)\
[GameInput 基本概念](https://docs.xbox.com/zh-TW/build/core-features/common/input/overviews/input-fundamentals.md)\
[GameInput API 參考](https://docs.xbox.com/zh-TW/reference/input/gameinput/gameinput_members.md)


## Related topics

- [XBOX 主機上的 GameInput](https://docs.xbox.com/zh-TW/build/core-features/common/input/overviews/input-xbox.md)
- [GameInput API 版本控制](https://docs.xbox.com/zh-TW/build/core-features/common/input/overviews/input-versioning.md)
- [IGameInput::EnableBackgroundInput](https://docs.xbox.com/zh-TW/reference/input/gameinput/interfaces/igameinput/methods/igameinput_enablebackgroundinput.md)
- [透過 NuGet 在 PC 和主機上使用 GameInput](https://docs.xbox.com/zh-TW/build/core-features/common/input/overviews/input-nuget.md)
- [在單一應用程式中使用多個 GameInput API 版本](https://docs.xbox.com/zh-TW/build/core-features/common/input/overviews/input-version-interop.md)
