次の方法で共有


ゲーム開発者向けの Windows ゲーム エクスプローラー

Windows Vista では、ゲーム エクスプローラーを含めることで Windows でのゲームのユーザー エクスペリエンスが向上します。 ゲーム エクスプローラーは、Windows Vista のスタート メニューでゲーム フォルダーとして公開され、ゲームにアクセスするための中心的な場所を提供します。

DirectX SDK の 2009 年 3 月リリース以降、Windows 7、ゲーム プロバイダーと RSS フィード、IGameExplorer2 の機能をサポートするために、新しいゲーム定義ファイル (GDF) スキーマが使用されています。 IGameExplorer2 は、ゲーム エクスプローラーとゲームを統合するプロセスを簡略化する Windows 7 の新しいインターフェイスです。

この記事では、新しい GDF スキーマを使用して、Windows Vista および Windows 7 のゲーム エクスプローラーおよび保護者による制限にゲームを登録するプロセスについて説明します。

Note

ゲーム エクスプローラーは、Windows 10 バージョン 1803 以降では使用できません。

内容:

前提条件

ゲーム エクスプローラーにゲームを統合する前に、ゲーム定義ファイル (GDF) を作成する必要があります。 GDF は、ゲームについての情報を記述したメタデータを含む XML ファイルです。 DirectX SDK の 2009 年 3 月リリースで、GDF スキーマにゲーム プロバイダー、RSS フィード、ゲーム タスクのセクションが追加されました。 この記事の手順を使用するには、この新しい GDF 形式を使用して GDF ファイルを作成する必要があります。

Microsoft は、DirectX SDK で GDF を作成するためのツールである Game Definition File Editor を提供しています。これを使用すると、この作成プロセスが容易になります。 このツールは、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 を使用すると、統合プロセスが簡略化されます。 ゲームをゲーム エクスプローラーに登録するには、GDF バイナリへのパス、ゲームがインストールされているフォルダーへの絶対パス、インストールのスコープを指定して GameExplorerInstall を呼び出します。 ゲームの登録を削除するには、GDF バイナリへのパスを指定して GameExplorerUninstall を呼び出します。

削除プロセスでは、一意のインストールが 1 つだけ削除されることに注意してください。 ゲームが複数回インストールされている場合は、一意のインストールごとにこのプロセスを繰り返す必要があります。

ゲーム エクスプローラー タスク

ゲーム エクスプローラー タスクは、ゲーム エクスプローラーの項目のコンテキスト メニューに表示されます。 タスクは、プレイ タスクとサポート タスクに分かれています。 プレイ タスクは、特定のモードでゲームを起動します。サポート タスクは Web サイトへのリンクなど、他の目的で機能します。

Windows Vista では、タスクは単に特定のフォルダーにあるショートカットです。 プレイ タスクとサポート タスクは、"PlayTasks" と "SupportTasks" という名前のフォルダーに格納されます。 GameUXInstallHelper を使用すると、GDF バイナリ ファイルからゲームのタスク情報を読み取り、すべてのショートカットを自動的に作成することができます。

Windows 7 では、ゲーム エクスプローラーによってすべてのタスク情報が GDF バイナリ ファイルから直接取得されるため、タスクへのショートカットは必要ありません。

InstallScript への統合

InstallShield の InstallScript からの Games Explorer API の呼び出しは、GameUXInstallHelper サンプルを使用して簡単に行うことができます。 InstallShield と統合するために必要な手順は次のとおりです。

  1. InstallShield エディターで InstallScript プロジェクトを開きます。

  2. ターゲット ディレクトリにインストールするプロジェクトに GameUXInstallHelper.dll を追加します。

    GameUXInstallHelper.dll を InstallScript プロジェクトに追加するには:

    1. [インストール デザイナ] タブの左側のナビゲーション ウィンドウで [アプリケーション データ] をクリックします。

    2. [ファイルとフォルダ] をクリックし、[Source computer's folders] (ソースコンピュータのフォルダ) を参照して、[Source computer's files] (ソース コンピュータのファイル) 内の GameUXInstallerHelper.dll を見つけます。

      GameUXInstallerHelper.dll の既定の場所は DirectX SDK root\Samples\C++\Misc\Bin\x86 です。

    3. [Destination computer's folders] (インストール先コンピュータのフォルダ) で、[Application Target Folder] (アプリケーションのインストール先フォルダ) をクリックします。

    4. GameUXInstallerHelper.dll を [Source computer's files] (ソースコンピュータのファイル) から [Destination computer's files] (インストール先コンピュータのファイル) にドラッグします。

  3. InstallScript エクスプローラーで、DLL 関数を呼び出す InstallScript ファイル (通常は setup.rul) をクリックします。

  4. 次の 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 を呼び出すために必要な手順の概要を次に示します。

  1. GDF バイナリへの相対パスを含む "RelativePathToGDF" という MSI プロパティ テーブルにプロパティを追加します。
  2. CostFinalize アクションの後、即時カスタム アクションで GameUXInstallHelper DLL 関数 SetMSIGameExplorerProperties を呼び出して、他のカスタム アクションに対して適切な MSI プロパティを設定します。
  3. インストール時に、GameUXInstallHelper DLL 関数 AddToGameExplorerUsingMSI を呼び出す InstallFiles アクションの後に遅延カスタム アクションをトリガーします。 インストールがすべてのユーザーを対象に実行される場合、カスタム アクションで msidbCustomActionTypeNoImpersonate フラグを設定する必要があります。それ以外の場合、このフラグは設定しません。 そのため、ほぼ同じ 2 つのカスタム アクション (GameUXAddAsAdmin と GameUXAddAsCurUser) が定義されています。
  4. インストールを削除するときは、GameUXInstallHelper DLL 関数 RemoveFromGameExplorerUsingMSI を呼び出す RemoveFiles アクションの前に、遅延カスタム アクションをトリガーします。 インストールがすべてのユーザーを対象に実行された場合、カスタム アクションで msidbCustomActionTypeNoImpersonate フラグを設定する必要があります。それ以外の場合、このフラグは設定しません。 そのため、ほぼ同じ 2 つのカスタム アクション (GameUXRemoveAsAdmin と GameUXRemoveAsCurUser) が定義されています。
  5. これらのカスタム アクションのいずれかが既に実行された後にユーザーがインストールまたは削除を取り消すケースを処理するよう、ロールバック カスタム アクションを定義します。 これにより、GameUXRollBackAddAsAdmin、GameUXRollBackAddAsCurUser、GameUXRollBackRemoveAsAdmin、GameUXRollBackRemoveAsCurUser という 4 つのカスタム アクションが追加されます。

この手順の詳細については、次の手順で説明します。次の手順では、Platform SDK 内の Orca エディターなどの MSI エディターを使用して実行できるプロセスについて説明します。 一部の MSI エディターには、これらの構成手順の一部を簡略化するウィザードが備わっています。

ゲーム エクスプローラーとの統合用に MSI パッケージを構成するには

  1. Orca で MSI パッケージを開きます。

  2. 次の表に示す行を MSI パッケージの "Binary" テーブルに追加します。

    名前 データ
    GAMEUX DLL\GameUXInstallHelper.dll へのファイル パス

     

    Note

    このファイルは MSI パッケージに埋め込まれるので、GameUXInstallHelper.dll を再コンパイルするたびにこの手順を実行する必要があります。

     

  3. 次の表に示す行を MSI パッケージの [CustomAction] テーブルに追加します。

    アクション Type source Target
    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

     

  4. 次の表の "Action" (アクション)、"Condition" (条件)、"Sequence" (シーケンス) に示される値を、MSI パッケージの [InstallExecuteSequence] テーブルに追加します。

    アクション 条件 シークエンス メモ
    GameUXSetMSIProperties 1015 シーケンス番号により、[CostFinalize] の直後にアクションが配置されます。
    GameUXAddAsAdmin NOT Installed AND ALLUSERS 4003 このカスタム アクションは、すべてのユーザーを対象に、新規インストール時にのみ行われます。 シーケンス番号により、[InstallFiles] とロールバックの後にアクションが配置されます。
    GameUXAddAsCurUser NOT Installed AND NOT ALLUSERS 4004 このカスタム アクションは、現在のユーザーのみを対象に、新規インストール時にのみ行われます。 シーケンス番号により、[InstallFiles] とロールバックの後にアクションが配置されます。
    GameUXRollBackAddAsAdmin NOT Installed AND ALLUSERS 4001 このカスタム アクションは、すべてのユーザーを対象に、新規インストールが取り消された場合にのみ行われます。 シーケンス番号により、[InstallFiles] の後、およびカスタム アクションの追加の前にアクションが配置されます。
    GameUXRollBackAddAsCurUser NOT Installed AND NOT ALLUSERS 4002 このカスタム アクションは、現在のユーザーのみを対象に、新規インストールが取り消された場合にのみ発生します。 シーケンス番号により、[InstallFiles] の後、およびカスタム アクションの追加の前にアクションが配置されます。
    GameUXRemoveAsAdmin REMOVE~="ALL" AND ALLUSERS 3452 このカスタム アクションは、すべてのユーザーを対象に、削除中にのみ発生します。 シーケンス番号により、[RemoveFiles] の直前とロールバック後にアクションが配置されます。
    GameUXRemoveAsCurUser REMOVE~="ALL" AND NOT ALLUSERS 3453 このカスタム アクションは、現在のユーザーを対象にした削除中にのみ発生します。 シーケンス番号により、[RemoveFiles] の直前とロールバック後にアクションが配置されます。
    GameUXRollBackRemoveAsAdmin REMOVE~="ALL" AND ALLUSERS 3450 このカスタム アクションは、すべてのユーザーを対象に、削除が取り消された場合にのみ発生します。 シーケンス番号により、[RemoveFiles] の直前と、カスタム アクションを取り消す前にアクションが配置されます。
    GameUXRollBackRemoveAsCurUser REMOVE~="ALL" AND NOT ALLUSERS 3451 このカスタム アクションは、現在のユーザーの削除が取り消された場合にのみ発生します。 シーケンス番号により、[RemoveFiles] の直前と、カスタム アクションを取り消す前にアクションが配置されます。

     

  5. 次の表に示す行を MSI パッケージの [Property] テーブルに追加します。

    プロパティ
    RelativePathToGDF 相対ファイル パス\GDF を含むバイナリ ファイルの名前

     

    Note

    パスで指定された場所は、インストール パスで指定された場所を基準とします。 たとえば、bin\GDF.dll などです。

     

  6. MSI パッケージを保存します。

MSI パッケージと Windows インストーラーの詳細については、「Windows インストーラー」を参照してください。

デバッグのヒント

Games Explorer 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 を実行すると、サンプル アプリケーションは、インストールされているすべてのゲーム エクスプローラー ゲームを列挙し、それらを削除するように求める別のモードに入ります。 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\GameUX でレジストリを参照して検索し、ゲームがシステムの別のユーザー用にインストールされていないことを確認することもできます。 ただし、これらのレジストリ設定は、将来のバージョンのオペレーティング システムでの互換性の維持が保証されていないため、他の目的では変更しないでください。

必ず Authenticode を使用して署名する

レーティングを指定したが、ゲーム エクスプローラーに表示されない場合は、レーティングを含む実行可能ファイルまたは DLL ファイルに Authenticode を使用して署名していることを確認してください。 ゲーム エクスプローラーでは、署名されていないファイル内のレーティング情報は無視されます。 Authenticode の詳細については、「ゲーム開発者向けの Authenticode 署名」を参照してください。

保護者による制限が使用可能であることを確認する

保護者による制限が提供されている Windows Vista のエディション (Home Basic、Home Premium、Ultimate) で保護者による制限をテストするようにします。 Windows Vista Business と Windows Vista Enterprise では、保護者による制御は提供されませんが、Windows Vista Ultimate でテストしていて、テスト コンピューターがドメインに参加している場合は、グループ ポリシー設定を変更して保護者による制御を表示する必要があります。 これを行うには、「ゲーム エクスプローラーの概要」を参照してください。

タスクの種類が正しいことを確認する

ゲーム エクスプローラーに表示されないサポート タスクを指定した場合は、それらがすべて Web リンクであることを確認します。 その他のショートカット タスクは、プレイ タスクとして作成する必要があります。 タスクについては、この記事の前半の「ゲーム エクスプローラー タスク」で説明しています。

GDF バイナリ内のデータを確認する

GDFTrace.exe は、DirectX SDK に含まれるツールです。 GDF バイナリで GDFTrace.exe を実行すると、サポートされているすべての言語のバイナリに含まれるすべての GDF メタデータが出力され、迅速な検証が可能になります。 また、不足している情報や古い情報に関する警告も表示されます。

まとめ

Windows Vista のゲーム エクスプローラーでは、Windows Vista のユーザーにゲームを表示するための簡単でカスタマイズ可能な方法が提供されますが、インストール プロセス中にゲームをシステムに登録する必要もあります。 GameUXInstallHelper サンプルを使うと、開発者のこのプロセスが大幅に簡略化されます。