訓練
模組
了解您可用來引導遊戲和平台開發的基本協助工具最佳做法原則。 另請了解如何使用 Xbox 協助工具指導方針,這是可供開發人員使用的一項免費線上資源,而此資源提供依特定遊戲元素和功能所組織的最佳做法完整清單。
Windows Vista 可藉由包含遊戲總管來改善 Windows 上遊戲的用戶體驗。 遊戲總管會在 Windows Vista [開始] 選單中公開為 [遊戲] 資料夾,並提供存取遊戲的中央位置。
從 DirectX SDK 的 2009 年 3 月版本開始,新的遊戲定義檔 (GDF) 架構可用來支援 Windows 7、遊戲提供者和 RSS 摘要和 IGameExplorer2 中的功能。 IGameExplorer2 是 Windows 7 上的新介面,可簡化遊戲與遊戲總管整合的程式。
本文概述使用新的 GDF 架構,在 Windows Vista 和 Windows 7 上使用遊戲總管和家長控制來註冊遊戲的程式。
注意
Windows 10 版本 1803 和更新版本中無法使用遊戲總管。
內容:
您必須先建立遊戲定義檔 (GDF) 才能將遊戲整合到遊戲總管中。 GDF 是一個 XML 檔案,其中包含描述遊戲的元數據。 在 DirectX SDK 2009 年 3 月版本中,遊戲提供者、RSS 摘要和遊戲工作的區段已新增至 GDF 架構。 若要使用本文中的指示,您必須使用此新的 GDF 格式來建立 GDF 檔案。
Microsoft 提供一個工具,可在 DirectX SDK、遊戲定義檔案編輯器中撰寫 GDF,以簡化此建立程式。 此工具也可協助您建立 GDF 的當地語系化版本。
一旦撰寫並當地語系化 GDF,它就必須封裝在二進位檔的資源區段中(可執行檔或 DLL),以及遊戲的縮圖和圖示。 GDF 包含與遊戲相關聯的所有元數據,包括遊戲的評等。 Windows 家長監護會使用遊戲的評等,讓家長控制遊戲的存取權。 包含 GDF 的二進位文件必須使用有效的 Authenticode 憑證進行數字簽署;否則,遊戲總管和家長控制系統會忽略遊戲的評等,因為沒有認證就無法信任評等資訊。 如需使用 Authenticode 簽署程式代碼的詳細資訊,請參閱 Game 開發人員的 Authenticode 簽署。
為了簡化遊戲總管整合,GameUXInstallHelper 範例提供可在 Windows XP、Windows Vista 和 Windows 7 上呼叫的常見 API。 其設計目的是使用 InstallShield 和 Wise 安裝系統的腳本,以及 MSI 自定義動作和自定義安裝工具。 此範例 DLL 內會處理作業系統的偵測,因此呼叫端不需要擔心用戶端是否執行 Windows XP、Windows Vista 或 Windows 7。
此 DLL 匯出的函式如下:
GameExplorerInstallW
向遊戲總管註冊遊戲,並提供 GDF 二進位檔的路徑、安裝遊戲所在資料夾的完整路徑,以及安裝範圍。
GameExplorerInstallA
向遊戲總管註冊遊戲;GameExplorerInstallW 的 ANSI 版本。
GameExplorerUninstallW
在 GDF 二進位檔的路徑下,從遊戲總管的註冊中移除遊戲。
GameExplorerUninstallA
從遊戲總管的註冊中移除遊戲;GameExplorerUninstallW 的 ANSI 版本。
GameExplorerSetMSIProperties
設定 MSI 延後自定義安裝動作的 CustomActionData 屬性。 本文稍後會詳細說明此函式的使用方式。
GameExplorerInstallUsingMSI
將遊戲新增至遊戲總管;用於 MSI 自定義動作安裝期間。
GameExplorerUninstallUsingMSI
從遊戲總管移除遊戲;用於 MSI 自定義動作安裝期間。
這些函式會在 GameUXInstallHelper.h 標頭中進一步說明。
將 GDF 和相關檔案新增至二進位資源之後,就可以將遊戲與遊戲總管整合。 使用 GameUXInstallHelper 可簡化整合程式。 若要向遊戲總管註冊遊戲,請使用 GDF 二進位檔的路徑呼叫 GameExplorerInstall 、遊戲安裝所在資料夾的完整路徑,以及安裝範圍。 若要移除遊戲的註冊,請使用 GDF 二進位檔的路徑呼叫 GameExplorerUninstall 。
請注意,移除程式只會移除一個唯一的安裝。 如果遊戲已安裝多次,則必須針對每個唯一安裝重複此程式。
遊戲總管工作會出現在遊戲總管中項目的內容功能表中。 工作分為播放工作和支援工作。 播放工作會將遊戲啟動為特定模式,而支援工作則提供任何其他用途,包括連結至網站。
在 Windows Vista 中,工作只是位於特定資料夾中的快捷方式。 播放工作和支援工作會儲存在具有對應名稱 PlayTasks 和 SupportTasks 的資料夾中。 GameUXInstallHelper 可以從 GDF 二進位檔讀取遊戲的工作資訊,並自動建立所有快捷方式。
在 Windows 7 中,不需要工作的快捷方式,因為遊戲總管會直接從 GDF 二進位檔取得所有工作資訊。
使用 GameUXInstallHelper 範例,即可從 InstallShield 的 InstallScript 呼叫遊戲總管 API。 與 InstallShield 整合所需的步驟如下:
在 InstallShield 編輯器中開啟 InstallScript 專案。
將 GameUXInstallHelper.dll 新增至要安裝至目標目錄的專案。
若要將 GameUXInstallHelper.dll 新增至 InstallScript 專案:
在 [ 安裝設計工具] 索引卷標上,按下左側瀏覽窗格中的 [ 應用程式數據 ]。
按兩下 [檔案和資料夾],然後流覽來源電腦資料夾中的 GameUXInstallerHelper.dll。
GameUXInstallerHelper.dll 的預設位置是 DirectX SDK root\Samples\C++\Misc\Bin\x86。
在 [目的地計算機的資料夾] 下,按兩下 [ 應用程式目標資料夾]。
將 GameUXInstallerHelper.dll 從 來源電腦的檔案 拖曳至 目的地電腦的檔案。
在 InstallScript 總管中,按兩下呼叫 DLL 函式的 InstallScript 檔案 (通常是 setup.rul)。
將下列 InstallScript 貼到 檔案中:
typedef GUID
begin
LONG Data1;
SHORT Data2;
SHORT Data3;
CHAR Data4(8);
end;
prototype LONG GameUXInstallHelper.GameExplorerInstallW(WSTRING, WSTRING, NUMBER);
prototype LONG GameUXInstallHelper.GameExplorerUninstallW(WSTRING);
function OnMoved()
WSTRING gdfbin[256];
WSTRING path[256];
NUMBER scope;
begin
if !MAINTENANCE then
UseDLL( TARGETDIR ^ "GameUXInstallHelper.dll" );
UseDLL( WINSYSDIR ^ "OLE32.dll" );
path = TARGETDIR;
gdfbin = TARGETDIR ^ "bin\\ExampleGame.exe"; // TODO: Change this to point to binary containing the GDF
if ALLUSERS == 1 then
scope = 3;
else
scope = 2;
endif;
GameUXInstallHelper.GameExplorerInstallW( gdfbin, path, scope);
UnUseDLL( TARGETDIR ^ "GameUXInstallHelper.dll" );
UnUseDLL( WINSYSDIR ^ "OLE32.dll" );
endif;
end;
function OnMoving()
WSTRING gdfbin[256];
begin
if MAINTENANCE && UNINST != "" then
UseDLL( TARGETDIR ^ "GameUXInstallHelper.dll" );
UseDLL( WINSYSDIR ^ "OLE32.dll" );
gdfbin = path ^ "bin\\ExampleGame.exe"; // TODO: Change this to point to binary containing the GDF
GameUXInstallHelper.GameExplorerUninstallW(gdfbin);
UnUseDLL( TARGETDIR ^ "GameUXInstallHelper.dll" );
UnUseDLL( WINSYSDIR ^ "OLE32.dll" );
endif;
end;
以下是使用 MSI 自訂動作呼叫遊戲總管 API 所需步驟的高階描述:
下列指示會詳細說明此程式,其描述可使用 MSI 編輯器完成的程式,例如平臺 SDK 中找到的 Orca 編輯器。 有些 MSI 編輯器有精靈,可簡化其中一些設定步驟。
設定 MSI 套件以與遊戲總管整合
在 Orca 中開啟 MSI 套件。
將下表中顯示的數據列新增至 MSI 套件中的二進位 數據表。
名稱 | 資料 |
---|---|
GAMEUX | DLL\GameUXInstallHelper.dll 的檔案路徑 |
注意
此檔案會內嵌在 MSI 套件中,因此每次重新編譯 GameUXInstallHelper.dll 時,都必須執行此步驟。
將下表中顯示的數據列新增至 MSI 套件中的 CustomAction 數據表。
動作 | 類型 | 來源 | Target |
---|---|---|---|
GameUXSetMSIProperties | msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 | GAMEUX | SetMSIGameExplorerProperties |
GameUXAddAs 管理員 | msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 | GAMEUX | AddToGameExplorerUsingMSI |
GameUXAddAsCurUser | msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript = 1089 | GAMEUX | AddToGameExplorerUsingMSI |
GameUXRollBackAddAs 管理員 | msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeRollback + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3393 | GAMEUX | RemoveFromGameExplorerUsingMSI |
GameUXRollBackAddAsCurUser | msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeRollback + msidbCustomActionTypeInScript = 1345 | GAMEUX | RemoveFromGameExplorerUsingMSI |
GameUXRemoveAs 管理員 | msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 | GAMEUX | RemoveFromGameExplorerUsingMSI |
GameUXRemoveAsCurUser | msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript = 1089 | GAMEUX | RemoveFromGameExplorerUsingMSI |
GameUXRollBackRemoveAs 管理員 | msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeRollback + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3393 | GAMEUX | AddToGameExplorerUsingMSI |
GameUXRollBackRemoveAsCurUser | msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeRollback + msidbCustomActionTypeInScript = 1345 | GAMEUX | AddToGameExplorerUsingMSI |
將下表中針對 Action、Condition 和 Sequence 顯示的值新增至 MSI 套件中的 InstallExecuteSequence 數據表。
動作 | Condition | 序列 | 備註 |
---|---|---|---|
GameUXSetMSIProperties | 1015 | 序號會在 CostFinalize 之後不久放置動作。 | |
GameUXAddAs 管理員 | 未安裝且 ALLUSERS | 4003 | 此自定義動作只會在所有使用者的全新安裝期間發生。 序號會將動作放在 InstallFiles 之後和復原之後。 |
GameUXAddAsCurUser | 未安裝且未安裝 ALLUSERS | 4004 | 此自定義動作只會在目前使用者的全新安裝期間發生。 序號會將動作放在 InstallFiles 之後和復原之後。 |
GameUXRollBackAddAs 管理員 | 未安裝且 ALLUSERS | 4001 | 只有在取消所有使用者的全新安裝時,才會發生此自定義動作。 序號會將動作放在 InstallFiles 之後,以及 [新增自定義動作] 之前。 |
GameUXRollBackAddAsCurUser | 未安裝且未安裝 ALLUSERS | 4002 | 只有在取消目前使用者的全新安裝時,才會發生此自定義動作。 序號會將動作放在 InstallFiles 之後,以及 [新增自定義動作] 之前。 |
GameUXRemoveAs 管理員 | REMOVE~=“ALL” AND ALLUSERS | 3452 | 此自定義動作只會在移除所有用戶期間發生。 序號會將動作直接放在 RemoveFiles 和復原之後。 |
GameUXRemoveAsCurUser | REMOVE~=“ALL” AND NOT ALLUSERS | 3453 | 此自定義動作只會在移除目前用戶期間發生。 序號會將動作直接放在 RemoveFiles 和復原之後。 |
GameUXRollBackRemoveAs 管理員 | REMOVE~=“ALL” AND ALLUSERS | 3450 | 只有在取消所有使用者的移除時,才會發生此自定義動作。 序號會將動作直接放在 RemoveFiles 之前,以及 Remove 自定義動作之前。 |
GameUXRollBackRemoveAsCurUser | REMOVE~=“ALL” AND NOT ALLUSERS | 3451 | 只有在取消目前使用者的移除時,才會發生此自定義動作。 序號會將動作直接放在 RemoveFiles 之前,以及 Remove 自定義動作之前。 |
將下表中顯示的數據列新增至 MSI 套件中的 Property 數據表。
屬性 | 值 |
---|---|
RelativePathToGDF | 包含 GDF 之二進位檔的相對檔案路徑\名稱 |
注意
路徑所指定的位置相對於安裝路徑所指定的位置。 例如 bin\GDF.dll。
儲存 MSI 套件。
如需 MSI 套件和 Windows Installer 的詳細資訊,請參閱 Windows Installer。
以下是呼叫遊戲總管 API 時協助偵錯問題的一些秘訣:
建置 GameUXInstallHelper 範例解決方案將會建立 GameUXInstallHelper.dll 和 GDFInstall.exe。 GDFInstall.exe 是使用 GameUXInstallHelper.dll 的範例應用程式。 如果您想要從遊戲總管安裝或移除 GDF 二進位檔,執行 GDFInstall.exe 將會提示您。 您可以將 GDF 二進位檔當做第一個命令行 arg 傳遞至 GDFInstall.exe,以測試 GDF 二進位檔。
如果您沒有 GDF 二進位檔或無法安裝,請嘗試在 DirectX SDK 中使用範例 GDF。 GDFExampleBinary 範例位於 DirectX SDK 中,而且只是只包含 GDF 檔案的 DLL。 來源中也包含其 GDFMaker 專案。 您可以使用 GDFInstall.exe 來建置並進行測試。 您也可以比較其 XML 與 ,以精確找出問題所在位置。
如果遊戲已安裝在遊戲總管中,則後續呼叫 IGameExplorer::AddGame 將會傳回E_FAIL,因此在測試之前,請確定未安裝您的遊戲。 如果您只為目前使用者安裝 GDF,然後嘗試為所有使用者安裝 GDF,也會套用此動作。 您必須先從目前的使用者移除遊戲,IGameExplorer ::AddGame 才會成功。
如果您執行 GDFInstall.exe 列舉,範例應用程式會進入不同的模式,以列舉所有已安裝的遊戲總管遊戲,並提示您移除它們。 您也可以在 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\GameUX 中瀏覽並搜尋登錄,以確定您的遊戲未針對系統上的另一位使用者安裝。 不過,請勿針對任何其他用途改變這些登錄設定,因為它們不保證在未來版本的操作系統中保持相容。
如果您已提供評等,但在遊戲總管中看不到該評等,請確定您已使用 Authenticode 簽署包含評等的可執行檔或 DLL 檔案。 遊戲總管會忽略未簽署檔案中的評等資訊。 如需 Authenticode 的詳細資訊,請參閱 遊戲開發人員的 Authenticode 簽署。
請確定您在提供家長監護的 Windows Vista 版本上測試家長控制:家用基本版、家庭 進階版 或 Ultimate。 Windows Vista Business 和 Windows Vista Enterprise 不會提供家長監護,不過,如果您要在 Windows Vista Ultimate 上進行測試,而且測試計算機已加入網域,您必須變更組策略設定,讓家長監護保持可見。 若要這樣做,請參閱 開始使用遊戲總管。
如果您指定的支援工作未出現在 [遊戲總管] 中,請確認它們是所有網頁連結。 任何其他快捷方式工作都必須建立為播放工作。 本文稍早在遊戲總管工作中涵蓋工作。
GDFTrace.exe 是在 DirectX SDK 中找到的工具。 您可以在 GDF 二進位檔上執行 GDFTrace.exe,它會針對每個支援的語言輸出二進位檔中包含的所有 GDF 元數據,以進行快速驗證。 它也會顯示任何有關遺失或過時資訊的警告。
Windows Vista 中的遊戲總管提供簡單、可自定義的方式,將遊戲呈現給 Windows Vista 的使用者,但也要求您在安裝程式期間向系統註冊遊戲。 GameUXInstallHelper 範例可大幅簡化開發人員的此程式。
訓練
模組
了解您可用來引導遊戲和平台開發的基本協助工具最佳做法原則。 另請了解如何使用 Xbox 協助工具指導方針,這是可供開發人員使用的一項免費線上資源,而此資源提供依特定遊戲元素和功能所組織的最佳做法完整清單。