huruyosi’s blog

プログラミングとかインフラとかのメモです。

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があります。