【问题标题】:WIX suppress uninstall dialog when doing a major upgrade?WIX 在进行重大升级时抑制卸载对话框?
【发布时间】:2015-08-09 11:41:52
【问题描述】:

在我们产品的一个安装程序版本中,我添加了一个自定义对话框(由 CA 使用 session.Message() 显示),在卸载时询问用户是否要保留他的一些数据。

CA 将条件设置为REMOVE="ALL" AND NOT WIX_UPGRADE_DETECTED。 该对话框在进行正常卸载时会正确显示,但在重大升级时删除现有产品时也会出现。此时,安装程​​序挂起,只能从任务管理器中关闭,导致升级不正确。

包含问题的安装程序版本已经发货。 我们可以在下一个安装程序版本(进行重大升级)中包含一些东西,以解决删除现有产品时的对话框问题吗?

【问题讨论】:

    标签: wix windows-installer installation


    【解决方案1】:

    属性 UPGRADINGPRODUCTCODE 是在旧产品卸载时设置的。 WIX_UPGRADE_DETECTED 在检测到时在传入的新升级设置中设置。

    REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE 的条件似乎是您想要的,在卸载期间显示对话框,但在卸载是由于重大升级时不显示。

    【讨论】:

    • 感谢您的建议。我现在知道了,我已经在新版本上相应地设置了标志。问题出在以前的版本上,它已经带有错误的标志。
    • Chris 的答案是您所需要的 - 更改缓存的 MSI,或构建小升级以更新损坏的已安装产品。
    【解决方案2】:

    您需要修复原始版本的缓存 MSI。在静默安装事务期间不应有任何 UI。您需要复制原始构建的 MSI,将其修改为不执行该自定义操作,然后使用 msiexec /I foo.msi REINSTALL=ALL REINSTALLMODE=vomus 重新缓存它,然后才能进行主要升级。或者,告诉您的用户先进行卸载。这就是您应该在投入生产之前测试您的服务策略的原因。 MSI 就像一架飞机……没有停止或返回按钮。你总是在前进,你必须做出相应的计划。

    【讨论】:

    • 我在较新版本(主要升级)中创建了一个 CA,它按照您的描述调用 msiexec(使用更正后的 msi)。该操作在 FindRelatedProducts 之后运行,但由于某种原因,缓存的 msi 未被替换并且升级崩溃。但是当我尝试从控制台应用程序调用 msiexec 时,缓存的 msi 被正确替换。你知道为什么会这样吗?
    • MSI 有一个互斥锁,可以防止两个并发安装。一个 msi 无法安装另一个 MSI(有效的重新缓存是)。您需要在运行新的 MSI 之前运行该命令。
    • 我猜在安装主要升级之前,我必须以某种方式从捆绑包中运行 msiexec 命令。或者,你的意思是我必须创建一个单独的应用程序来运行命令?
    • 对。问题是我不知道 WiX BA 是针对该问题而设计的。这将是一个棘手的问题要解决。使用应用程序向您的客户“哎呀”(将其视为升级准备)可能是回到正轨的最简单解决方案。
    • 我是这么认为的。问题是,我设法通过创建一个单独的小升级来解决这个问题,该升级安装了固定的 msi(不修改任何其他内容)。但我想知道是否可以仅使用一个安装程序进行修复。无论如何,感谢您的时间和帮助!
    猜你喜欢
    • 1970-01-01
    • 2011-02-27
    • 2014-05-16
    • 1970-01-01
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    相关资源
    最近更新 更多