【问题标题】:How do you conditionally run an Installshield custom action based on a property set by a dialog?您如何根据对话框设置的属性有条件地运行 Installshield 自定义操作?
【发布时间】:2013-10-03 08:29:39
【问题描述】:

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

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

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

取消选中该复选框时,安装程​​序日志报告:

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

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

如前所述,显示属性值的测试操作显示它始终为“真”。

有没有我遗漏的步骤?

【问题讨论】:

    标签: installshield


    【解决方案1】:

    缺少的关键概念是解释 MSI 的 Windows Installer 组件实际上具有 public, private, and restricted public properties 的概念。

    在这种情况下,用户界面和执行阶段都会引用属性值。 documentation for public properties 声明:

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

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

    将属性标记为公共的另一个好处是它允许属性为set on the command line,然后可以在执行静默安装时指定它。

    【讨论】:

    • 阅读:msdn.microsoft.com/en-us/library/windows/desktop/… 如果属性不是全大写,则不会从客户端上下文跨到服务器上下文,除非您将其添加到 SecureCustomProperties。
    • 太好了!感谢您的链接,它使事情变得更加清晰。我会尝试更新答案以反映其中的一些内容。
    • 您还希望该属性是一个安全的公共属性,以便在静默安装方案中通过命令行传递它。
    • 感谢您的帮助。我已经更新了答案以使其更清晰,但如果我遗漏了什么,请随时编辑它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多