2010年2月17日水曜日

単一msiで多言語に対応したインストーラを作成してみる

InstallShieldとかを使わないと、インストーラの多言語対応は出来ないと思い込んでいた。というか世間的にそう思われてる?ちょっと検索しただけだと、無理というものが目に付く。Visual Studioで言語ごとにしかインストーラ作れないのがなあ。(これも思い込みかもしれないが)

少し本気で探してみると、下記のサイトが見つかった。アンドキュメントな方法ながらできるらしい。実際にこのとおりやってみたら、日、英、独に対応したmsiができたので、簡単にまとめてみる。
Multi-Language MSI Packages without Setup.exe Launcher

・Windows Installerの仕組み的にはどうなっているのか
ベースとなるmsiがあり、言語トランスフォーム(*.mst)を実行時にプロパティとして指定することで動作を変更できる仕組みがあるらしい。具体的には、下記のように指定できる。

msiexec.exe /i setup.msi TRANSFORMS=1041.mst

英語のsetup.msiに、日本語のトランスフォーム(1041.mst)を適用して表示言語を日本語に変えることが出来る。但し、mstファイルはmsiをベースに作成しておく必要がある。(各種ツールを利用)
InstallShieldなどのツールで多言語対応のSetup.exeを作成できるが、裏ではこんな動きをしているんだなと、初めて知った。

・実際に試してみる
前述のサイトの紹介されている方法は、実行時に指定するmstファイルをmsiに組み込んでしまうというもののようだ。地域と言語の設定が、mstファイルを組み込んだ言語になっている場合、自動でその言語で表示できるようになる。
  1. まず、mstファイルの組み込みに必要なスクリプトファイルを入手するため、Windows Installer SDKをインストールする。(これはPlatform SDKの一部として含まれている)
  2. 次に、デフォルト言語を英語にしてビルドしたmsiと、日本語とドイツ語のmstを作成する。動作検証をするのが主目的なので、手っ取り早くInstallShieldにて作成。
  3. [Windows Installer SDKのインストールフォルダ]\Samples\SysMgmt\Msi\Scripts内にある、WiSubStg.vbs及びWiLangId.vbsを、msiと同じフォルダにコピー。
  4. ここでスクリプトを実行。
  5. WiSubStg.vbs setup.msi 1041.mst 1041
    WiSubStg.vbs setup.msi 1031.mst 1031
    WiLangId.vbs setup.msi Package 1033,1041,1031
これで完了。地域と言語の設定をドイツ語にしてsetup.msiを起動すると、ちゃんとドイツ語で表示された。アンドキュメントな方法なので、心配な点はあるが、1つのmsiで多言語UIをサポートするインストーラが作成できることは確認できた。

0 件のコメント:

コメントを投稿