Silverlight をインストールするには、ここをクリックします*
Japan変更|すべてのMicrosoft のサイト|サインイン
MSDN*
マイクロソフト サイトの検索:
|MSDN ライブラリ|デベロッパー センター|ダウンロード情報|開発ツール製品|コミュニティ|ご意見・ご要望|サイトマップ
MSDN Home   MSDN Home
MSDN Home > DirectX > Driving DirectX コラム > ゲーム開発者のための Windows インストーラ

ゲーム開発者のための Windows インストーラ

Dave Bartolomeo
Microsoft Corporation

October 14, 2003
日本語版最終更新日 2003 年 10 月 21 日

要約: Windows インストーラを使ってエンドユーザー マシンにゲームをインストールする方法を解説します。Windows インストーラは、ユーザー インターフェイスのカスタマイズとパッチの適用をフルにサポートしています。


Microsoft(R) Windows(R)インストーラは、Windows ベースのコンピュータにソフトウェアをインストールするための推奨 API です。Windows インストーラの多くの機能は、企業環境でのビジネス アプリケーションの導入をサポートすることを目的に設計されていますが、エンドユーザー マシンにゲームをインストールするのにも適しています。ゲームのインストールに Windows インストーラを使用することには、以下の利点があります。

  • 信頼性の高いアンインストール。
  • コンテンツのオン デマンドでのインストール。
  • 完全なカスタム ユーザー インターフェイスのサポート。
  • 効率的なパッチ適用。

この記事では、ゲーム開発者を対象に、Windows インストーラの概要を説明します。この記事で触れている機能と API の詳細については、Windows Platform SDK を参照してください。

概要

すべての Windows インストーラ ベースのセットアップは、アプリケーションのインストール方法を記述する MSI ファイルと呼ばれるインストール データベース ファイルを使用します。MSI ファイルには、どのようなファイル、レジストリ キー、デスクトップ ショートカット、ファイルの関連付け、およびその他のアプリケーション要素をインストールするかということについての情報が入っています。実際にインストールされるファイルは、MSI ファイルそのものの中に圧縮して格納することも、別の「キャビネット ファイル」に圧縮してバンドルすることも、また個々の未圧縮のファイルとしてインストール メディア上の別の場所に格納しておくこともできます。また MSI ファイルは、ネイティブでは行えないアクションを実行するために、外部に実装されたカスタム アクションを参照できるようになっています。

MSI ファイルには、オプションとして、インストール プロセスをガイドするユーザー インターフェイスを持たせることができます。この UI はほとんどのアプリケーションに適しています。しかし、これは通常の Windows アプリケーションのルック アンド フィールを持っており、多くのゲーム開発者は、より一貫性のあるエンドユーザー エクスペリエンスを提供するために、セットアップ アプリケーションにゲーム自体と同じルック アンド フィールを持たせたいと考えています。このフル カスタム UI のシナリオをサポートするために、セットアップ アプリケーションは Windows インストーラの組み込み UI をオフにし、ユーザー インターフェイス全体を自分自身で処理できるようになっています。Windows インストーラ API は、インストールの進捗や、ディスク交換要求などの重要なイベントをカスタム セットアップ UI に通知するためのコールバック メカニズムを公開しています。

Windows インストーラは、セットアップを作成するための end-to-end のソリューションではありません。これは、セットアップ プログラムが、ファイル、レジストリ キー、デスクトップ ショートカット、アプリケーションのその他の要素を実際にインストールするために使用できる API に過ぎません。すべての主要な商用セットアップ ツール (InstallShield、WISE、Microsoft(R) Visual Studio(R)など) の最近のバージョンは Windows インストーラをサポートしています。これらのツールは、ゲームのためのセットアップを作成するための手軽なユーザー インターフェイスを提供していますが、実際のインストール作業の多くは Windows インストーラ API に依存しています。また、これらのツールは、セットアップ パッケージを含んだ MSI データベースの構築のみに使用することもできます。このデータベースは、カスタム作成のセットアップ UI からインストールすることが可能です。また、これらのサードパーティ ツールを使わなくても、Windows インストーラ API には MSI データベースの作成と操作に必要なすべての機能が含まれており、Windows Platform SDK には Orca という名前の基本的な MSI データベース編集ツールが含まれています。

Windows インストーラの主な概念

コンポーネント

アプリケーションは、GUID コンポーネント ID によって識別される 1 つまたは複数のコンポーネントから構成されています。コンポーネントは単一の要素であり、完全にインストールか、まったくインストールされないかのどちらかです。1 つのコンポーネントは、1 つのファイル、複数のファイル、レジストリ キー、デスクトップ ショートカット、およびこれらの組み合わせから構成されます。コンポーネント内のリソース (ファイルなど) は、そのコンポーネント内で一意でなくてはなりません。つまり、2 つのコンポーネントが同じリソースを持つことはできません。コンポーネントは、決して明示的にはインストールされず、フィーチャの一部としてのみインストールされます(後述)。

フィーチャ

フィーチャは、GUID フィーチャ ID によって識別される、コンポーネントのグループです。コンポーネントとは異なり、複数のフィーチャは同じコンポーネントを持つことができます。複数のフィーチャで共有されるコンポーネントは、それらのフィーチャのうちのいずれかがインストールされた場合にインストールされ、そのコンポーネントを参照するすべてのフィーチャがアンインストールされた場合にのみ削除されます。フィーチャのインストールは、製品のインストールの一部として自動的に行うこともできますし、MsiConfigureFeature API を使って手動で行うこともできます。

ゲームの場合、独立してインストールできる複数の「フィーチャ」を持っているケースはそれほどありませんが、Windows インストーラのフィーチャの概念は依然として有用です。Windows インストーラのフィーチャは、同時にインストールできるコンポーネントの集まりに過ぎないので、ゲームはフィーチャを使って、ゲームの特定のステージに必要とされるすべてのコンテンツをグループ化することができます。たとえば、レベル型のゲームは、レベルごとに、そのレベルに必要なすべてのコンテンツから成る 1 つのフィーチャを定義できます。これにより、ゲームは、最初のインストール時にすべてのレベルのすべてのコンテンツをインストールするのではなく、ゲーム内から一度に 1 つずつのレベルのコンテンツをインストールしていくことができます。

インストール状態

個々のコンポーネントまたはフィーチャには、そのコンポーネントまたはフィーチャが利用可能かどうかを判定し、利用可能な場合には、そのコンポーネントまたはフィーチャのファイルがどこにインストールされているかを判定するためのインストール状態が関連付けられています。フィーチャのインストール状態には以下のものがあります。

  • Absent。フィーチャはインストールされておらず、したがってアクセス不可能です。
  • Local。フィーチャは利用可能であり、ローカル ハード ドライブから実行されるようにインストールされています。
  • Source。フィーチャは利用可能であり、オリジナルのソース メディア (通常は CD または DVD) から実行されるようにインストールされています。
  • Advertised。フィーチャはインストールされていませんが、MsiConfigureFeature API を使ってオン デマンドでインストールできます。フィーチャを実際にインストールするときには、Local または Source の状態でインストールできます。

コンポーネントは、上記のうち、"Advertised" 以外の任意の状態を持つことができます。コンポーネントが "Advertised" のフィーチャの一部である場合、そのコンポーネントは、フィーチャがインストールされるまでは "Absent" となります。

インストール オン デマンド

Windows インストーラでは、アプリケーションはフィーチャを Advertised としてマークすることができます。これは、そのフィーチャはまだインストールされていないが、必要ならば実行時にインストールが可能であるという意味です。実行時のフィーチャのインストールは「インストール オン デマンド」と呼ばれます。ゲームはインストール オン デマンドを利用して、ゲーム コンテンツのインストールを、実行時に必要になるまで据え置くことで、最初のゲーム セットアップに必要な時間を大幅に短縮できます。一般に、コンテンツを実行時にインストールするために必要な時間は、ユーザーがゲームをプレイしている間に、オンデマンド インストールをバックグラウンド スレッドで実行するようにすれば、部分的または完全に隠してしまうことができます。

カスタム ユーザー インターフェイス

Windows インストーラはアプリケーションのインストールをガイドする既定のユーザー インターフェイスを用意していますが、このインターフェイスは標準的な Windows アプリケーションと同じ外見を持っています。多くのゲーム開発者は、ユーザーにゲームの雰囲気に浸ってもらえるように、インストール UI にゲームそのものと同じルック アンド フィールを持たせたいと考えています。これをサポートするために、Windows インストーラでは組み込みのユーザー インターフェイスを完全に無効にし、開発者が完全なカスタム UI を提供できるようにしています。

カスタム セットアップ プログラムは、まず MsiSetInternalUI API を使って Windows インストーラの組み込みユーザー インターフェイスを無効にし、UI レベルを INSTALLUILEVEL_NONE に設定します。その後、MsiSetExternalUI APIを呼び出して、インストール プロセスの際に、インストール中の主なイベントをセットアップ プログラムに通知するために呼び出されるコールバック関数を指定します。

その後、MsiInstallProduct API を呼び出すことで、実際のインストール プロセスが開始されます。この API は、呼び出し元が、特定のプロパティの値を指定するために利用できるパラメータ文字列を受け付けます。これらのプロパティは、インストール データベースそのものの中で、アプリケーションのインストール方法をカスタマイズするために使用できます。これらのプロパティを使って指定できるものは次のとおりです。

  • アプリケーションのインストール先のディレクトリ。
  • ローカルにインストールするフィーチャと、CD/DVD から実行するようにインストールされるフィーチャ (たとえば、最小インストールと完全インストールを選択できるようにするため)。
  • アプリケーションをマシンのすべてのユーザーのためにインストールするのか、現在のユーザーに対してのみインストールするのか。

インストールの際に、セットアップ プログラムはコールバック関数に送られた通知メッセージを使用して、進捗インジケータ UI の更新、ユーザーに対して次の CD を挿入するように指示するプロンプト、ユーザーに対するインストール プロセスでのエラーの通知などのタイミングを決定します。

パッチの適用

Windows インストーラでは、パッチ ファイルを使用して、インストール済みのアプリケーションにパッチを適用することができます。パッチ ファイルは、パッチによって追加される新規のファイル、パッチによって変更されるファイル、インストール データベースに加える変更のリストが入っています。スペースを節約するために、パッチ ファイルは、パッチによって変更されるファイルのコンテンツ全体ではなく、ファイルの元のバージョンと新しいバージョンの差分のみを持っています。

パッチを作成するためには、アップグレード元となるアプリケーションの個々のバージョンのセットアップ イメージと、アプリケーションの新しいアップグレード後のバージョンのセットアップ イメージが必要となります。セットアップ イメージは、MSI データベースと、アプリケーションの実際のデータ ファイルすべてから構成されます。アプリケーションの新しいバージョンのセットアップ イメージを作成するには、アプリケーションの前のバージョンのセットアップ イメージをコピーし、そのコピーに対して、パッチ適用後のバージョンにアップデートするために必要なすべての変更を加えるのが最も簡単です。

すべての必要なセットアップ イメージの作成を終えたら、Platform SDK に含まれているパッチ作成ツール Msimsp.exe を使ってパッチを作成できます。このツールは、個々のセットアップ イメージの場所を尋ねた後に、各バージョン間の差分を最も効率的に表現する方法を決定します。このツールの出力は、最終的なパッチ ファイルです (MSP という拡張子を持ちます)。パッチをプログラムからインストールするには、MsiApplyPatch API を呼び出します。また、ユーザーがエクスプローラで MSP ファイルをダブルクリックすれば、パッチを手動でインストールすることもできます。

他のリソース

 


Driving DirectX

Dave Bartolomeo は 1997 年に Microsoft に入社し、Microsoft(R) Visual C++(R) チームの開発者および開発リーダーとして、Visual C++ 6.0 とVisual C++ .NET のリリースに関わりました。2001 年に、Dave は開発者向けツールの開発経験とゲーム開発への関心を活かし、Windows Third-Party Gaming チームに参加して、Visual Studio .NET 用の DirectX エクステンションを開発しました。Dave は、ゲーム開発を容易にするツールを書いていないときには、DirectX と Windows を最大限に活用する方法をゲーム開発者たちに教えて回っています。


DirectX Driving コラム アーカイブ


Microsoft