0

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

但似乎除非我手动编写这些操作的序列号,否则 CostFinalize( InstallUISequence 和 InstallExecuteSequence 中的1000)操作总是在 Dlg1( InstallUISequence 中的1297)之前。所以,我刚刚在CostFinalize 和 Dlg1之前安排了 CA1(在 InstallExecuteSequnce 中)。(CA1 -> CostFinalize -> Dlg1) 有趣的是,虽然我预期的结果是错误的,但它完全符合我的预期。

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

4

2 回答 2

1

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

链接的文章中解释了从 MSI 执行自定义和标准操作,其中包含更多详细信息和一些图形。

于 2013-08-27T14:05:48.110 回答
0

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

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

于 2013-08-27T14:41:12.447 回答