次の方法で共有


ゲーム開発者向けの Windows インストーラー

ソフトウェア デザイン エンジニア、Dave Bartolomeo 著

Microsoft Corporation

2003 年 10 月

はじめに

ここでは、Windows インストーラーを使用して、エンドユーザーのコンピューターにゲームをインストールする方法を示します。Windows インストーラーは、カスタマイズされたユーザー インターフェイスとパッチの適用を完全にサポートしています(4 印刷ページ)。

Microsoft Windows インストーラーは、Windows ベースのコンピューターにソフトウェアをインストールする際に、推奨される API です。Windows インストーラーの多くの機能が、企業の環境でのビジネス アプリケーションの展開をサポートするようデザインされていますが、Windows インストーラーは、エンドユーザーのコンピューターへのゲームのインストールにも十分適しています。ゲームのインストールに Windows インストーラーを使用する際の主な利点は、次のとおりです。

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

この記事では、特にゲーム開発者を対象とした、Windwos インストーラーの概要を示します。この記事で説明する機能および API に関する詳細なドキュメントについては、Windows Platform SDK を参照してください。

概要

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

MSI ファイルには、インストール プロセスでユーザーに手順を示すユーザー インターフェイスをオプションで追加することができます。この UI は、ほとんどのアプリケーションに適用できます。ただし、この UI の外観と操作性は、通常の Windows アプリケーションのものであり、エンドユーザー エクスペリエンスの一貫性を向上させるために、多くのゲーム開発者はセットアップ アプリケーションでもゲーム自体の外観と操作性を維持することが望ましいと考えます。この完全にカスタムの UI のシナリオをサポートするために、セットアップ アプリケーションで Windows インストーラーの組み込み UI をオフにして、ユーザー インターフェイス全体を処理するように設定できます。Windows インストーラー API ではコールバック メカニズムが公開されており、カスタムのセットアップ UI にインストールの進行状況を表示したり、ディスクの変更要求などの重要なイベントを通知したりできます。

Windows インストーラーは、セットアップ作成のためのすべてを網羅したソリューションではありません。Windows インストーラーは、セットアップ プログラムでファイル、レジストリ キー、デスクトップのショートカット、およびその他のアプリケーション要素を実際にインストールするために使用する API です。主なセットアップ ツール製品 (InstallShield、WISE、Microsoft Visual Studio など) の最新バージョンではすべて、Windows インストーラーがサポートされています。これらのツールには、ゲームのセットアップを作成するための便利なユーザー インターフェイスが用意されていますが、実際のインストール操作の大部分で Windows インストーラー API に依存しています。これらのツールは、セットアップ パッケージを含む MSI データベースのビルドだけに使用することもできます。この場合、カスタム記述のセットアップ UI からそれらをインストールできます。サードパーティのツールの代替として、Windows インストーラー API は、MSI データベースをプログラムで作成および操作する際に必要なすべての関数を提供します。また、Windows Platform SDK には、Orca という必要最小限の MSI データベース編集ツールが含まれています。

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

成分

アプリケーションは、1 つ以上のコンポーネントで構成され、各コンポーネントは GUID コンポーネント ID によって識別されます。コンポーネントは、最小単位であり、すべてをインストールするか、まったくインストールしないかのどちらかになります。1 つのコンポーネントは 1 つのファイル、複数のファイル、レジストリ キー、デスクトップのショートカット、またはこれらの組み合わせで構成できます。コンポーネント内のリソース (ファイルなど) はそのコンポーネントに固有である必要があり、2 つのコンポーネントで同一のリソースを共有することはできません。コンポーネントが明示的にインストールされることはありません。コンポーネントは機能の一部としてインストールされるだけです (以下を参照)。

機能

機能は、コンポーネントのグループで、GUID 機能 ID によって識別されます。コンポーネントとは異なり、複数の機能で同一のコンポーネントを格納することができます。複数の機能で共有されるコンポーネントは、これらの機能のいずれかがインストールされるとインストールされ、このコンポーネントを参照するすべての機能がアンインストールされた場合にのみ削除されます。機能のインストールは、製品のインストールの一環として自動的に実行することも、MsiConfigureFeature API を使用して手動で実行することもできます。

独立してインストールできる "機能" が複数あるゲームはほとんどありませんが、Windows インストーラーの機能の概念には高い利用価値があります。Windows インストーラーの機能は、一緒にインストールできるコンポーネントの集合でしかありませんが、ゲームでは機能を使用して、ゲームの特定のステージに必要なすべてのコンテンツをグループにまとめることができます。たとえば、レベル指向のゲームでは、レベルごとに、そのレベルに必要なすべてのコンテンツが含まれる 1 つの機能を定義することができます。これによって、最初のインストール時にすべてのレベルのすべてのコンテンツをインストールするのではなく、ゲーム内から 1 回に 1 つのレベルのコンテンツをインストールできるようになります。

インストール ステート

各コンポーネントまたは機能には、関連付けられたインストール ステートがあります。インストール ステートによって、コンポーネントまたは機能が使用可能かどうかが判断され、使用可能な場合は、そのコンポーネントまたは機能がインストールされているファイルの場所が特定されます。機能には、次の有効なインストール ステートがあります。

  • [Absent] : 対象の機能はインストールされていないため、アクセスできません。
  • [Local] : 対象の機能は使用可能で、ローカル ハードディスクから実行するようにインストールされています。
  • [Source] : 対象の機能は使用可能で、元のソース メディア (通常は CD または DVD) から実行するようにインストールされています。
  • [Advertised] : 対象の機能はインストールされていませんが、オンデマンドで MsiConfigureFeature API を使用してインストールできます。この機能を実際にインストールする場合、[Local] または [Source] ステートにインストールできます。

コンポーネントには、上記の [Advertised] 以外のすべてのステートを指定できます。コンポーネントが、アドバタイズ済み機能に含まれる場合、このコンポーネントは、その機能がインストールされるまで [Absent] として表示されます。

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

Windows インストーラーを使用すると、アプリケーションで、機能がまだインストールされていないが、必要に応じて実行時にインストールできることを示す [Advertised] としてその機能にマーク付けできます。実行時に機能をインストールすることを "オンデマンド インストール" といいます。ゲームで、オンデマンド インストールを使用すると、実行時に必要になるまでゲームのコンテンツのインストールを遅延することによって、最初のゲームのセットアップに必要な時間を大幅に短縮できます。実行時のコンテンツのインストールに必要な遅延は、通常、バックグラウンド スレッドでオンデマンド インストールを実行することによって部分的にまたは完全に隠すことができるため、ユーザーはそれらに関係なくゲームに専念できます。

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

Windows インストーラーには、アプリケーションのインストールでユーザーに手順を示すデフォルトのユーザー インターフェイスが用意されていますが、このインターフェイスの外観は、標準の Windows アプリケーションのインターフェイスと似ています。多くのゲーム開発者は、ゲームの雰囲気をユーザーに味わってもらうために、インストール UI の外観と操作性がゲーム自体のものと同じであることが望ましいと考えます。これをサポートするために、Windows インストーラーでは、組み込みユーザー インターフェイスを完全に無効にして、開発者が完全にカスタムの UI を提供できるようになっています。

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

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

  • アプリケーションのインストール先のディレクトリ
  • ローカルにインストールする機能と CD または DVD から実行するようにインストールする機能(最小インストールと完全インストールを選択可能にするなど)
  • アプリケーションを対象コンピューターのすべてのユーザーに対してインストールするか、現在のユーザーに対してのみインストールするか

インストールの実行中に、セットアップ プログラムはコールバック関数に送信する通知メッセージを使用して、進捗状況を示すインジケーター UI の更新タイミング、ユーザーに次の CD の挿入を求めるタイミング、およびユーザーにインストール プロセスでのエラーを通知するタイミングを指定します。

パッチの適用

Windows インストーラーでは、インストールしたアプリケーションにパッチ ファイルを適用することができます。パッチ ファイルには、パッチ適用によって追加される新しいファイル、パッチ適用によって変更されるファイル、およびインストール データベースに加える変更のリストが含まれます。容量を節約するために、パッチ ファイルには、パッチによって変更されるファイルの完全なコンテンツが格納されているのではなく、実際には元のバージョンのファイルと新しいバージョンのファイルの相違点のみが含まれています。

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

必要なすべてのセットアップ イメージを用意できたら、Msimsp.exe を使用してパッチを作成します。Msimsp.exe は、Platform SDK に含まれるパッチ作成ツールです。このツールは、各セットアップ イメージの場所を確認してから、一連のバージョン間の相違点を効率的に表す方法を判定します。このツールの出力が、最終的なパッチ ファイルです (拡張子 MSP で識別されます)。パッチをプログラムでインストールするには、MsiApplyPatch API を呼び出します。ユーザーは、エクスプローラーで MSP ファイルをダブルクリックすることによって、パッチを手動でインストールすることもできます。

その他のリソース