Wix 3.6で巨大ファイルを含む多言語対応インストーラを作成中

いろんな課題をいっぺんに解決しようとしたから大変でした。

  • インストーラは多言語対応
  • インストール時にSQLサーバのデータファイルをアタッチしたい
    • ただし、データファイルはログファイル、セカンダリファイルを含む
  • Windowsサービスをインストールし、インストール後に起動したい
  • 2Gを超えるデータファイルをインストーラに含めたい

言語化

多言語はBootstrapを使って対応。実はここは後輩がやってくれたのでまだよくわかってないです。キャッチアップしておかなきゃ。

SQL Serverデータファイルの配置

SQL Serverのデータファイルの配置については、カスタムアクションを考えていたけど拡張ライブラリで対応できるようです。

.NET, Sitecore and setup development: Attach / Detach database during installationという記事が参考になりました。
配置はいいのですが、権限の問題がついて回ります。この記事だと

<util:PermissionEx GenericAll="yes" User="NetworkService" />

で解決していましたが、ぼくの環境では

<CreateFolder>
 <Permission Domain="NT AUTHORITY" User="NetworkService" GenericAll="yes" />
</CreateFolder>


でいけました。

Windowsサービスのインストール

つづいて、サービスのインストールですが、

                <File Id="HogeExe" KeyPath="yes" Source="Hoge.exe" />

                <ServiceInstall Id="HogeServiceInstall"
                                DisplayName="Hoger Service"
                                Name="HogeService"
                                ErrorControl="normal"
                                Start="auto"
                                Type="ownProcess"
                                Vital="yes"
                                Interactive="no"
                                />

                <ServiceControl Id="HogeServiceControl"
                                Name="HogeService"
                                Start="install" Remove="uninstall"
                                Stop="both"
                                />
              
              </Component>

ServiceInstall と ServiceControl のNameを同じにするのがポイントらしいです。

巨大ファイルのアーカイブ

さて、最後に、Cab形式だと2Gを超えるファイルをアーカイブできないことがわかりました。PackageタグのCompress属性をnoにするとインストーラ自体の圧縮がかからないですが、インストーラに含まれるファイルがmsiの外にたくさんできてしまいます。さすがにこれでは配布に困るので、これを自己解凍+自動実行形式の7zipをつかって、後からまとめることにしました。今回は商用利用なので、Explzhなどは使えず、コマンドラインで対応することにします。

ここはやねうらおさんの記事を参考にしました。2006年の記事ですが、いまもやり方は変わらないようです。

この圧縮作業はビルドイベントに入れて自動的に行うようにしました。

その他

ダイアログが、自己解凍+BootStrap+インストーラの三個も出るのが気持ち悪いですね。自己解凍のところは多言語化できないし。