2017年11月10日金曜日

WiX toolsetのBootstarpperを試してみた(3)msiexecパラメータ設定

前回で Bundle から msi の UI を使ってのインストール/アンインストールができるようになった。今回は Bundle のブートストラッパ―で設定したパラメータを用いて msi を起動し、msi側で言語切り替えを行うようにする。
  • Bundle の子要素にVariablesタグ追加
    <Bundle ...>
    <Variable Name="TRANSFORMS" 
         Value=":ja-JP.mst" Type="string" bal:Overridable="yes"/>
    • Bundleエンジンに変数を追加する。
      Name:変数名。
      Value:初期値。この例では必ずBootstarpperで設定するので、Valueは別の値でもよい。
    • bal:Overridable="yes": Bootstarpperで変更できるように"yes"に設定する。
      • bal namespace が認識されない場合はWixタグに次のxmlnsを追加
        xmlns:bal="http://schemas.microsoft.com/wix/BalExtension"
        
        
  • MsiPackage 要素変更
  • <Chain>
        <MsiPackage ....>
            <MsiProperty Name="TRANSFORMS" Value="[TRANSFORMS]" />
        </MsiPackage>
    </Chain>
    
    
    • Name:msi 作成プロジェクトの Product.wxsのPropertyタグのIdと同じ名前。
      msiexecの起動パラメータとして使われる。
      <Property Id="TRANSFORMS" Value="Default" />
      
    • Value="[TRANSFORMS]":BundleのVariableのTRANSFORMSの値で置換される。
      
      
  • MyBootstrapper.csのRunメソッド変更
    次のようなコードで Variable TRANSFORMS の値をセットする。
    if (CultureInfo.CurrentUICulture.TwoLetterISOLanguageName == "ja")
    {
        this.Engine.StringVariables["TRANSFORMS"] = ":ja-JP.mst";
    }
    else
    {
        this.Engine.StringVariables["TRANSFORMS"] = "";
    }
    
    
  • MySetup.exe実行これらの設定、コードの変更後、MySetup.exeを実行するとMyAppSetup.mstを起動するmsiexecのパラメータに
    TRANSFORMS=":ja-JP.mst"、またはTRANSFORMS=""が追加される。
  • ログ出力
    Bundleのログに、次のように書き出される
    • Installの場合:
      Applying execute package: MySetup.msi, action: Install, 
          path: C:\Users\UserName\AppData\Local\Package Cache\{GUID}v1.0.1\MyAppSetup.msi, 
          arguments: ' ARPSYSTEMCOMPONENT="1" MSIFASTINSTALL="7" 
          TRANSFORMS=":ja-JP.mst"
      
      
    • Uninstallの場合:
      Applying execute package: MySetup.msi, action: Uninstall, 
          path: (null), 
          arguments: ' ARPSYSTEMCOMPONENT="1" MSIFASTINSTALL="7" 
          TRANSFORMS=":ja-JP.mst"
      
      
    • Valueが空文字の場合は TRANSFORMS="" となる。
これでmsiのUIを使ったインストールは実現できたが、アンインストールはサイレントで実行される。

TRANSFORMSと同様にmsiexecのパラメータ UILevel、CLIENTUILEVEL を設定してみたが、Bundleが CLIENTUILEVEL=3 (サイレント)をその後ろに付けるため有効にならない。アンインストール実行確認ダイアログや、アンインストール完了時のメッセージ表示などのUIはBootstarpperで用意する必要がある。
  • アンインストール時のmsiexecのログ
    ARPSYSTEMCOMPONENT=1 MSIFASTINSTALL=7 TRANSFORMS=:ja-JP.mst 
        UILevel=5 CLIENTUILEVEL=5 REBOOT=ReallySuppress IGNOREDEPENDENCIES=ALL 
        REMOVE=ALL CURRENTDIRECTORY=C:\WINDOWS\system32 
        CLIENTUILEVEL=3 MSICLIENTUSESEXTERNALUI=1 CLIENTPROCESSID=6296
    
    
    • UILevel=5 CLIENTUILEVEL=5 はMsiPropertyで設定したもの。burnが設定するCLIENTUILEVEL=3が有効になる。
関連ブログ
VisualStudio 2017 Community & WiX tools & WiX Edit によるWindowsアプリ インストーラ(msi)作成
WiX toolset msi ダイアログ多国語対応
dotNetInstallerによるシンプルBootstarpper作成
WiX toolsetのBootstarpperを試してみた(1)
WiX toolsetのBootstarpperを試してみた(2)Detect追加
WiX toolsetのBootstarpperを試してみた(4)UI追加

0 件のコメント: