Quantcast
Channel: プログラミング雑記
Viewing all articles
Browse latest Browse all 70

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

$
0
0
前回で 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=5REBOOT=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)作成
    dotNetInstallerによるシンプルBootstarpper作成
    WiX toolsetのBootstarpperを試してみた(1)
    WiX toolsetのBootstarpperを試してみた(2)Detect追加
    WiX toolsetのBootstarpperを試してみた(4)UI追加

      Viewing all articles
      Browse latest Browse all 70

      Trending Articles