Windows OS上で、MSI形式のインストーラを作るには、いくつかの手段があります。以下記事などに詳しく紹介されています。
InstallShieldは有名ですが価格も高く、一番グレードの低いExpress版も10万円以上の価格がついています。
VisualStudioの機能も無償のExpress版には付いてないため、2010ならProfessional版でやはり10万円以上の価格がついています。
ということで、無償で作成できるWiXを使うことにします。
WiXは、現時点で安定版はバージョン3.5が公開されています。WiXを補完するツールとして無償のWixEditを使うとXML記述の手間を減らすことができます。この2つのツールを組み合わせてインストーラを作成するドキュメントを作成開始しました。
Wixメモ
WixUI_InstallDirと64bit OS
インストール先の選択を可能にするユーザーインタフェース(WixUI_InstallDir)において、デフォルトのインストール先がC:\Program Files (x86)\以下となる場合に、インストーラ実行時のインストール先指定ダイアログで、インストール先をC:\Program Files\以下に変更しても、実際にインストールされる先はC:\Program Files (x86)\以下となってしまいます。
なお、C:\tool\以下を指定した場合はそこにインストールされます。
msiexec コマンドにログ出力オプションを指定してインストールを実行してみたところ、関係しそうなログが採取できました。
msiexec /i hellowix.msi /lx log.txt
ログから該当しそうなところを抜粋します。
MSI (c) (C4:9C) [12:32:06:216]: PROPERTY CHANGE: Modifying HELLOWIX property. Its current value is 'C:\Program Files (x86)\hellowix\'. Its new value: 'C:\Program Files\hellowix\'. MSI (c) (C4:9C) [12:32:06:275]: WIN64DUALFOLDERS: 'C:\Program Files (x86)\' will substitute 17 characters in 'C:\Program Files\hellowix\' folder path. (mask argument = 0, the folder pair's iSwapAttrib member = 0). MSI (c) (C4:9C) [12:32:06:275]: In SetTargetPath, re-mapping 'C:\Program Files\hellowix\' to 'C:\Program Files (x86)\hellowix\' because this is a 32-bit package being installed on Win64.
なお、Wixのインストーラ(というかMSIインストーラ)は、32bit版と64bit版を別に作るというポリシーのようです。
64bit版MSIの作成
ディレクトリ要素で、Id="ProgramFilesFolder"としていた箇所を、Id="ProgramFiles64Folder"とします。
この状態で、candleコマンド、lightコマンドを実行すると、lightコマンドでエラーが生じました。
C:\work\hellowix\hellowix_x64.wxs(9) : error LGHT0204 : ICE80: This 32BitComponent HelloWix.cmd uses 64BitDirectory INSTALLDIR
candleコマンドのオプションに"-arch"があり、x64を指定できるので、これを追加してcandleコマンドを実行し、lightコマンドを実行したところ、エラーは発生しませんでした。
この問題について、ブログで触れている人がいました。
このブログの情報を参考に、ディレクトリ要素:Id="ProgramFiles64Folder"へインストールする設定を試行錯誤してみた結果、
のいずれかの方法で実現できました。
設定項目 | 方法1 | 方法2 | 備考 |
---|---|---|---|
candleコマンドラインオプション | -arch x64 | 不要 | |
Package要素のPlatform属性 | 不要 | x64 | |
Component要素のWin64属性 | 不要 | yes |
方法2だと、コマンドの実行方法を32bit版と変えずに済むのでよさそうですが、他に影響があるかは未確認です。