【问题标题】:REMOVE property not set during SetupComplete after MSI uninstall卸载 MSI 后在 SetupComplete 期间未设置 REMOVE 属性
【发布时间】:2017-09-17 06:55:41
【问题描述】:

我正在开发一个基本 MSI 类型的 InstallShield 项目。最后的SetupComplete 对话框中有一个自述文件复选框。我尝试在复选框和关联标签的Show 条件中添加条件REMOVE<>"ALL"。无法防止在卸载过程中出现自述文件复选框。我在同一个对话框中添加了一个绑定到 REMOVE 属性的文本框,卸载后它为空。

  1. 为什么在 SetupComplete 期间 REMOVE 属性为空,即使在卸载后也是如此?
  2. 有什么好的方法可以防止卸载后出现自述框?

【问题讨论】:

    标签: windows-installer installshield


    【解决方案1】:

    为什么在 SetupComplete 期间 REMOVE 属性为空,即使在卸载后也是如此?

    REMOVE=ALL 在 installvalidate 序列之前不可用。更多信息在这里:Conditioning Actions to Run During Removal

    有什么好的方法可以防止卸载后出现自述框?

    你的方法是正确的。将您的复选框和相应的文本Show 条件设置为NOT Installed(首次安装)。有关不同类型条件的更多信息,请参阅Common MSI Conditions Cheat Sheet

    【讨论】:

    • 我认为这个问题在 InstallValidate 之前不会发生。我认为它发生在 InstallFinalize 之后(在整个 exec 序列之后)。为什么在执行序列完成后不设置 REMOVE?此外,我确认卸载后此时已设置 Installed 属性。但我们也想在升级后显示自述文件。所以在那种情况下使用 Installed 属性是行不通的,对吧?
    • UI序列发生在InstallValidate(1400序列号)之前,在执行序列中;例如 SetupProgress 对话框为 1240(REMOVE 将不可用)。现在 SetupCompleteSuccess (-1) 是在执行序列 (InstallFinalize) 之后发生的事情,其中​​大多数变量被垃圾收集并且不可用。
    【解决方案2】:

    我从http://www.itninja.com/question/remove-the-setupcompletesuccess-dialog 了解到,SetupCompleteSuccess 对话框在其自己的序列中,它不会接收在其他序列中可用的许多变量。在该页面上,有人评论道:

    我相信标准安装期间 MSI 的执行顺序 看起来像这样:

    InstallUISequence (LaunchConditions -> ExecuteAction) -> 立即 “InstallExecuteSequence”(LauchConditions -> InstallFinalize)-> 延迟“InstallExecuteSequence”(InstallInitialize -> InstallFinalize) -> 立即“InstallExecuteSequence” (InstallFinalize -> End) -> InstallUISequence (ExecuteAction -> End)

    在“InstallExecuteSequence”期间设置的属性似乎是 在最后(后“ExecuteAction”)部分不可用 “安装UISequence”。

    该页面还建议使用_IsMaintenance 属性来替代在该阶段不可用的 REMOVE 属性。所以我使用_IsMaintenance <> "Remove"

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多