パッケージのチェーンを使用してWiXBurnをインストールしています。
更新は/passiveモードで実行され、ユーザーの操作は必要ありません。
最後のパッケージは更新時にのみ実行され、唯一の目的は実行可能ファイルを実行することです。これは、次のコードを使用して実行されます。
<!-- Quiet Execution Deferred execution with qtExec-->
<Property Id="QtExecDeferredExample" Value=""C:\Program Files (x86)\Acme Inc\MyApp.exe""/>
<CustomAction Id="QtExecDeferredExample" BinaryKey="WixCA" DllEntry="CAQuietExec"
Execute="deferred" Return="ignore" Impersonate="no"/>
<InstallExecuteSequence>
<Custom Action="QtExecDeferredExample" Before="InstallFinalize"/>
</InstallExecuteSequence>
ただし、MyApp.exeは起動しますが、MyApp.exeが終了するまでインストールは終了しません。明らかに、私はアプリを起動し、インストーラーがそれ自体を終了することを望んでいます。
インストールの完了後に実行するようにCustomActionを修正できません。
<Custom Action="QtExecDeferredExample" After="InstallFinalize"/>
次の理由で:
ICE77: QtExecDeferredExample is a in-script custom action.
It must be sequenced in between the InstallInitialize action and the InstallFinalize action in the InstallExecuteSequence table
どんなアイデアでもありがたいです。
更新:BrianJの答えは私を答えに導きます。@escistが問い合わせたように、私のCAの適切な部分は次のとおりです。
<!-- CA To set the property of the process to start-->
<CustomAction
Id ="SetProcessToStart"
BinaryKey ="WiXCustomActions"
DllEntry ="GetProcessToStart"
Execute ="immediate" />
<!-- CA to start the process-->
<CustomAction
Id ="StartApp"
Directory ="APPLICATIONROOTDIRECTORY"
ExeCommand ="[PROCESSTOSTART]"
Execute ="deferred"
Return ="asyncNoWait"/>
</Fragment>
</Wix>
および他の場所(このプロセスを開始した可能性のある私のアプリがいくつかあるため、そのパスはレジストリに保存されます)。
<Property Id="PROCESSTOSTART">[Not Set]</Property>
<InstallExecuteSequence>
<!-- Use our Custom Action to set the PROCESSTOSTART property-->
<!-- Custom Action to get the value from registry of the App that started the bootstrapper-->
<Custom Action="SetProcessToStart" Before="LaunchConditions">NOT Installed</Custom>
<!-- NOT installed ensures that the CA does not get fired on an uninstall -->
<Custom Action="StartApp" Before="InstallFinalize">NOT Installed</Custom>
</InstallExecuteSequence>