WiX を使用して Windows インストーラー「MSI」を作成する part2

ページ作成日 :

はじめに

前回は必要なファイルの準備やプロジェクトの設定を行いました。 今回は「Product.wxs」を編集してインストーラーの各種設定を行います。

インストール設定 (Product.wxs) の編集

Product.wxsファイルの中身はXML形式で記述されています。 多数のパラメータがありますが、まずはインストーラーが作成できることを確認するため、ここでは最低限の設定を行います。 より細かく設定したい場合は別記事または公式サイトを参照してください。

プロジェクト作成時点では以下のようなコードになっています。

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="*" Name="SetupLittleSaviorTrial_x86" Language="1033" Version="1.0.0.0" Manufacturer="" UpgradeCode="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate />

    <Feature Id="ProductFeature" Title="SetupLittleSaviorTrial_x86" Level="1">
      <ComponentGroupRef Id="ProductComponents" />
    </Feature>
  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="SetupLittleSaviorTrial_x86" />
      </Directory>
    </Directory>
  </Fragment>

  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
      <!-- <Component Id="ProductComponent"> -->
      <!-- TODO: Insert files, registry keys, and other resources here. -->
      <!-- </Component> -->
    </ComponentGroup>
  </Fragment>
</Wix>

以下、変更すべき箇所について説明します。 存在していないタグや属性については追記してください。

Wix/Product/@Id

アプリケーションを識別するGUIDを設定します。

GUIDを生成するツールはいろいろありますが、Visual Studioに付属するツールを使用するのが手っ取り早いです。 メニュー「ツール」「GUIDの作成」を選択します。

image

ハイフンを含めた36桁のコードを取得して「Wix/Product/@Id」に設定します。

<Wix>
  <Product Id="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" />

Wix/Product/@Name

インストーラーの画面の各箇所に表示されるアプリケーション名となります。「プログラムの追加と削除」の一覧に表示される名前にもなります。

<Wix>
  <Product Name="リトルセイバー 体験版" />

image

image

Wix/Product/@Manufacturer

メーカーの名前を入力します。インストーラーの作成者やプログラム一覧の発行元に表示されます。

<Wix>
  <Product Manufacturer="ソーサリーフォース">

image

image

Wix/Product/UIRef/@Id

インストールウィザードでどのような画面を表示するかを識別するIDを入力します。 今回は使用許諾のみを表示させてインストールする最小構成なので「WixUI_Minimal」を指定しています。

<Wix>
  <Product>
    <UIRef Id="WixUI_Minimal" />

どのような指定ができるかは以下のサイトが参考になると思います。

WixUI ダイアログ セットの使用

Wix/Product/WixVariable/*

ウィザードのUIで使用するファイルを指定します。最小構成では以下の3つのファイルを使用します。 Idの値は固定で、Valueにファイル名を指定します。

<Wix>
  <Product>
    <WixVariable Id="WixUILicenseRtf" Value="license.rtf" />
    <WixVariable Id="WixUIDialogBmp" Value="dialog.bmp" />
    <WixVariable Id="WixUIBannerBmp" Value="banner.bmp" />

インストールに関するアプリケーションのアイコン

「プログラムの追加と削除」などに表示されるアプリケーションのアイコンに使用されます。

Icon要素の「SourceFile」にicoファイルをプロジェクトフォルダからの相対パスで指定します。

「Property Id="ARPPRODUCTICON"」がアイコンの関連付け定義です。

<Wix>
  <Product>
    <Icon Id="LITTLESAVIOR.ICO" SourceFile="LittleSaviorTrial\LittleSavior.ico" />
    <Property Id="ARPPRODUCTICON" Value="LITTLESAVIOR.ICO" />

Wix/Fragment (ファイル・フォルダの構成)

インストール先のフォルダ構成を設定します。本来ファイルも配置しますが、先にフォルダだけ作成します。

「Id="ProgramMenuDir"」に設定している「Name」の値はスタートメニューのショートカットに配置されるフォルダの名前となります。Guidも設定してください。

<Wix>
  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="SetupLittleSaviorTrial_x86" />
      </Directory>
      <Directory Id="ProgramMenuFolder">
        <Directory Id="ProgramMenuDir" Name="リトルセイバー 体験版">
          <Component Id="ProgramMenuDir" Guid="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX">
            <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
            <RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" KeyPath="yes" />
          </Component>
        </Directory>
      </Directory>
    </Directory>
  </Fragment>

インストールファイルの追加

Product.wxsファイルに手作業で追加することも可能ですが、 ファイルにGUIDが必要なこともありファイルが増えていくと作業が大変です。 そこでファイルの追加については「WixEdit」を使って追加します。

「WixEdit」を起動します。

image

Product.wxsファイルを開きます。

image

image

左のアイコンから「Files」を選択します。 「ProgramFilesFolder」の下階層のフォルダを削除します。

image

「ProgramFilesFolder」フォルダを右クリックして「Import Folder」を選択します。

image

インストールするファイルがあるフォルダを選択します。

image

ツリーにファイルが一式追加されます。

image

他のパラメータとの関連付けの為に、追加したフォルダを選択し「Id」を「INSTALLFOLDER」に設定しなおします。

image

スタートメニューのショートカット作成を行います。 exeファイルの右クリックメニューから「New」「Shortcut」を選択します。

image

Shortcutが追加されたら選択し、空欄を右クリックしてプロパティを追加していきます。

image

以下のパラメータを追加してください。(固有の名前はプログラムに合わせて直してください)

属性
Id LITTLESAVIORTRIAL.EXE_shortcut
Name リトルセイバー 体験版
Directory ProgramMenuDir
WorkingDirectory INSTALLDIR
Icon LITTLESAVIOR.ICO
IconIndex 0
Advertise yes

image

続いて「Feature」タブを選択、「ProductFeature」を右クリックして「Select Components to add」を選択します。

image

全て選択します。

image

追加されました。

image

保存します。

image

Product.wxsは以下のようになっているはずです。

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" Name="リトルセイバー 体験版" Language="1033" Version="1.0.0.0" Manufacturer="ソーサリーフォース" UpgradeCode="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate />
    <UIRef Id="WixUI_Minimal" />
    <WixVariable Id="WixUILicenseRtf" Value="license.rtf" />
    <WixVariable Id="WixUIDialogBmp" Value="dialog.bmp" />
    <WixVariable Id="WixUIBannerBmp" Value="banner.bmp" />
    <Icon Id="LITTLESAVIOR.ICO" SourceFile="LittleSaviorTrial\LittleSavior.ico" />
    <Property Id="ARPPRODUCTICON" Value="LITTLESAVIOR.ICO" />
    <Feature Id="ProductFeature" Title="SetupLittleSaviorTrial_x86" Level="1">
      <ComponentGroupRef Id="ProductComponents" />
      <ComponentRef Id="LITTLESAVIOR.ICO" />
      <ComponentRef Id="LITTLESAVIORTRIAL.EXE" />
      <ComponentRef Id="LITTLESAVIORTRIAL.EXE.CONFIG" />
      <ComponentRef Id="ProgramMenuDir" />
    </Feature>
    <UI />
  </Product>
  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="LittleSaviorTrial">
          <Component Id="LITTLESAVIOR.ICO" DiskId="1" Guid="0B4DD82C-C6EF-4299-8EAB-4F9BB35FD952">
            <File Id="LITTLESAVIOR.ICO" Name="LittleSavior.ico" Source="LittleSaviorTrial\LittleSavior.ico" />
          </Component>
          <Component Id="LITTLESAVIORTRIAL.EXE" DiskId="1" Guid="8D805936-A25E-4DA6-9A0A-A5BDB2AD768D">
            <File Id="LITTLESAVIORTRIAL.EXE" Name="LittleSaviorTrial.exe" Source="LittleSaviorTrial\LittleSaviorTrial.exe" KeyPath="yes">
              <Shortcut Id="LITTLESAVIORTRIAL.EXE_shortcut" Name="リトルセイバー 体験版" Directory="ProgramMenuDir" WorkingDirectory="INSTALLDIR" Icon="LITTLESAVIOR.ICO" IconIndex="0" Advertise="yes" />
            </File>
          </Component>
          <Component Id="LITTLESAVIORTRIAL.EXE.CONFIG" DiskId="1" Guid="790C427A-A72C-4444-ACD6-ECF32AA788AD">
            <File Id="LITTLESAVIORTRIAL.EXE.CONFIG" Name="LittleSaviorTrial.exe.config" Source="LittleSaviorTrial\LittleSaviorTrial.exe.config" />
          </Component>
        </Directory>
      </Directory>
      <Directory Id="ProgramMenuFolder">
        <Directory Id="ProgramMenuDir" Name="リトルセイバー 体験版">
          <Component Id="ProgramMenuDir" Guid="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX">
            <RemoveFolder Id="ProgramMenuDir" On="uninstall" />
            <RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="string" Value="" KeyPath="yes" />
          </Component>
        </Directory>
      </Directory>
    </Directory>
  </Fragment>
  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
    </ComponentGroup>
  </Fragment>
</Wix>

ビルドと実行確認

Visual Studioでソリューション構成を「Release」にします。

image

「ソリューションのビルド」からビルドを開始します。

image

正常にビルトが完了すると「bin\Release」フォルダ内にmsiファイルが生成されています。

image

実行してみるとインストーラーが起動します。

image

インストールが完了するとスタートメニューにショートカットが作成されます。

image

「Program Files (x86)」フォルダ内にファイルが配置されます。

image

「プログラムと機能」にもアプリケーションが表示されます。

image

アプリケーションを実行し正しく動作しているか確認してください。

image

まとめ

ここではVisual StudioとWiXを使ってMSIインストーラーを作成する手順を説明しました。 詳細な設定については別記事で説明したいと思います。