Windows Installer XML toolset によるインストーラーの作成
さて、現在作っているアプリをインストールできるように、
インストーラーを作成しているのですが、これがさっぱり分かりません。
ついてくるドキュメントは英語で読みにくいし、ネットを探して出てくるドキュメントも
難解だったりまとまってなかったり。
しょうがないので今回は自分でまとめてみることにしました。
(あぁ、今回はいつものブログとは違ってデスマス調だ。。。微妙にやりにくい)
1.Windows Installer XML toolset の準備
まずは最初に Windows Installer XML toolset をダウンロードしてインストールします。
下記のサイトからダウンロードできます。
http://sourceforge.net/projects/wix/files/
現在は 3.0.5419.0 が最新版なので、こちらをベースに話を進めていきます。
(wix3.0.5419.0-x86-setup.zipをダウンロードしてインストール)
※Windows Installer XML toolset をインストールする前に、ProjectAggregator というものを
インストールしておくと、Visual Studio 2005/2008 Standard Edition 以上の人は
Visual Studio 内に WiX のプロジェクトが作成できるようになるそうです。
でもウチのは Visual Studio 2008 Express Edition なんだよね。。。
ProjectAggregator まで含めた使い方はこちらのサイトが参考になります。
Harvest の実行
それでは早速 WiX を使ってみるのですが、まず、作っているプロジェクトからWiXの原型を作ってくれる
Harvest というコマンドがあります。実際のファイル名は heat.exe です。
このプログラムを使用して元となるXMLファイル(拡張子 wxs)を作成します。
以下、HelloWorld プロジェクトでの実行例を記載します。
"C:\Program Files\Windows Installer XML v3\bin\heat.exe" project "HelloWorld.csproj" -pog:Binaries -gg -out HelloWorld.wxs
細かい引数の指定は付属のHelpファイルに書いてあるのですが、
このHelpファイルの中の例は、引数の順番がぬけぬけと間違っていたりします。
プロジェクトファイルの指定は project 引数の直後にして下さい。
以下、簡単に引数の説明です。
引数 | 説明 |
---|---|
project | 何を元に WiX のXMLファイルを作成するかを決めます。今回はVisualStudioのプロジェクトをベースに作成したので project を指定します。 |
プロジェクトファイル名 | 次に元となるプロジェクトファイルのファイル名を記載します。このファイル名は必ず project 引数の直後に記載して下さい。 |
-pog | 実際にインストールする対象が何かを指定します。今回は Binaries を指定しています。 |
-gg | ソフトウェアを一意に識別するGUIDを自動生成します。 |
-out | 出力する XML のファイル名を指定します。直後にファイル名を記載して下さい。 |
そして、この操作後に以下のような HelloWorld.wxs が生成されます。
<?xml version="1.0" encoding="utf-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Fragment> <DirectoryRef Id="HelloWorld.Binaries"> <Component Id="cmp********************************" Guid="{********-****-****-****-************}"> <File Id="fil********************************" Source="$(var.HelloWorld.TargetDir)\HelloWorld.exe" /> </Component> </DirectoryRef> </Fragment> <Fragment> <ComponentGroup Id="HelloWorld.Binaries"> <ComponentRef Id="cmp********************************" /> </ComponentGroup> </Fragment> </Wix>
wxs ファイルの編集
説明が遅くなりましたが、今回はとりあえず「HelloWorld.exe が Program Files フォルダに
あったら、なんかインストールされったぽくね?」ということで、
exe ファイルを Program Files 以下に置くことを目標にします。
実際のファイル内容の説明については、別ブログで書くとして、
今回はこのようなファイルを作成します。
<?xml version="1.0" encoding="utf-8"?> <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> <Product Id="*" Language="1041" UpgradeCode="{********-****-****-****-************}" Manufacturer="safsa" Name="HelloWorld" Version="0.1.0.0"> <Package InstallerVersion="100" /> <Media Id="1" /> <Directory Id="TARGETDIR" Name="SourceDir"> <Directory Id="ProgramFilesFolder"> <Directory Id="HelloWorld.Binaries" Name="HelloWorld" /> </Directory> </Directory> <DirectoryRef Id="HelloWorld.Binaries"> <Component Id="cmp********************************" Guid="{********-****-****-****-************}"> <File Id="fil********************************" Source="bin\Debug\HelloWorld.exe" /> </Component> </DirectoryRef> <ComponentGroup Id="HelloWorld.Binaries"> <ComponentRef Id="cmp********************************" /> </ComponentGroup> <Feature Id="MainApplication" Title="HelloWorld" Level="1"> <ComponentRef Id="cmp********************************" /> </Feature> </Product> </Wix>
exe ファイルを debug から持ってきたりと、あやしい動きのところもありますが、
今回はあくまで実験&勉強ということで御容赦を。
candle(コンパイラ)の実行
wxs ファイルが出来上がったら、まずはコンパイラである candle を実行して、
オブジェクトファイルである wixobj ファイルを作成します。
candle は引数なしで実行できます。
"C:\Program Files\Windows Installer XML v3\bin\candle.exe" HelloWorld.wxs
このコマンドが正常に終了したら、 HelloWorld.wixobj というファイルが出来上がります。
リンカの実行と msi ファイルの作成。
ここまできたら、後は light コマンドを使ってリンクと msi ファイルの作成になります。
"C:\Program Files\Windows Installer XML v3\bin\light.exe" -out "HelloWorld.msi" HelloWorld.wixobj
これでフォルダを確認すると、HelloWorld.msi というインストール用のファイルができ上がります。
エクスプローラーで見えない場合は、「最新の情報に更新」を忘れずに。
実際にインストールしてみる。
それでは実際にインストールを行ってみましょう。
作成された HelloWorld.msi を実際に実行してみます。
、、、えーと、なんだか画面にインストールのウィンドウは開いたみたいですが、
何事もなく終わってしまいました。しかし、Program Files を見ると
HelloWorld フォルダに HelloWorld.exe がインストールされていることが分かります。
成功!!
また、プログラムの追加と削除にも当然アプリがでてきますので、
こちらでアンインストールすることもできます。