2011年11月30日水曜日

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

やはり、アクセス解析・Web最適化に携わっているとキャリアの中でどうしてもWindowsインストーラを作らねばならない瞬間に出くわすのでないかと私は思っている。
とはいえ、Windowsインストーラとはもはやある種のプログラミングであり、そうおいそれとマーケターの方々が作成できるものとは思えない。かくいう私も作ったことがないに等しい。

というわけで、いろいろググってみるとどうやらWindowsインストーラを作るためのツールは世の中に3つ存在するらしい。
  1. Install Shield
  2. Visual Studioセットアッププロジェクト
  3. Windows Install XML(WiX) toolset
うーん昔どれでもないインストーラ作成ツールを使った気がするけど・・まあいいや。
とにかく3つしかない。
そして、1と2は有料なので私のような貧乏人は必然的に3しか選べない。

というわけで、WiXのページにいってインストーラをダウンロードして・・・ってインストーラ作るのにインストーラをダウンロードしないといけないの?!という話はおいといて・・

インストールすると、
C:\Program Files\Windows Installer XML v3.5\bin
または
C:\Program Files (x86)\Windows Installer XML v3.5\bin
の中にcandle.exeとかlight.exeとかあるからこれ使います。

とりあえず第一歩、何もしないインストーラを作る。
こんな感じのxmlを書いて、
<?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
  <Product Name='Foobar 1.0' Id='YOURGUID-75B6-4D14-AEC1-97516A689CDE' UpgradeCode='YOURGUID-7349-453F-94F6-BCB5110BA4FD' Language='1033' Codepage='1252' Version='1.0.0' Manufacturer='Acme Ltd.'>
    <Package Id='*' Keywords='Installer' Description="Acme's Foobar 1.0 Installer" Comments='Foobar is a registered trademark of Acme Ltd.' Manufacturer='Acme Ltd.' InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' />
  </Product>
</Wix>

Sample.wxsって名前で保存してコマンドラインから
C:\temp> "c:\Program Files (x86)\Windows Installer XML v3.5\bin\candle.exe" Sample.wxs
Microsoft (R) Windows Installer Xml Compiler version 3.5.2519.0
Copyright (C) Microsoft Corporation. All rights reserved.

Sample.wxs
C:\temp\Sample.wxs(4) : error CNDL0009 : The Product/@Id attribute's value, 'YOURGUID-75B6-4D14-AEC1-97516A689CDE', is not a legal guid value.
C:\temp\Sample.wxs(4) : error CNDL0009 : The Product/@UpgradeCode attribute's value, 'YOURGUID-7349-453F-94F6-BCB5110BA4FD', is not a legal guid value.

うーん・・・GUIDっていうのをちゃんとふらないとダメらしい。
で、そのためにはMicrosoft Exchange Server GUID Generatorつーのがいるらしい。
あのーインストーラ作るために何個インストーラを実行すればいいんすかね?

はい、GUID直します。ついでにxmlのエンコードをutf-8にして、
LanguageとCodepageをそれぞれ1042・932にするとインストーラが日本語になります。
<?xml version='1.0' encoding='utf-8'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
  <Product Name='Foobar 1.0' Id='CA75EB30-3577-42ba-A9AA-9E7AD3B4B663' UpgradeCode='205E7C9B-779D-49d1-A4D8-F04622EC2F01' Language='1041' Codepage='932' Version='1.0.0' Manufacturer='Acme Ltd.'>
    <Package Id='*' Keywords='Installer' Description="Acme's Foobar 1.0 Installer" Comments='Foobar is a registered trademark of Acme Ltd.' Manufacturer='Acme Ltd.' InstallerVersion='100' Languages='1041' Compressed='yes' SummaryCodepage='932' />
  </Product>
</Wix>

さあ、じゃあ気を取り直して今度こそ。
C:\temp> "c:\Program Files (x86)\Windows Installer XML v3.5\bin\candle.exe" Sample.wxs
Microsoft (R) Windows Installer Xml Compiler version 3.5.2519.0
Copyright (C) Microsoft Corporation. All rights reserved.

Sample.wxs

C:\temp> "c:\Program Files (x86)\Windows Installer XML v3.5\bin\light.exe" Sample.wixobj
Microsoft (R) Windows Installer Xml Linker version 3.5.2519.0
Copyright (C) Microsoft Corporation. All rights reserved.

C:\Users\Kuniaki\AppData\Local\Temp\mrg45mhu\Sample.msi : warning LGHT1076 : ICE71: The Media table has no entries.

とすると、Sample.msiが完成。しかしこれはインストーラのテイをしてるけど
実際に動かしても何も起こりません。
ま、何の設定もしてないので当たり前っちゃ当たり前なんだが。

レジストリに登録してファイルを配置してショートカットを追加して云々・・・
やりたいことと現実のかい離がハンパじゃない。
続きは次回。

0 件のコメント:

コメントを投稿