本格的なものを作るならWiXのBurnを用いてBundleを作ることができるが、その場合はUIをBundle側のBootstrapperに移し、msiはBootstrapperの設定にしたがってUIなしで実行するのが本道のようだ。となると、せっかくmsiを多国語対応した意味がなくなるので
、このmsiを利用するシンプルなBootstarpperを作りを試みた。
ちなみにWiXでmsiにActionを追加することができるが、これはmsiが起動したあとで使われるので、起動時の言語切り替えには使えなかった。
まずはmsiとは別のexeを作り、そこからWindowsのCulture設定に従いmsiを起動する方法。例えば次のようなコードでコンソールアプリを作ればよい。
static void Main(string[] args)
{
FileInfo msiFileInfo = new FileInfo(Directory.GetParent(Assembly.GetExecutingAssembly().Location) + "\\MyAppSetup.msi");
if (!CultureInfo.Exists) {
if (CultureInfo.CurrentCulture.Name == "ja-JP")
{
System.Diagnostics.Process.Start(msiFileInfo.FullName, "TRANSFORMS=\":ja-JP.mst\"");
}
else
{
System.Diagnostics.Process.Start(msiFileInfo.FullName);
}
}
この方法の問題点はmsiとexeの二つが存在し、msiを直接起動することもできてしまうことだ。言語切り替えだけであれば実質的な問題はないとも言えるが、できれば一本化したい。
dotNetInstaller
探してみたところ dotNetInstaller というオープンソフトがあった。公式ページではV2.3(Windows8対応)までだが、GitHubからはV2.4(Window10 対応)をダウンロードできる。
dotNetInstallerダウンロード
git.hubサイト (dotNetInstaller 2.4)
dotNetInstaller公式サイト
dotNetInstallerも本格的なインストーラ作成に対応しているが、ここでは単に言語切り替えを実現するだけ。dotNetInstallerの設定でmsiをsetup.exeに組み込みこむ。setup.exe実行で、これをTempフォルダに展開し、展開後msiexecでmsiを実行する。このとき、日本語の場合、そうでない場合の二つの構成を用意しておき、言語設定に応じて使い分ける。
この方法については次のWebページで紹介されており、サンプルもダウンロード可能。
dotNetInstaller には非常に多くの設定がありますが、今回関係したところいがいはよくわかりません。
dotNetInstallerはconfigurationファイルを作成するInstaller Editorと、exeを作るコマンド InstallerLinker.exe からなる。
dotNetInstallerはconfigurationファイルを作成するInstaller Editorと、exeを作るコマンド InstallerLinker.exe からなる。
Installer Editor / Configurationファイル作成
準備
手順を単純化するため、どこかに作業フォルダを作成し、MySetup.msi をコピーする。
コマンドプロンプトを起動し、そのフォルダに移動しておく。InstallerLinker.exe 起動はここから行うことし、以下の定数#APPPATHはこの場所を指す。
dotNetInstaller起動
dotNetInstallerをインストール後、スタートメニューからInstaller Editor起動。
File > New
- Logging > log_enabledをTrueに変更(推奨)
log_fileの場所に出力される。 - #TEMPPATHは標準では次の場所
C:\Users\UserName\AppData\Local\Temp - UI > ui_levelをsilentに変更(デバッグ中はbasicでもよい)
- Locale > lcidtype を User(またはUserExe以外)に変更
- Language > lcid_filterを”1041”(日本語)に設定
- Runtime > complete_commandに次のコマンドを入力
msiexec /i #CABPATH\MySetup.msi TRANSFORMS=":ja-JP.mst" - #CABPATHはdotNetInstallerが作成するTempフォルダ。標準では次の場所。
C:\Users\UserName\AppData\Local\Temp\{GUID} - "ja-JP"の部分は定義済み定数”#OSLOCALE”で置換可能だが、msiに組み込まれているmstと一致しないとエラーになる。
- UIを表示させる場合は、少なくともメッセージのAPPLICATION_NAMEを変更する。
- Main Dialog > dialog_show_installed をFalseに変更
- Runtime > show_progress_dialogをFalseに変更(Trueでもよい)
- sourcefilepathに次のパスを入力
#APPPATH\MySetup.msi - targetfilepathにMySetup.msiを入力。
#CABPATHからの相対パスで、別の名前でもよく、またサブフォルダを加えることもできるが、msiexec のパラメータと一致させること。
- Setup Configuration以下の手順を繰り返し、もうひとつSetup Configurationを追加する。
- Language > lcid_filterを"!1041"(日本語以外)に設定
- Runtime > complete_commandに次のコマンドを入力(TRANSFORMSなし)
msiexec /i #CABPATH\WavCutterSetup.msi
- File > Save または Save As で準備で作成したフォルダ内に保存
- 標準では次のフォルダにインストールされている。
C:\Program Files (x86)\dotNetInstaller\bin - 次の要領でInstallerLinker.exeを実行する。
>set linkerFolder="C:\Program Files (x86)\dotNetInstaller\bin"
>%linkerFolder%\InstallerLinker.exe /o:setup.exe /t:%linkerFolder%\dotNetInstaller.exe /c:configuration.xml /v+ - setup.exeが出力される。
0 件のコメント:
コメントを投稿