Microsoft Windows Installer

パッケージの論理構造

パッケージが持つことのできる最も大きな単位がプロダクト (product) である。パッケージは複数のプロダクトのインストール情報を格納できる。プロダクトは全世界で一意な識別子であるGUID（PackageCodeプロパティ）で識別される。また、Windows Installerはプロダクト間の依存性については関与しない。プロダクトは複数の「コンポーネント」からなり、また複数のコンポーネントを「機能」という単位でまとめることができる。

プロダクト (product)

単独で動作する一つのプログラム（または、プログラムの集合）をプロダクトと呼ぶ。たとえば、Microsoft Officeなどの単一プロダクトがWindows Installerのプロダクトとなる。プロダクトも全世界で一意な識別子であるGUID（ProductCodeプロパティ）で識別される。プロダクトとパッケージとは別の単位で、一つのMSIパッケージで複数のプロダクトをインストールすることが可能である。たとえば、あるプログラムのフランス語版と英語版とを一つのMSIでインストールできるようにする場合、各言語版のプログラムは別々のプロダクトとなる。

コンポーネント (component)

コンポーネント (component) はプロダクトを構成する最小単位である。Windows Installerはコンポーネント単位でインストール・アンインストール処理を行う（すなわち、あるコンポーネントの一部をインストールするような設定は行えない）。コンポーネントはファイル、ディレクトリ、COMコンポーネント、レジストリキー、ショートカット、およびその他のデータを含むことができる。インストーラを起動したユーザーが直接コンポーネントを操作することはできない。
コンポーネントも、全世界で一意な識別子であるGUIDで識別される。これは、一つのコンポーネントを、一つのパッケージ内の複数の機能から、もしくは、複数のパッケージから共有できることを意味する。このような共有コンポーネントのことをマージモジュールと呼ぶ（この仕組みが正しく動作するためには、各コンポーネント間に重複した内容があってはならない）。

キーパス (key path)

キーパス (key path) はパッケージの製作者がそのパッケージに必須であると指定したファイル等のことである。キーパスにはファイル、レジストリキー、ODBCデータソースが指定できる。キーパスにはファイルを指定するのが一般的であるため、キーファイルとも呼ばれる。コンポーネントが持つことのできるキーパスは1つだけで、コンポーネントのキーパスを明示しなかった場合は、コンポーネントのインストール先のディレクトリがキーパスとなる。MSIベースのアプリケーションが起動されると、Windows Installerはキーパスに指定されたファイルやレジストリキーが存在するかチェックする。チェックの結果とMSIパッケージの情報との間に不整合があった場合（例えばキーファイルが削除されていた場合）、関連する機能の再インストールが行われる。このプロセスは自動修復機能と呼ばれる。複数のコンポーネントが同じキーパスを持つことはできない。

機能 (feature)

機能 (feature) はコンポーネントを階層的にまとめた構造である。一つの機能は複数のコンポーネントからなる。また、機能の中に機能を入れ子にすることもでき、他の機能に含まれる機能をサブ機能(subfeature)と呼ぶ。ほとんどソフトウェアでは、パッケージは単一の機能からなる。大規模なインストールプログラムでは通常、実行時にカスタムセットアップダイアログが表示され、ユーザがインストール・アンインストールする機能を選択できるようにしている。
機能の単位はパッケージの作成者が決定する。例えばワープロプログラムであれば、メインの実行プログラム、ヘルプファイル、オプションとしてスペルチェッカー等がそれぞれ一つの機能となる。

ロールバック

遅延実行シーケンススクリプトの実行中にエラーが発生した場合や、ユーザーの操作によって処理がキャンセルされた場合、その時点までに行われたアクションはロールバックされ、システムは元の状態に復元される。Windows Installerの標準アクションは実行時に自動的にロールバックスクリプトへの書き込みを行っており、ロールバック処理ではそのスクリプトが実行される。パッケージの作者がシステムに変更を加えるカスタムアクションを作成する場合は、対応するロールバックアクションも作成する必要がある。アンインストール用アクションにも同様にロールバック用のアクションが必要になる。このメカニズムによって、アンインストールが失敗した場合には再インストールが行われるという少し奇妙な処理が行われる。

アドバタイズ

Windows Installerでは、製品をアドバタイズ (advertise) することもできる。製品がアドバタイズされると、ユーザーからは製品がインストールされたように見えるが、実際のインストールは製品が初めて起動されるとき（スタートメニューからの起動、関連付けられたファイルを開く、アドバタイズにより設定されたCOMクラスを呼び出す等）に実行される。パッケージのアドバタイズを行うには、グループポリシーまたはその他のデプロイメント機構を使用するか、msiexec.exeを/jm（すべてのユーザに対してアドバタイズ）または/ju（現在のユーザに対してアドバタイズ）オプション付きで実行する。

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

アドバタイズと同様に、オンデマンドでのインストールに指定された機能はユーザーが使用しようとした時点で初めてインストールされる。

管理インストール

管理インストールでは非圧縮の状態の製品のイメージが作成される。この機能は、主にアプリケーションをネットワークドライブからインストールまたは実行する際に用いられる。管理用インストールでは、通常のインストールとは異なり、ショートカットの作成・COMサーバの登録・「プログラムの追加と削除」への追加は行われない。管理用インストールは、展開したインストール用ソースから機能を実行する場合にしばしば使用される。
管理インストールはWindows Installerのパッチを作成する場合にも使用される。これは、バイナリファイルの差分を得るために、古いバージョンと新しいバージョンの展開済みイメージが必要になるためである。管理インストールを行うには、msiexec.exeを/aオプション付きで実行する。

Windows Vista

Windows Vistaに同梱されているWindows Installer 4.0には、UACと連携するための機能が盛り込まれている。MSIパッケージを管理者権限が不要であるとマークすれば、ユーザは管理者資格情報のプロンプトを表示せずにパッケージをインストールできる。Windows Installerと再起動マネージャの連動も可能である。アプリケーションやシステムコンポーネントのインストールおよび更新を「フル」ユーザインタフェースモードで行うときは、影響を受けるアプリケーションのうちシャットダウンできるもののリストが表示され、ファイルが更新された後に再起動することができる。サイレントモードでは、インストーラのアクションによってアプリケーションは自動的に再起動される。システムサービスやトレイアプリケーションも同様に再起動が可能である。