ゲーム開発者のための DirectX のインストール
XNA デベロッパー コネクション (XDC)
ソフトウェア開発主任、Jason Sandlin
ソフトウェア デザイン エンジニア、Jason Sandlin 共著
2006 年 12 月
この記事は、DirectX ランタイムおよび DirectSetup を使用した DirectX のインストールに関する一般的な疑問に対応することを目的としています。
DirectX ランタイム
DirectX ランタイムは、コア コンポーネントとオプション コンポーネントで構成されています。
コア コンポーネント (Direct3D、DirectSound、DirectInput など) は、オペレーティング システムの一部と見なされます。DirectX 9.0c のコア コンポーネントは DirectX SDK Summer 2004 Update から変更されておらず、Microsoft Windows XP SP2、Windows XP Pro x64 Edition、および Windows Server 2003 SP1 でリリースされたものと一致します。DirectX 9.0c の次のアップデートは DirectX 10 です。これは Windows Vista のみに搭載されています。DirectX 10 では、Direct3D を除くコア コンポーネントに変更はありません。Direct3D の新しいバージョンでは、Windows Vista ドライバー モデル (WDDM)、および新しいグラフィック ハードウェアや今後登場するグラフィック ハードウェアがサポートされます。
オプション コンポーネントは、隔月で更新される DirectX SDK でリリースされます。これには、D3DX、XACT、XINPUT、Managed DirectX などのコンポーネントがあります。オプション コンポーネントの多くは、利用者のフィードバックを取り込み、新機能を公開するために、定期的に更新されています。
DirectX のバージョン番号
DirectX のバージョン番号 (9.0c など) は、Direct3D、DirectInput、DirectSound などのコア コンポーネントのバージョンのみを指しています。DirectX SDK でリリースされる D3DX、XACT、XINPUT などの各種オプション コンポーネントのバージョンは、この番号に対応していません。
一般に、DirectX のバージョン番号は、コアのランタイム要素を簡単に呼ぶためのもので、それ以外の意味はありません。この番号はオプションの DirectX コンポーネントを考慮に入れていないため、正しい DirectX ランタイムがインストールされているかどうかをチェックする際にこの番号を使用しないでください。
DirectX ライブラリ
以前は、D3DX をはじめとする DirectX SDK のオプション コンポーネントがスタティック ライブラリとしてリリースされていました。しかし現在では、セキュリティ強化の要望が高まったことから、これらのコンポーネントがダイナミック リンク ライブラリ (DLL) としてリリースされるようになりました。DLL にすることで、以前にリリースされたコードの保守が可能となります。このようなコンポーネントをスタティック ライブラリとして展開した場合、Microsoft はリリース後に見つかったセキュリティ上の問題に対処できません。
オプション コンポーネントの機能が追加または変更されると、対応する DLL の名前も変更されるので、リリース済みのコンポーネントを使用している既存のゲームで機能が低下することはありません。各コンポーネントの DLL は併存しています。ゲーム開発者は、対応するインポート ライブラリにリンクすることで、ゲームで使用する DLL のバージョンを正しく選択できます。
スタティック ライブラリにリンクするだけの場合に比べると、DLL が確実にシステムにインストールされるようにするのは簡単ではありませんが、DirectX SDK にはこの DLL モデルの難点に対応するための変更が加えられています。
アプリケーションに必要なコンポーネントのみが含まれるように DirectX 再頒布可能パッケージを構成して、配布とメディアのサイズを最小化することができます。
再頒布可能フォルダー Program Files\DirectX SDK\Redist\ に、各オプション コンポーネントのキャビネット (.cab) ファイルを格納できるようになりました。したがって、古い SDK からそれらのファイルを探し出す必要はありません。
SDK をインストールすることで、すべてのオプション コンポーネントがインストールされます。
すべてのオプション コンポーネントを収録した DirectX 再頒布可能パッケージは、Web ベースのインストーラーまたはダウンロード可能なパッケージとして入手できます。詳細については、DirectX Developer Center () を参照してください。
ゲームのインストーラーによる DirectX のインストール
ゲームのインストーラーに DirectX のインストールを追加するためのベスト プラクティスを以下に示します。
再頒布可能コンポーネントを毎回インストールします。
ゲームのインストール プロセスで、インストールのたびに DirectX 再頒布可能コンポーネントがインストールされるようにします。このときに、ユーザーがそのインストールを拒否できないようにする必要があります。拒否を可能にすると、コンポーネントが不要であると推測したユーザーがインストールを拒否してゲームが動作しなくなる場合があります。DirectX のインストーラーでオプション コンポーネントをチェックするようにします。
最新のオプション コンポーネントがシステムにインストールされているものと想定しないでください。Windows Update や Service Pack では、DirectX のオプション コンポーネントが提供されません。DirectX ランタイムは、dxsetup.exe を直接実行するか、DirectSetup を呼び出す方法でインストールする必要があります。セットアップは自動的に行います。
ユーザーが DirectX ランタイムの更新を誤ってスキップしないように、セットアップはサイレント モードで起動します。これを行うには、次のコマンドで dxsetup.exe を起動します。path-to-redistributable\dxsetup.exe/silent
または、DirectSetup を呼び出して UI を表示させないようにします。
EULA (使用許諾契約書) への同意を求める処理を統合します。
EULA への同意をユーザーに求める場合は、その処理をサイレント モードでインストールする際の DirectX EULA への同意を求める処理と統合して、EULA への同意を求める処理が 1 回で済むようにします。ユーザーが同意しなかった場合にインストールが失敗したり部分的にインストールされたりすることがないように、同意を求める処理は、何もインストールされていない段階で行う必要があります。dxsetup の実行または DirectSetup の呼び出しのみを行います。
DirectX のバージョン番号は DirectX のコア コンポーネントのみを指しているため、dxsetup.exe の実行または DirectSetup の呼び出しの前に、インストールされているバージョンをチェックしないでください。また、オプション コンポーネントがインストールされているかどうかをファイルの有無でチェックしないでください。これを行うと、既にあるコンポーネントに更新が必要である場合に、それを正しく判断できません。ただし、DirectX セットアップ パッケージでは、この判断が即座に行われ、適切な処置が実行されます。DirectSetup の使用方法の詳細については、「DirectSetup での DirectX のインストール」を参照してください。
小さなインストール パッケージ
より小さな DirectX のインストール パッケージを作成するには、DirectX 再頒布可能フォルダーの内容を、インストーラーが動作するために必要な最小限のファイルに絞り、ゲームで使用するその他のコンポーネントを保持しておくようにします。
最小限の仕様によっては、DirectX 9.0c のコア キャビネット ファイルをインストール メディアの再頒布可能フォルダーに収録する必要がない場合もあります。インストールされている Windows XP の大半には Service Pack 2 が適用されていますが、Service Pack 2 には DirectX 9.0c のコア コンポーネントが組み込まれているため、DirectX のセットアップ処理はごく短時間で終わり、再起動も必要ありません。作成可能な最小のパッケージは約 3 MB で、これをほぼ半分のサイズに圧縮できます。このようなパッケージは、D3DX DLL のバージョンを 1 つだけ含んでおり、DirectX 9.0c が既に存在することを必要とします。
再頒布可能パッケージの構築に必要な最小限のファイルを以下に示します。ここに挙げたファイルは、DirectX SDK の Redist フォルダー (Program Files\DirectX SDK\Redist\) にあります。
dxsetup.exe
dsetup32.dll
dsetup.dll
dxupdate.cab
dxdllreg_x86.cab
上記のファイルに、インストールするコンポーネントのキャビネット ファイルを追加します。アプリケーションのユーザーに DirectX 9.0c を事前にインストールするように要求する場合は、スペース所要量のほとんどを占める DirectX.cab または dxnt.cab を収録する必要がありません。DirectX.cab は Windows 98 と Windows ME にのみ必要で、dxnt.cab は Windows 2000、Windows XP、および Windows XP SP1 にのみ必要です。また、DirectShow を利用しない場合や、これが既にインストールされていることを前提とする場合は、BDA.cab、BDANT.cab、および BDAXP.cab を省くことができます。
注 アプリケーションの以前のバージョンで DirectX 9.0c がインストールされている場合、ユーザーに Web インストーラーによる手動の更新を強制する場合、またはユーザーが Windows XP SP2 以降を使用していると想定される場合は、アプリケーションのユーザーが DirectX 9.0c を既にインストールしていると見なすことができます。
さらに、April 2006 SDK の 32 ビット版 D3DX のみを使用している場合は、Apr2006_d3dx9_30_x86.cab を追加できます。32 ビット August 2006 SDK の 32 ビット版 XINPUT を使用している場合は、Aug2006_xinput_x86.cab を追加します。
ネイティブの 64 ビット アプリケーションの場合は、_x64 バージョンを追加する必要があります。ただし、64 ビット OS 上で動作する 32 ビット アプリケーションの場合は、32 ビット バージョンの DLL を使用できます。
これで、このファイル パッケージを配布し、DirectSetup をサイレント モードで起動するか、dxsetup.exe をコマンド シェルでサイレント モードで実行できます。既に説明したように、パッケージでファイルのバージョン チェックを行ったり、DirectX セットアップの実行をユーザーが拒否できるようにしたりすると、インストール処理を確実に遂行できなくなるので、どちらも行わないようにしてください。
DirectX Web インストーラー
DirectX Web インストーラーは、ユーザーのコンピューターの DirectX コンポーネント (オプションとコアの両方) をチェックするダウンロード形式の実行可能ファイルです。このインストーラーは、現在インストールされているコンポーネントを調べたうえで、必要なコンポーネントをダウンロードしてインストールします。このインストーラーを入手するには、Web ページ https://www.microsoft.com/directx/ で [Download] をクリックします。DirectX Web インストーラーは再配布しないでください。ユーザーにはこの Microsoft Web サイトを紹介してください。
DirectX Web インストーラーは定期的に更新され、主に小規模なダウンロード形式のゲームの利用者を対象としています。このようなゲームでは、ダウンロードするサイズが数メガバイト増えるだけでも多すぎると見なされます。
別の方法として、すべてのコンポーネントを含んだ最新の DirectX エンドユーザー ランタイムをユーザーに紹介することもできますが、これは大きなパッケージです。このパッケージは、主に SDK を必要としないシナリオで便利です。たとえば、アーティストのコンピューターを設定する場合や、ダウンロード専用ゲームでユーザーが追加コンポーネントを取得する操作に慣れている場合などが挙げられます。
DirectX デバッグ ランタイムの内部展開
DirectX コンポーネントのデバッグ ランタイムは、DirectX SDK がインストールされるときにインストールされますが、すべてのテスト用コンピューターに SDK をインストールするのは困難であるため、セットアップ プロセスでデバッグ ランタイム DLL を Program Files\Microsoft DirectX SDK\Developer Runtime\architecture\ から Windows\system32\ またはゲームのフォルダーにコピーするように計画してください。
ただし、リリースされたランタイム DLL を単純にコピーしないことを強くお勧めします。これは、最終的な製品でこれらの DLL を削除することを忘れがちになるためです。代わりに、DirectX セットアップ ファイルを共有フォルダーに配置し、共有フォルダーから自動的にセットアップを実行するようにします。
Xbox 360 Controller for Windows 用のドライバー
ユーザーは、Xbox 360 コントローラー用の XInput ドライバーを Windows Update またはコントローラー パッケージから取得する必要があります。Windows Vista には XInput ドライバーが付属しています。