Lesson 1 始めよう
既に前書きで述べたように、WiX ツールセットは XML ソース・ファイルを使用して、 アプリケーションのインストール・プロセスを構成するコンポーネントを記述します。 また、XML ソース・ファイルには、ショートカット、レジストリおよび .ini ファイルの変更、 サービスなど関する付加的なデータも記述します。 さらに、インストーラ・パッケージは、ユーザーのディスクにコピーしたいファイルに加えて、 インストールのプロセスに参加はするけれども実際にはインストールされないヘルパー・ファイルを持つことが有り得ます。 そういうヘルパー・ファイルとしては、インストールの UI に使用されるダイアログやアイコンおよびビットマップ、 あるいは、ライセンス・ファイルや readme ファイル、さらには、Windows Installer がサポートしていないプログラム的な処理を実行するカスタム DLL が含まれます。 (例えば、何らかのユーザー登録やキー・チェック・ロジックを実装したいと思うかも知れませんが、 Windows Installer はそういう処理をサポートしていません。)
これら全てのものをソース・ファイルに記述して、WiX のコンパイラに供給します。
ツールセットはいくつかの部分から構成されていますが、そのうちの二つを使って、インストーラ・パッケージをコンパイルします。
ここで Sample.wxs
というソース・ファイルを用意したと仮定しましょう。
最初に、
というコマンドで、コンパイルの第一段階を実行して、Sample.wixobj
という半分消化されたファイルを作成します。
このファイルはまだ XML ですが、その内部構造は人間が読むことを想定したものではありません。
通常のコンパイラ用語でオブジェクト・ファイルと呼ばれるものだと考えて下さい。
次に、第二のコマンドとして、
を実行し、この中間表現を最終的なパッケージである Sample.msi
というファイルに変換します。
コンパイラとリンカにそっくりですね。実際は、それだけに留まりません。
リンカは、明示的にそうするなと指示しない限りは、検証ステップを実行して、
完成されたインストーラ・データベースを数百項目にわたってチェックし、エラーや問題が無いかを調べます。
今日のコンパイラでは普通のことですが、もはやコマンド・ラインでの使用に限定されてはいません。 Microsoft Visual Studio や SharpDevelop のような統合開発環境も、IDE そのものの内蔵機能やアドインとして、 WiX プロジェクトをサポートすることが出来ます。 Visual Studio の場合は、WiX v3 パッケージをインストールすると Visual Studio の WiX サポートが自動的にインストールされます。 この手法を使って、独立したセットアップ・ソリューションを作成することも出来ますし、 セットアップを部分プロジェクトとして全体のソリューションに含めることも出来ます。 この場合、最終的なセットアップ・パッケージをビルドするためにプログラミング環境を離れる必要はなくなります。
コンパイラとリンカの比喩は非常に明解で、WiX が実際のインストール・パッケージをビルドする方法を理解するのに役立つかも知れません。
しかし、もうすぐ書き始めようとしている WiX のソースをスクリプトやプログラミング言語のようなものだと考えるべきではありません。
私たちがソースに記述するのは、アプリケーションをインストールするのに必要なステップや操作を集めたものではありません。
アプリケーションの配布に使用する .msi
ファイルは、セットアップ・アプリケーションではなく、インストール・データベースです。
プログラムのロジック、すなわち、アプリケーションをインストールする方法や、レジストリ・キーを修正する方法、
ショートカットやユーザーやネットワーク共有を作成する方法、ウェブ・ディレクトリやサービスを操作する方法は、すべて、
Windows Installer の方に内在しています。
私たちが作成するセットアップ・ファイルは、Windows Installer によって何が実行されるべきかを記述し、
そして、配置すべきファイル(およびインストールのプロセスで使用するインタフェイス要素)を提供するだけのものです。
データベースの手法を取っているということは、WiX のソース・ファイルは通常のプログラムと同じようにビルドされる訳ではない、 ということを意味しています。 WiX には順次実行という概念はありません。 最初のソース行が次のソース行に先行して実行されるという想定はありません。 参照に先立って宣言が必要であるということもありません。 さまざまな要素が別の場所で記述されることが有り得ます。 そして、要素間にリンクが必要な場合は、私たちが提供する一意の識別子を使用して、一方から他方を参照しなければなりません。 プログラミング言語の用語で考える必要がある、というのであれば、WiX は命令的・指示的な言語ではなく、関数的・宣言的な言語であると考えて下さい。
また、WiX はそれ自体としてはインストール環境ではない、ということにも留意して下さい。
簡単に言うと、WiX は、インストールの要求事項を記述するための使いやすい XML スタイルの方法であり、
その記述をコンパイラとリンカによって Windows Installer の .msi
データベースに変換するものである、ということです。
この面において、WiX は Windows Installer のテクノロジを包んだ比較的薄いラッパーです。
WiX がセットアップ開発者を支援する付加的な機能をいくつか提供しているのは事実ですが、
WiX の能力は基礎となっているテクノロジによって決定されており、その制約も WiX 自身のものではなく
Windows Installer 自体が持っている制約なのです。