WiX:在一些对话之后和CostFinalize之前安排自定义操作

时间:2013-08-27 10:57:11

标签: wix installer windows-installer

我有一个自定义操作,比如说CA1,它适用于从对话框输入的PIDKEY,比如Dlg1。根据PIDKEY的值,CA1将一些值写入属性,而某些组件将该属性作为其条件的一部分。因为CA1需要PIDKEY并且组件条件是在CostFinalize评估的,所以CA1必须放在Dlg1之后和CostFilnalize之前。(Dlg1 - > CA1 - > CostFinalize)

但似乎除非我手动编写这些操作的序列号,否则CostFinalize(InstallUISequence和InstallExecuteSequence中的 1000 )操作始终位于InstallUISequence中的Dlg1( 1297 )之前)。所以,我只是在 CostFinalize和Dlg1 之前安排了CA1(在InstallExecuteSequnce中)。(CA1 - > CostFinalize - > Dlg1)有趣的是,虽然我预期会有错误的结果,但它的工作方式与我预期的完全相同。 / p>

我检查了日志文件,它显示了与MSI表完全不一致的订单(Dlg1 - > CA1 - > CostFinalize)。我不明白发生了什么,想知道如何通过查看MSI表(InstallUISequence和InstallExecuteSequence)来确定最先出现的操作。

2 个答案:

答案 0 :(得分:1)

InstallExecuteSequence中的所有操作都是在您按下“Install”按钮后执行的,因此在您通过Dlg1后。

链接文章中解释了

The execution of the custom and standard actions from an MSI,其中包含更多详细信息和一些图形。

答案 1 :(得分:0)

您应该考虑PIDKEY输入错误或无效的可能性。因此,我将使用DoAction ControlEvent从对话框的Next按钮调用自定义操作。执行SpawnDialog以显示错误(如果它无效)并允许转换到下一个对话框(如果有效)。

还应在InstallExecuteSequence中安排自定义操作,以允许支持静默安装。如果PIDKEY证明无效,请使用Type 19 Error自定义操作中止安装。