1

我有一个使用 InstallShield 2012 创建的安装程序。我现在需要允许用户在卸载过程中选择运行自定义操作。

为了实现这一点,我目前在我们的一个对话框中添加了一个复选框。该复选框与属性相关联,默认设置为“True”(“Value”设置为“1”)。在 PropertyManager 中,已添加值为“1”的属性。

对于自定义操作,条件设置为REMOVE="ALL" AND MyCheckboxProp=1。运行安装程序时,该复选框最初处于选中状态。但是,查看日志我可以看到,即使复选框切换到未选中状态,条件始终评估为 True。

当复选框未选中时,安装程​​序日志报告:

PROPERTY CHANGE: Deleting MyCheckboxProp property. Its current value is '1'.

起初我想知道这个问题是否与该操作以“延迟执行”运行的事实有关。但是,即使使用“立即执行”运行测试操作,我也可以看到条件始终评估为“真”。

正如上面所预期的,显示属性值的测试操作显示它始终为“真”。

有没有我错过的步骤?

4

1 回答 1

2

缺少的关键概念是解释 MSI 的 Windows Installer 组件实际上具有公共、私有和受限公共属性的概念。

在这种情况下,用户界面和执行阶段都会引用属性值。公共属性的文档指出:

在安装期间由用户界面设置然后传递到安装执行阶段的属性必须是公共的。

要将属性标记为公共,应指定名称仅包含大写字母(请参阅对属性名称的限制)。在问题中给出的示例中,属性名称包含一些小写字母,因此被解释为私有。

将属性标记为公共的另一个好处是它允许在命令行上设置该属性,然后可以在执行静默安装时指定它。

于 2013-10-03T10:43:39.097 回答