WiXを利用したシンプルなインストーラーの作成 - WiXインストーラーにインストールファイルを追加する

Wixを利用したシンプルなインストーラーの作成手順を紹介します。

概要

こちらの記事では、何もしないWiXのインストーラーを作成しました。この記事では、WiXインストーラーにインストールファイルを追加し、ファイルを実際にインストールできるインストーラーを作成します。

事前準備

WiX Toolsetのインストール

WiX Toolset をインストールします。インストール手順の詳細はこちらの記事を参照してください。

WiX Toolset Visual Studio 2017 Extension のインストール

WiX Toolset Visual Studio 2017 Extension をインストールします。インストール手順の詳細はこちらの記事を参照してください。

何もしないWiXインストーラーの作成

WiXのSetup Projectを作成し、何もしないインストーラーを作成します。手順はこちらの記事を参照してください。

手順

Product IDの付与

Procduct.wxs ファイルのProductタグのIdの値が "*" になっていますので、こちらにGUIDを設定します。GUIDの生成手順についてはこちらの記事を参照してください。"*"を記述すると、GUIDは自動生成になりますが、明示的な値にしておいてたほうがおすすめです。
GUIDは "B8D21526-447C-49F6-9868-24EFCDB02C25" の形式でも "{B8D21526-447C-49F6-9868-24EFCDB02C25}"のように中括弧で囲った文字列のどちらもサポートしています。


ファイルの追加

続いてインストールするファイルをプロジェクトに追加します。今回は、ソリューションエクスプローラのプロジェクトの直下の位置にファイルを配置しました。ファイル名は"Document.txt"とします。ファイル内容は下図の通りです。


wxsファイルの編集

wxsファイルを編集します。

編集前 : Product.wxs

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="*" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="iPentec" UpgradeCode="ad714548-35da-4122-b92e-f4cff276ffc7">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

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

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

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="SetupProject1" />
      </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>

編集後 : Product.wxs

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="B8D21526-447C-49F6-9868-24EFCDB02C25" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="iPentec" UpgradeCode="ad714548-35da-4122-b92e-f4cff276ffc7">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

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

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

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

  <Fragment>
    <DirectoryRef Id="INSTALLFOLDER">
      <Component Id="Component1" Guid="{BE0399F6-8287-44B9-8252-8017A4935BBB}" DiskId="1">
        <File Id="File01" Name="Document.txt" Source="Document.txt"/>
      </Component>
    </DirectoryRef>
  </Fragment>

  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <ComponentRef Id="Component1" />
    </ComponentGroup>
  </Fragment>
</Wix>

解説

  <Fragment>
    <DirectoryRef Id="INSTALLFOLDER">
      <Directory Id="INSTALLFOLDER" Name="SetupProject1" />
      <Component Id="Component1" Guid="{BE0399F6-8287-44B9-8252-8017A4935BBB}" DiskId="1">
        <File Id="File01" Name="Document.txt" Source="Document.txt"/>
      </Component>
    </DirectoryRef>
  </Fragment>
上記コード部分が追加になります。インストールされるファイルに関する設定です。
  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <ComponentRef Id="Component1" />
    </ComponentGroup>
  </Fragment>
上記コード部には "ComponentRef"タグを追記します。Idには、先に記述した、"Component”タグのID "Component1"を指定します。
補足:mediaタグ
今回作成したwxsファイルには、Mediaタグの記述はなく、<MediaTemplate />タグを利用しています。MediaTemplate タグを利用することで、標準的なMediaの設定がなされます。

プロジェクトのビルド

プロジェクトをビルドします。Visual Studioの[ビルド]メニューの[ソリューションのビルド]をクリックします。


今回はファイルが存在するため、ワーニングは発生せずビルドが完了します。



ビルド出力先(プロジェクトディレクトリのbin\debug ディレクトリ)を確認します。msiファイルとcabファイルが出力されています。

インストーラーの実行

msiファイルを実行します。下図のウィンドウが表示され、ファイルのインストールが始まります。ファイルのインストールが完了すると、ウィンドウは閉じられます。


[プログラムと機能]のプログラムのアンインストールを表示します。今回作成した"SetupProject1"がインストールされているプログラム一覧に表示されています。


ファイルがインストールされているか確認します。Program Files ディレクトリ(64ビット版Windowsで x86の設定でWiXプロジェクトをビルドしていた場合は、Program Files (x86)ディレクトリ)の"SetupProject1"ディレクトリを開きます。


"SetupProject1"ディレクトリ内に、Document.txtファイルがインストールされていることが確認できます。


ファイル内容も問題ありません。

アンインストールの実行

アンインストールしてファイルが削除されるか確認します。
コントロールパネルの[プログラム]カテゴリの[プログラムのアンインストール]を開きます。下図の画面が表示されます。リストに先ほどインストールした"SetupProject1"がありますので、こちらをクリックして選択し、上部のツールバーの[アンインストール]をクリックします。


下図のダイアログが表示され、アンインストールの確認があります。[はい]ボタンをクリックしてアンインストールを開始します。


アンインストールが始まります。


アンインストールが完了すると、アンインストールできるプログラム一覧からも削除されます。


"Program Files"のディレクトリからも削除されていることが確認できます。


WiXを利用したシンプルなインストーラーを作成できました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2017-03-10
iPentec all rights reserverd.