Directory
Directoryエレメントの使い方
Windows InstallerでDirectoryを定義する際には、必ずルートをTARGETDIRというIdで作成します。引き続きPart.2で例示したフォルダ構造を使います。
この構造をWiXのソースで表現すると、例えば次のように書くことができます。
1: <Directory Id="TARGETDIR" Name="SourceDir">
2: <Directory Id="ProgramFilesFolder">
3: <Directory Id="PRODUCT1FOLDER" Name="Product1">
4: <Directory Id="DataFolder" Name="Data" />
5: </Directory>
6: </Directory>
7: </Directory>
1行目はどのインストーラーにも存在する決まり文句です。Directoryエレメントが構成する階層構造のルートのIdは必ずTARGETDIRプロパティ1です。SourceDir1はインストールを実行したときに、インストール物のファイルをどのフォルダからコピーしてくるか指定するプロパティです。インストール実行時にカスタムアクションで内容を変更することも可能ですが、".cab"ファイルの置き場所もMediaエレメントで制御できるので、利用する機会はないでしょう。
2行目はシステムで定義済みのProgramFilesFolderプロパティを指定します。システムで定義済みのプロパティは、System Folder Propertiesに一覧があります。この一覧を見れば分かるように、Windows Installerでは使えるフォルダが少なく困ることもあります2。そのようなときは、WiXがシステムからパスを取得する仕組みを用意しているので、これを使います。例えば、共有ドキュメントへのパスが欲しいときは次のようにします。
Visual Studioのプロジェクトの下のReferencesの下にWixUtilExtension.dll3を追加。
そして、WiXのソースに下記の行を追加。
<PropertyRef Id="WIX_DIR_COMMON_DOCUMENTS" />
これだけで、共有ドキュメントへのパスが格納されたWIX_DIR_COMMON_DOCUMENTSプロパティが利用可能になります。Directoryエレメントで利用する際には、Idにこのプロパティを指定します。他のパスも必要であれば、PropertyRefエレメントを追加していきます。利用可能なプロパティはこちらを参照してください。
3行目のIdは全て大文字で名付けてあります。こうするとId部分がPublic Propertyとして扱われ、msiexecのコマンドラインにパスを指定できるようになります。この仕組みを利用することで、フォルダのパスを".msi"の外部から与えることが可能になります。例えば下記の様にインストールを開始します。
msiexec PRODUCT1FOLDER=C:¥TESTDIR /i Part3_01.msi
そうすると、下図のようにインストールされます。
Directoryエレメントの階層構造を構成する上で基本的な考え方は次のようになります。
- 階層のルートはIdがTARGETDIRの決まり文句を配置
- その子階層にシステムが定義するプロパティをIdにしてDirectoryエレメントを配置
- その子階層にインストールする製品が必要としている名前でDirectoryエレメントを配置
32bit版Windowsと64bit版Windowsで利用可能なDirectory
Windows Installerを利用したインストーラーでは、32bit版Windowsと64bit版Windowsの両方で利用可能な32bit版インストーラーと、64bit版Windowsだけで利用可能な64bit版インストーラーが存在します。32bit版インストーラーを64bit版Windowsで利用すると、64bit用のフォルダや64bit用のレジストリにアクセスできません。そのため、システムが定義するプロパティのうち64bit版が存在するものには注意が必要です。以下にProgramFilesFolderとProgramFiles64Folderの例を示します。
- ProgramFilesFolderプロパティが指し示すパス
32bit版Windows | 64bit版Windows | |
---|---|---|
32bit版インストーラー | C:¥Program Files | C:¥Program Files (x86) |
64bit版インストーラー | インストーラー 起動不可 |
C:¥Program Files (x86) |
- ProgramFiles64Folderプロパティが指し示すパス
32bit版Windows | 64bit版Windows | |
---|---|---|
32bit版インストーラー | プロパティ 利用不可4 |
プロパティ 利用不可4 |
64bit版インストーラー | インストーラー 起動不可 |
C:¥Program Files |
Windows Installerにはこのような制約があるため、32bit版インストーラーと64bit版インストーラーの両方を作成することもあります。さらに製品として配布するために、OSが32bit版か64bit版か判別して適切なインストーラーを起動する、セットアップランチャーを開発することもあります。