Quiet Execution CustomAction,即wixca.dll中的QtExec自定义动作,他可以执行命令行。
Immediate execution
<Property Id="QtExecCmdLine" Value="command line to run"/>
<CustomAction Id="QtExec" BinaryKey="wixca" DllEntry="CAQuietExec" Execute="immediate" Return="check"/>
<Binary Id="wixca" src="wixca.dll"/>
.
.
.
<InstallExecuteSequence>
<Custom Action="QtExec" After="TheActionYouWantItAfter"/>
</InstallExecuteSequence>
这将导致及时执行命令行。如果命令行的退出码出错(非0),由于Return值设为"check",将导致安装失败。如果你不想引起安装失败,可以修改该值为"ignore"。(还会记录日志)
如果你想及时运行多条命令行,在执行每一个命令行之前,你需要多次派配QtExec以及设置QtExecCmdLine的属性值。
Deferred execution
你也可以通过设置自定义动作的data属性来延期运行命令行。如果代码以及时模式运行,它将试图执行QtExecCmdLine的value,如果代码以延期模式运行,它将试图执行custom action data的value。custom action data是与custom action同名的属性。下面是一个延期执行命令行的例子:
<Property Id="QtExecDeferred" Value="command line to run"/>
<CustomAction Id="QtExecDeferred" BinaryKey="wixca" DllEntry="CAQuietExec" Execute="deferred" Return="check"/>
<Binary Id="wixca" src="wixca.dll"/>
.
.
.
<InstallExecuteSequence>
<Custom Action="QtExecDeferred" After="TheActionYouWantItAfter"/>
</InstallExecuteSequence>