Windows インストーラー XML リンカは、light.exe によってあらわにされます。 Light は、1つ以上の .wixobj ファイルを処理する事、様々な外部ファイルからメタデータを取り出す事、Windows インストーラーデータベース( MSI や MSM )を作成する事について責任を持ちます。 必要な時には、Light はキャビネットを作成し、ストリームを作成された Windows インストーラーデータベースに埋め込みもします。
リンカは、エントリーセクションを見つける為にコマンドラインにおいて提供されたオブジェクトファイルのセットを検索する事によって開始します。 もし複数のエントリーセクションが見つかると、light はエラーと共に失敗します。 エントリーセクションが どのタイプの Windows インストーラーデータベース、MSI や MSM が作成されているかを定義するので、この失敗は必然的です。 単一のリンクオペレーションから2つのデータベースを作成する事はできません。
リンカがエントリーセクションを解決している間、個々のオブジェクトファイル中で定義されたシンボルが シンボルテーブルに格納されます。 エントリーセクションが見つかった後、リンカは シンボルテーブル中のシンボルを発見する事によって セクション中のすべての参照を解決しようとします。 シンボルが異なるセクション中で見つかると、リンカは再帰的に 新しいセクション中の参照を解決しようとします。 すべての参照を解決するのに必要なこのセクション収集プロセスは、すべての参照が満たされるまで続きます。 もしシンボルが提供されたオブジェクトファイルのうちのいずれにも見つけられないと、リンカは 未定義のシンボルを示すエラーと共に処理を中止します。
すべてのセクションが見つかった後、複雑な参照と逆参照が処理されます。 この処理は、コンポーネントとマージモジュールがその親フィーチャーに留められる、あるいはマージモジュールの場合には、コンポーネントが ModuleComponents テーブルに追加される場所です。 逆参照処理は、Shortcut, Class, TypeLib のようなエレメントの為に 適切なフィーチャー識別子を必要なフィールドに追加します。
いったん全ての参照が解決されると、リンカは、言語、バージョン、参照されたファイルのハッシュを取得し、メディアレイアウトを計算し、上手くいくインストールシーケンスを保証する必要なスタンダードアクションを含んで、すべての列を処理します。 処理のこの部分は一般に、それらが最終的な Windows インストーラーデータベースに含められるのを保証する為に、エントリーセクションに関連して追加された付加的な列を生成する事になります。
最後に、light は IDT ファイルの生成とそれらを Windows インストーラーデータベースにインポートする仕組みを通して 働きます。 データベースが完全に作成された後、最終的なポスト処理は、必要なら いずれかのマージモジュールをマージしたり、キャビネットを作成して、成されます。 結果は、完全に機能する Windows インストーラーデータベースです。
light.exe [-?] [-b basePath] [-nologo] [-out outputFile] objectFile [objectFile ...]
Light は、以下のコマンドラインパラメーターをサポートしています:
スイッチ |
意味 |
-ai |
同一の行を許可する。同一の行は、警告として扱われます。 |
-au |
未解決の参照を許可する。これは無効なアウトプットを作成させます。 |
-b |
すべてのファイルを置くベースパスを指定する。デフォルト値はカレント作業ディレクトリーです。 |
-bf |
ファイルを wixout にバインドする。このスイッチは、-xo オプションも与えている時にだけ有効です。 |
-cc |
ビルドされたキャビネットファイルをキャッシュするパスを指定する。パスはリンクの後も消されません。 |
-ct <N> |
キャビネットを作成している時に使用するスレッドの数を指定する。デフォルトは %NUMBER_OF_PROCESSORS% 環境変数です。 |
-cultures:<cultures> |
.wxl ファイルとライブラリからロードするローカライズされた文字列のカルチャーのセミコロンかカンマで区切られたリストを 指定する。 カルチャーの優先は左から右です。 より多くのインフォメーションに関しては ビルドするカルチャーの指定 を見て下さい。 |
-cub |
実行する追加の internal consistency evaluators (ICEs) を含んでいる .cub ファイルを与える。 |
-d<name>=<value> |
WiX 変数を定義する。 |
-ext |
エクステンションアセンブリを指定する。 |
-fv |
MsiAssemblyName テーブル中の各アセンブリに FileVersion 属性を追加する。(たまにしか必要とされない) |
-loc <loc.wxl> |
ローカライズ文字列を読む .wxl ファイルを与える。 |
-nologo |
Light ロゴ情報の出力をスキップする。 |
-notidy |
リンクが完了した後に Light にテンポラリファイルを消去させない。(デバッグに役立つ) |
-out |
アウトプットファイルを指定する。デフォルトでは、Light はカレント作業ディレクトリに書きます。 |
-pedantic |
学者ぶった出力メッセージを表示する。 |
-reusecab |
キャビネットをリビルドする代わりに キャビネットキャッシュからキャビネットを再利用する。 |
-sa |
アセンブリを抑制する。アセンブリのアセンブリ名情報を受け取らない。 |
-sacl |
ACL のリセットを抑制する。(ネットワーク共有するイメージを準備している時に役立つ) |
-sadmin |
デフォルトの管理者シーケンスアクションの追加を抑制する。 |
-sadv |
デフォルトのアドバタイズシーケンスアクションの追加を抑制する。 |
-sdut |
出力イメージに実在しないテーブルを消す事を抑制する。このスイッチは、-xo スイッチが与えられている時にはデフォルトでセットされます。 |
-sice:<ICE> |
特定 ID の internal consistency evaluator (ICE) の実行を抑制する。 |
-sma |
MsiAssembly テーブル中のデータの処理を抑制する。 |
-sf |
ファイルを抑制する。あらゆるファイル情報を受け取らない。 このスイッチは、-sa と -sh スイッチの組み合わせに相当します。 |
-sh |
ファイル情報を抑制する。ハッシュ、バージョン、言語、その他のファイルプロパティを受け取らない。 |
-sl |
レイアウト作成を抑制する。 |
-ss |
ドキュメントのスキーマ検証を抑制する。このスイッチはリンクの間のパフォーマンス上昇を提供します。 |
-sui |
デフォルトの UI シーケンスアクションの追加を抑制する。 |
-sv |
中間ファイルのバージョンミスマッチチェックを抑制する。 |
-sval |
MSI/MSM バリデーションを抑制する。 |
-sw<N> |
特定のメッセージ ID での警告を抑制する。 |
-ts |
行の Tag sectionId 属性。このスイッチは、-xo スイッチが与えられている時にはデフォルトでセットされます。 |
-tsa |
行の Tag sectionId 属性と存在しない時の行の生成。このスイッチは、-xo スイッチが与えられている時にはデフォルトでセットされます。 |
-usf <output.xml> |
参照されないシンボルのファイルを指定する。 |
-v |
詳細な出力をする。 |
-wx |
警告をエラーとして扱う。 |
-xo |
MSI の代わりに XML アウトプットを生成する。 |
-? |
Light ヘルプ情報を表示する。 |
いくつかのプロパティは、リンカが最終的なアウトプットを、生成するかバインドする時まで 利用できません。 これらの変数は結合変数と呼ばれ、サポートされる結合変数は 下にリストアップされています。
以下の標準結合変数は、すべてのバージョン付きバイナリについて利用可能です。
変数名 |
使用例 |
値の例 |
bind.fileLanguage.FileID |
!(bind.fileLanguage.MyFile) |
1033 |
bind.fileVersion.FileID |
!(bind.fileVersion.MyFile) |
1.0.0.0 |
以下の標準結合変数は、(注釈を付けられている場所を除いて)すべてのマネージドとネイティブアセンブリについて利用可能です。ここで File/@Assembly 属性は ".net" か "win32" にセットされます。
変数名 |
使用例 |
値の例 |
bind.assemblyCulture.FileID |
!(bind.assemblyCulture.MyAssembly) |
neutral |
bind.assemblyFileVersion.FileID |
!(bind.assemblyFileVersion.MyAssembly) |
1.0.0.0 |
bind.assemblyFullName.FileID |
!(bind.assemblyName.MyAssembly) |
MyAssembly, version=1.0.0.0, culture=neutral, publicKeyToken=0123456789abcdef, processorArchitecture=MSIL |
bind.assemblyName.FileID |
!(bind.assemblyName.MyAssembly) |
MyAssembly |
bind.assemblyProcessorArchitecture.FileID |
!(bind.assemblyProcessorArchitecture.MyAssembly) |
MSIL |
bind.assemblyPublicKeyToken.FileID |
!(bind.assemblyPublicKeyToken.MyAssembly) |
0123456789abcdef |
bind.assemblyType.FileID |
!(bind.assemblyType.MyAssembly) |
win32 |
bind.assemblyVersion.FileID |
!(bind.assemblyVersion.MyAssembly) |
1.0.0.0 |
変数は、アウトプットファイルを WiX ローカライズファイルまたは .wxl ファイルからバインドする前に 渡され得ます。 このプロセスは製作者に、異なるローカライズパッケージを制作するために 1つ以上の .wixobj ファイルを種々の .wxl ファイルと一緒にリンクする事を可能にします。
ローカライズ変数は 以下の書式中です:
!(loc.VariableName)
WixVariable エレメントを使うか、あなた自身の変数名を以下の書式で単にタイプ入力する事によって、あなた自身の結合変数を作成できます:
!(bind.VariableName)
カスタム結合変数は、ローカライズ変数の使われ方と同様に、リンクしている時に 同じ .wixobj ファイルだけれど異なる値を指定して使用する事を 可能にします。 ターゲットプロセッサアーキテクチャを変えるように、種々のビルドのために結合変数を使用するかもしれません。