はじめに
多言語対応のWindows Installer(MSI)を作成した手順が複雑だったので、成功した方法をメモ。
今回は日本語版のWindowsでは日本語が表示され、それ以外では英語が表示されるようなインストーラーを作成した。
Windows Installerの作成概要
WiXToolsetというWindows Installer を作成するツール群が用意されており、割と簡単にWindows Installer(msi拡張子のやつ)を作成することができる。
簡単に作成手順を説明すると..
-
wxsファイル(xml形式のインストーラーのソースのようなもの)を用意する。
test.wxs
-
heatコマンドでインストールするファイルのフラグメント作成する。(
test_files.wxs
が生成される)>> heat.exe c:\InstallerFilesPath`
-
candleコマンドで中間ファイル(wixobj)を生成する。
>> candle.exe test.wxs -out test.wixobj >> candle.exe test_files.wxs -out test_files.wixobj
-
lightコマンドでインストーラー(msiファイル)を生成する。
>> light.exe test.wixobj test_files.wixobj -out installer.msi
多言語化したWindows Installerの作成概要
-
wxsファイルを用意する。言語に関する箇所を修正する。(以下は単言語版から修正した箇所の抜粋)
test.wxs<Wix> <Product Language="1033"> <Package Launguages="1033,1041" /> <Directory> <Merge Language="1033" /> ... </Wix>
このあたりの1033や1041はWindowsのregion IDみたいなものでここにテーブルがある。
2. heatコマンドでインストールするファイルのフラグメント作成する。 (test_files.wxs
が生成される)
```shell
>> heat.exe c:\InstallerFilesPath
```
-
candleコマンドで中間ファイル(wixobj)を生成する。
>> candle.exe test.wxs -out test.wixobj >> candle.exe test_files.wxs -out test_files.wixobj
-
lightコマンドで英語版インストーラー(msiファイル)を生成する。
>> light.exe test.wixobj test_files.wixobj -cultures:en-US -out installer_en.msi -pdbout installer_en.wixpdb
-
lightコマンドで日本語版インストーラー(msiファイル)を作成する。
>> light.exe test.wixobj test_files.wixobj -cultures:ja-JP -out installer_jp.msi -pdbout installer_jp.wixpdb
-
torchコマンドで英語版と日本語版の差分を抽出
>> torch.exe -t language installer_en.msi installer_jp.msi -out 1041.mst
-
wisubstg.vbs で差分ファイルを統合する。(wisubstg.vbsはwindows sdkのインストールフォルダにある。)
>> cscript wisubstg.vbs installer_en.msi 1041.mst 1041
これで日本語以外のWindowsでは英語で、日本語Windowsでは日本語が表示されるインストーラーが作成できた。
4または5のlightコマンドでlight.exe : error LGHT0309 : Failed to open merge module for validation.
が発生する場合は、WindowsのOS言語設定をen-USに変更すると動いた。
#参考サイト