InstallShield中动态取消ControlEvent

Dynamically cancel ControlEvent in InstallShield

我正在使用 InstallShield 2013 SP1。在对话框中,我在 Next 按钮上有以下 ControlEvents:

Event     | Argument       | Condition
__________|________________|___________________________
NewDialog | CustomSetup    | CANCEL_NAVIGATION <> "1"
DoAction  | MyCustomAction | _IsSetupTypeMin = "Custom"

想法是 MyCustomAction 执行它的操作,然后如果应该取消 NewDialog 事件,则将 属性 CANCEL_NAVIGATION 设置为 1。但是,在执行自定义操作之前评估条件,因此即使设置了 CANCEL_NAVIGATION,新对话框也会生成。

如果之后无法评估条件,或无法以任何方式规避此行为,则可以使用其他一些解决方案,例如在下一个评估 属性 的对话框中执行另一个自定义操作并重新启动第一个对话框。

禁用 Next 按钮不是一个选项,因为我的对话框的行为是在按下 Next 时启动文件选择 window(如果满足某些条件) ,并且仅当此对话框被取消时,导航到下一个 window.

我考虑过在对话框中添加一个按钮来启动文件选择对话框,但这个答案不会被接受,因为我更希望描述的行为保持不变。

事实证明,我误解了 ControlEvents 的顺序。出于某种原因,我认为它们是从下到上评估的,因为即使上面配置了 NewDialog,我的 DoAction 也会被评估。切换线路解决了我的问题:

Event     | Argument       | Condition
__________|________________|___________________________
DoAction  | MyCustomAction | _IsSetupTypeMin = "Custom"
NewDialog | CustomSetup    | CANCEL_NAVIGATION <> "1"