2011年12月3日土曜日

WiXによるWindowsインストーラ作成方法2

続き。
とりあえず空のインストーラを作るところまではたどり着いたわけなんだが、これでは何もインストールできないので、当然何の意味もない。なのでこのインストーラにファイルを含める。

まず最終形を示してしまうと、こんな感じ。
<?xml version='1.0' encoding='utf-8'?>
<wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <product codepage="932" id="CA75EB30-3577-42ba-A9AA-9E7AD3B4B663" language="1041" manufacturer="Acme Ltd." name="Foobar 1.0" upgradecode="205E7C9B-779D-49d1-A4D8-F04622EC2F01" version="1.0.0">
    <package comments="Foobar is a registered trademark of Acme Ltd." compressed="yes" description="Acme's Foobar 1.0 Installer" id="*" installerversion="100" keywords="Installer" languages="1041" manufacturer="Acme Ltd." summarycodepage="932"/>
    <media cabinet="Sample.cab" embedcab="yes" id="1"/>
    <directory id="TARGETDIR" name="SourceDir">
      <directory id="ProgramFilesFolder">
        <directory id="INSTALLDIR" name="Foobar 1.0">
          <component guid="0E5230BA-ACB3-4761-BAC4-4EE7F5A05E43" id="MainExecutable">
            <file diskid="1" id="FoobarEXE" keypath="yes" name="WindowsFormsApplication1.exe" source="WindowsFormsApplication1.exe"></file>
          </component>
        </directory>
      </directory>
    </directory>
    <feature id="Complete" level="1">
      <componentref id="MainExecutable"/>
    </feature>
  </product>
</wix>


一番最初はWix/Product/Packageという3つの要素だけがあるシンプルなモノだったのだが、ファイルを含めるとなるともう少し込み入った設定が必要になる。
まずはMedia要素。これはファイルをインストーラに含める場合には必ず必要な模様。
次、Directory要素。 このあたりはもうチュートリアルを見まくる。
TARGETDIRてのはおまじない的に必要であり、ProgramFilesFolderはウインドウズに事前定義された
Program Filesフォルダの参照であり、ようやくその下にアプリ用Directory要素の定義ができる。

そしてインストールディレクトリの下にはComponent要素。これは、ファイルであったりレジストリエントリであったりそういうもろもろを含めてComponentというようだ。今回はファイルだけど。あと、1Componentにつき1Fileとすべきなんだって。理由は不明だがチュートリアルの言葉に従う。

そして最後にFeature要素。
これは直訳すれば、
「すでにディレクトリ構造やインストーラに含むファイルの一覧は定義済みなので、
最後のステップとしてWindowsインストーラにファイルインストールの支持をする必要がある。
Feature要素はそのためにあり、そこに論理的なピースを個別にわけてインストール可能なように記述できる」
らしい。
たぶんいかついインストーラを書くときはこれが重要になってくるんだろうが、
(各Componentの配置順序やらなんやら)
いかんせん今はどうでもいい。

というわけで、ファイル配置まで完成。あとはレジストリ書き込み。
これもComponent要素を使うようなんだが、続きは次回。