ゲーム開発者向け Windows ゲーム エクスプローラー
Windows Vista では、ゲーム エクスプローラーを含めることで、Windows でのゲームのユーザー エクスペリエンスが向上します。 ゲーム エクスプローラーは、Windows Vista のスタート メニューでゲーム フォルダーとして公開され、ゲームにアクセスするための中心的な場所を提供します。
DirectX SDK の 2009 年 3 月リリース以降、Windows 7、ゲーム プロバイダーと RSS フィード、および IGameExplorer2 の機能をサポートするために、新しいゲーム定義ファイル (GDF) スキーマが使用されます。 IGameExplorer2 は、ゲームをゲーム エクスプローラーと統合するプロセスを簡略化する Windows 7 の新しいインターフェイスです。
この記事では、新しい GDF スキーマを使用して、ゲームをゲーム エクスプローラーと Windows Vista および Windows 7 の保護者によるコントロールに登録するプロセスについて説明します。
手記
ゲーム エクスプローラーは、Windows 10 バージョン 1803 以降では使用できません。
内容:
- 前提条件の
- インストーラー との統合の
- 統合プロセスの
- Games Explorer タスク
- InstallScript への統合
- MSI パッケージへの統合
-
デバッグのヒント
- サンプル コード を使用したテストの
- ゲームが正しく削除されたことを確認
- Authenticode を使用して必ず署名してください
- 保護者によるコントロールが使用できることを確認
- タスクの種類が正しいことを確認
- GDF バイナリ のデータを確認する
- の概要
前提 条件
ゲームをゲーム エクスプローラーに統合するには、ゲーム定義ファイル (GDF) を作成する必要があります。 GDF は、ゲームを記述するメタデータを含む XML ファイルです。 DirectX SDK の 2009 年 3 月リリースでは、ゲーム プロバイダー、RSS フィード、ゲーム タスクのセクションが GDF スキーマに追加されました。 この記事の手順を使用するには、この新しい GDF 形式を使用して GDF ファイルを作成する必要があります。
Microsoft では、DirectX SDK のゲーム定義ファイル エディターで GDF を作成して、この作成プロセスを容易にするツールを提供しています。 このツールは、GDF のローカライズされたバージョンを作成するのにも役立ちます。
GDF を作成してローカライズしたら、ゲームのサムネイルとアイコンと共に、バイナリ ファイル (実行可能ファイルまたは DLL) のリソース セクション内にカプセル化する必要があります。 GDF には、ゲームに関連付けられているすべてのメタデータ (ゲームの評価を含む) が含まれます。 Windows 保護者による制御では、ゲームのレーティングを使用して、保護者がゲームへのアクセスを制御できるようにします。 GDF を含むバイナリ ファイルは、有効な Authenticode 証明書を使用してデジタル署名する必要があります。それ以外の場合、ゲーム エクスプローラーと保護者による管理システムは、レーティング情報をサーティフィケーションなしでは信頼できないため、ゲームのレーティングを無視します。 Authenticode を使用したコードの署名の詳細については、「ゲーム開発者向けの Authenticode 署名 」を参照してください。
インストーラーとの統合
GameUXInstallHelper サンプルでは、ゲーム エクスプローラーの統合を簡略化するために、Windows XP、Windows Vista、および Windows 7 で呼び出すことができる一般的な API を提供しています。 InstallShield と Wise Installation System のスクリプト、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 を使用すると、統合プロセスが簡略化されます。 ゲームをゲーム エクスプローラーに登録するには、GameExplorerInstall を呼び出し、GDF バイナリへのパス、ゲームがインストールされているフォルダーへの完全なパス、インストール スコープを指定します。 ゲームの登録を削除するには、GDF バイナリへのパス GameExplorerUninstall を呼び出します。
削除プロセスでは、一意のインストールが 1 つだけ削除されることに注意してください。 ゲームが複数回インストールされている場合は、一意のインストールごとにこのプロセスを繰り返す必要があります。
ゲーム エクスプローラーのタスク
ゲーム エクスプローラーのタスクは、ゲーム エクスプローラーの項目のコンテキスト メニューに表示されます。 タスクは、プレイ タスクとサポート タスクに分かれています。 プレイ タスクは特定のモードでゲームを起動しますが、サポート タスクは Web サイトへのリンクなど、他の目的に役立ちます。
Windows Vista では、タスクは単に特定のフォルダーにあるショートカットです。 Play タスクとサポート タスクは、PlayTasks と SupportTasks という名前のフォルダーに格納されます。 GameUXInstallHelper は、GDF バイナリ ファイルからゲームのタスク情報を読み取り、すべてのショートカットを自動的に作成できます。
Windows 7 では、Games Explorer は GDF バイナリ ファイルからすべてのタスク情報を直接取得するため、タスクへのショートカットは必要ありません。
InstallScript への統合
InstallShield の InstallScript から Games Explorer API を呼び出すことは、GameUXInstallHelper サンプルを使用して簡単に行うことができます。 InstallShield と統合するために必要な手順は次のとおりです。
InstallShield エディターで InstallScript プロジェクトを開きます。
ターゲット ディレクトリにインストールするプロジェクトに GameUXInstallHelper.dll を追加します。
InstallScript プロジェクトに GameUXInstallHelper.dll を追加するには:
[インストール デザイナーの] タブで、左側のナビゲーション ウィンドウで [アプリケーション データ クリックします。
[ファイルとフォルダー] をクリックし、ソース コンピューターのフォルダー で参照して、ソース コンピューターのファイル GameUXInstallerHelper.dll を見つけます。
GameUXInstallerHelper.dll の既定の場所は DirectX SDK root\Samples\C++\Misc\Bin\x86 です。
[ターゲット コンピューターのフォルダー ] で、[アプリケーション ターゲット フォルダー クリックします。
GameUXInstallerHelper.dll をソース コンピューターのファイル から Destination コンピューターのファイルにドラッグします。
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 パッケージへの統合
MSI カスタム アクションを使用して Games Explorer API を呼び出すために必要な手順の概要を次に示します。
- GDF バイナリへの相対パスを含む "RelativePathToGDF" という MSI プロパティ テーブルにプロパティを追加します。
- CostFinalize アクションの後、すぐにカスタム アクションで SetMSIGameExplorerProperties GameUXInstallHelper DLL 関数 呼び出して、他のカスタム アクションに適切な MSI プロパティを設定します。
- インストール時に、AddToGameExplorerUsingMSI GameUXInstallHelper DLL 関数を呼び出す InstallFiles アクションの後に遅延カスタム アクションをトリガーします。 インストールがすべてのユーザーに対する場合、カスタム アクションは msidbCustomActionTypeNoImpersonate フラグを設定する必要があります。それ以外の場合は、このフラグを設定しないでください。 そのため、ほぼ同じ 2 つのカスタム アクション (GameUXAddAsAdmin と GameUXAddAsCurUser) が定義されています。
- インストールを削除したら、RemoveFromGameExplorerUsingMSI GameUXInstallHelper DLL 関数を呼び出す RemoveFiles アクションの前に遅延カスタム アクションをトリガーします。 インストールがすべてのユーザーに対して行われた場合、カスタム アクションは msidbCustomActionTypeNoImpersonate フラグを設定する必要があります。それ以外の場合は、このフラグを設定しないでください。 そのため、ほぼ同じ 2 つのカスタム アクション (GameUXRemoveAsAdmin と GameUXRemoveAsCurUser) が定義されています。
- ロールバック カスタム アクションを定義して、これらのカスタム アクションのいずれかが既に発生した後にユーザーがインストールまたは削除を取り消すケースを処理します。 これにより、GameUXRollBackAddAsAdmin、GameUXRollBackAddAsCurUser、GameUXRollBackRemoveAsAdmin、GameUXRollBackRemoveAsCurUser の 4 つのカスタム アクションが追加されます。
この手順の詳細については、次の手順で説明します。この手順では、プラットフォーム SDK で見つかった Orca エディターなどの MSI エディターを使用して実行できるプロセスについて説明します。 一部の MSI エディターには、これらの構成手順の一部を簡略化するウィザードがあります。
Games Explorer と統合するために MSI パッケージを構成するには
Orca で MSI パッケージを開きます。
次の表に示す行を、MSI パッケージの Binary テーブルに追加します。
名前 データ GAMEUX DLL\GameUXInstallHelper.dll へのファイル パス 手記
このファイルは MSI パッケージに埋め込まれるので、GameUXInstallHelper.dll再コンパイルするたびにこの手順を実行する必要があります。
次の表に示す行を、MSI パッケージの CustomAction テーブルに追加します。
アクション 種類 源 ターゲット GameUXSetMSIProperties msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue = 65 GAMEUX SetMSIGameExplorerProperties GameUXAddAsAdmin msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 GAMEUX AddToGameExplorerUsingMSI GameUXAddAsCurUser msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript = 1089 GAMEUX AddToGameExplorerUsingMSI GameUXRollBackAddAsAdmin msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeRollback + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3393 GAMEUX RemoveFromGameExplorerUsingMSI GameUXRollBackAddAsCurUser msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeRollback + msidbCustomActionTypeInScript = 1345 GAMEUX RemoveFromGameExplorerUsingMSI GameUXRemoveAsAdmin msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3137 GAMEUX RemoveFromGameExplorerUsingMSI GameUXRemoveAsCurUser msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeInScript = 1089 GAMEUX RemoveFromGameExplorerUsingMSI GameUXRollBackRemoveAsAdmin msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeRollback + msidbCustomActionTypeInScript + msidbCustomActionTypeNoImpersonate = 3393 GAMEUX AddToGameExplorerUsingMSI GameUXRollBackRemoveAsCurUser msidbCustomActionTypeDll + msidbCustomActionTypeBinaryData + msidbCustomActionTypeContinue + msidbCustomActionTypeRollback + msidbCustomActionTypeInScript = 1345 GAMEUX AddToGameExplorerUsingMSI 次の表のアクション、条件、シーケンスに表示される値を、MSI パッケージの InstallExecuteSequence テーブルに追加します。
アクション 条件 順序 筆記 GameUXSetMSIProperties 1015 シーケンス番号は、CostFinalize の直後にアクションを配置します。 GameUXAddAsAdmin インストールされていないと ALLUSERS 4003 このカスタム アクションは、すべてのユーザーの新規インストール中にのみ行われます。 シーケンス番号は、InstallFiles の後とロールバック後にアクションを配置します。 GameUXAddAsCurUser インストールされておらず、ALLUSERS ではない 4004 このカスタム アクションは、現在のユーザーの新規インストール時にのみ発生します。 シーケンス番号は、InstallFiles の後とロールバック後にアクションを配置します。 GameUXRollBackAddAsAdmin インストールされていないと ALLUSERS 4001 このカスタム アクションは、すべてのユーザーの新規インストールが取り消された場合にのみ発生します。 シーケンス番号は、InstallFiles の後、およびカスタムアクションの追加の前にアクションを配置します。 GameUXRollBackAddAsCurUser インストールされておらず、ALLUSERS ではない 4002 このカスタム アクションは、現在のユーザーの新規インストールのみが取り消された場合にのみ発生します。 シーケンス番号は、InstallFiles の後、およびカスタムアクションの追加の前にアクションを配置します。 GameUXRemoveAsAdmin REMOVE~="ALL" と ALLUSERS 3452 このカスタム アクションは、すべてのユーザーの削除中にのみ発生します。 シーケンス番号は、RemoveFiles の直前とロールバック後にアクションを配置します。 GameUXRemoveAsCurUser REMOVE~="ALL" AND NOT ALLUSERS 3453 このカスタム アクションは、現在のユーザーの削除中にのみ発生します。 シーケンス番号は、RemoveFiles の直前とロールバック後にアクションを配置します。 GameUXRollBackRemoveAsAdmin REMOVE~="ALL" と ALLUSERS 3450 このカスタム アクションは、すべてのユーザーの削除が取り消された場合にのみ発生します。 シーケンス番号は、RemoveFiles の直前と Remove カスタム アクションの前にアクションを配置します。 GameUXRollBackRemoveAsCurUser REMOVE~="ALL" AND NOT ALLUSERS 3451 このカスタム アクションは、現在のユーザーの削除が取り消された場合にのみ発生します。 シーケンス番号は、RemoveFiles の直前と Remove カスタム アクションの前にアクションを配置します。 次の表に示す行を MSI パッケージの Property テーブルに追加します。
財産 価値 RelativePathToGDF GDF を含むバイナリ ファイル\n相対ファイル パス 手記
パスで指定された場所は、インストール パスで指定された場所を基準とします。 たとえば、bin\GDF.dllです。
MSI パッケージを保存します。
MSI パッケージと Windows インストーラーの詳細については、「Windows インストーラーの」を参照してください。
デバッグのヒント
ゲーム エクスプローラー API を呼び出すときの問題をデバッグするのに役立つヒントを次に示します。
サンプル コードを使用したテスト
GameUXInstallHelper サンプル ソリューションをビルドすると、GameUXInstallHelper.dll と GDFInstall.exeが作成されます。 GDFInstall.exe は、GameUXInstallHelper.dllを使用するサンプル アプリケーションです。 GDFInstall.exe を実行すると、ゲーム エクスプローラーから GDF バイナリをインストールまたは削除するかどうかを確認するメッセージが表示されます。 GDF バイナリ ファイルをテストするには、最初のコマンド ライン引数として GDFInstall.exe渡します。
GDF バイナリがない場合、またはインストールに失敗した場合は、DirectX SDK でサンプルの GDF を使用してみてください。 GDFExampleBinary サンプルは DirectX SDK にあり、GDF ファイルのみを含む DLL です。 ソースには、その GDFMaker プロジェクトも含まれます。 GDFInstall.exeを使用してビルドしてテストできます。 また、その XML を自分の XML と比較して、問題の正確な場所を特定することもできます。
ゲームが正しく削除されたことを確認する
ゲームがゲーム エクスプローラーに既にインストールされている場合は、その後の IGameExplorer::AddGame 呼び出しによってE_FAILが返されるため、テストする前にゲームがインストールされていないことを確認します。 これは、現在のユーザーのみに対して GDF をインストールし、すべてのユーザーに対して GDF をインストールしようとした場合にも適用されます。 IGameExplorer::AddGame が成功 前に、現在のユーザーからゲームを削除する必要があります。
列挙型 GDFInstall.exe 実行すると、サンプル アプリケーションは別のモードに入り、インストールされているすべての Games Explorer ゲームを列挙し、それらを削除するように求められます。 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\GameUX のレジストリを参照して検索して、ゲームがシステムに別のユーザー用にインストールされていないことを確認することもできます。 ただし、これらのレジストリ設定は、将来のバージョンのオペレーティング システムで互換性を維持することが保証されていないため、他の目的で変更しないでください。
Authenticode を使用して必ず署名してください
評価を指定したが、ゲーム エクスプローラーに表示されない場合は、Authenticode を使用して、評価を含む実行可能ファイルまたは DLL ファイルに署名していることを確認します。 ゲーム エクスプローラーでは、署名されていないファイル内の評価情報は無視されます。 Authenticode の詳細については、「Authenticode Signing for Game Developers」を参照してください。
保護者によるコントロールが使用可能であることを確認する
保護者によるコントロールを提供する Windows Vista のエディションで保護者によるコントロールをテストしていることを確認します。Home Basic、Home Premium、Ultimate。 Windows Vista Business と Windows Vista Enterprise では保護者による制御は提供されませんが、Windows Vista Ultimate でテストしていて、テスト コンピューターがドメインに参加している場合は、グループ ポリシー設定を変更して保護者による制御を表示する必要があります。 これを行うには、「ゲーム エクスプローラーの概要」を参照してください。
タスクの種類が正しいことを確認する
Games Explorer に表示されないサポート タスクを指定した場合は、それらがすべて Web リンクであることを確認します。 その他のショートカット タスクは、プレイ タスクとして作成する必要があります。 タスクについては、この記事の「Games Explorer タスク」で説明しました。
GDF バイナリ内のデータを確認する
GDFTrace.exe は、DirectX SDK に含まれるツールです。 GDF バイナリで GDFTrace.exe を実行すると、サポートされているすべての言語のバイナリに含まれるすべての GDF メタデータが出力され、迅速な検証が可能になります。 また、不足している情報や古い情報に関する警告も表示されます。
概要
Windows Vista のゲーム エクスプローラーは、Windows Vista のユーザーにゲームを表示するための簡単でカスタマイズ可能な方法を提供しますが、インストール プロセス中にゲームをシステムに登録する必要もあります。 GameUXInstallHelper サンプルは、開発者にとってこのプロセスを大幅に簡略化します。