wix の Bootstrapperで作成し、署名した インストーラーから msi を 取り出す方法
題名のとおりです。
WIX の bootstraperでビルドした bundle に insignia.exe と signTool.exe を使って署名して出来上がった署名済みのbundle から mis を取り出します。
発端
パッチを作ろうとしたら、パッチ前の msi が必要なのだけど残していませんでした。
手元にあるのは署名済みのbundle だけなので、bundle から msi を取り出す必要がでてきました。
Using Patch Creation Properties
署名の方法
署名の方法はここを参考にしました。
wix3.6 - How do I use insignia.exe to codesign a wix bundle - Stack Overflow
ビルドは Visual Studio2012を利用しています。 Bootstrapperのプロジェクトの Post-build event で下のコマンドを実行しています。
署名に必要な証明書は globalsignで取得しました。
del /q engine.exe
"C:\Program Files (x86)\WiX Toolset v3.8\bin\insignia.exe" -ib $(TargetPath) -o engine.exe
"c:\Program Files\Microsoft Platform SDK\bin\SignTool.exe" sign /f certificate.pfx /p パスワード /t http://timestamp.globalsign.com/scripts/timstamp.dll engine.exe
"C:\Program Files (x86)\WiX Toolset v3.8\bin\insignia.exe" -ab engine.exe $(TargetPath) -o installer.exe
"c:\Program Files\Microsoft Platform SDK\bin\SignTool.exe" sign /f certificate.pfx /p パスワード /t http://timestamp.globalsign.com/scripts/timstamp.dll signed_installer.exe
msiを取り出す
signed_installer.exe から msi を取り出すには wix に含まれている dark.exe を使います。使い方は下のリンクにあるとおりです。
wix3.6 - Unpack WIX Burn bundle - Stack Overflow
今回、実行したコマンドはこうなります。
mkdir c:\unpack
C:\Program Files (x86)\WiX Toolset v3.8\bin\dark.exe" -x c:\unpack signed_installer.exe
コマンド実行後に、c:\unpack\AttachedContainer ディレクトリに取り出されたmsiがあります。