【问题标题】:Trigger uninstall and Repair of previously installed product触发先前安装的产品的卸载和修复
【发布时间】:2015-06-07 10:49:13
【问题描述】:

我是 Wix 工具集的新手。我已经成功地在 Wix 中制作了我的第一个安装程序,但现在我对我的软件更新感到困惑,这些更新通常是次要的。

在我的安装程序中,我想检查用户是否安装了任何旧版本,然后我想向他展示三个选项;

  1. 修改:将安装新版本。
  2. Repair:将修复以前安装的产品。
  3. 删除:这将删除已安装的产品。

对于修改,我可以简单地将 InstallReadyDlg 显示为下一个对话框,然后卸载以前的版本并安装新版本。

但我不知道如何触发卸载或修复以前安装的版本。

任何提示将不胜感激。

注意:我知道如何显示这些选项以及如何检测用户是否安装了任何旧版本。

【问题讨论】:

    标签: wix windows-installer wix3.8


    【解决方案1】:

    这不是通常的做法,因为:

    1. 在此上下文和对话框中,Modify 被普遍理解为添加或删除功能。

    2. 您无法从将要删除的已安装产品的对话框中正确执行升级。换句话说,您的计划很可能行不通,因为您需要浏览到新的 MSI(网站?CD?),然后从修改对话框中启动它(如何,当您显示当前产品对话框时?)然后尝试升级产品并显示对话框。

    因此,没有人会以这种行为进行安装,也没有人会期望这种非标准行为,而且它很有可能无法正常工作。

    话虽如此,这就是为什么您可以从您刚刚包含的内置 WiX UI 对话框中免费获得修改/修复/删除,因此您无需执行任何操作来修复、删除或修改已安装的功能以工作。这一切都在那里。

    已安装的产品会通过补丁升级(用于小修复)和重大升级,您只需将新 MSI 构建为全新产品并包含 MajorUpgrade 标记,这样如果安装了旧版本,它将删除旧版本.只需安装新产品(从 CD、网站或其他任何地方),它始终是全新的完整安装,由于该 MajorUpgrade 元素,它会升级和删除任何以前的版本。

    【讨论】:

    • 可能是我没有很好地解释自己。基本上,全新安装后,当我再次运行相同的 msi 文件时,它会显示修改/修复/删除选项。但是当我创建一个新的安装程序(一个新版本)时,我想要那个相同的 MaintenanceDlg 而不是一个全新的安装向导。并且修复和删除按钮显然应该完成他们的工作。
    • MSI 无法到达那里。根据定义,维护对话框是当前安装产品的对话框。为什么要运行新的 MSI 来修复已安装的旧 MSI?那是不进行安装的新MSI?您想要的根本不是 MSI,而是带有该对话框的应用程序,修复按钮执行已安装产品的 MsiReinstallProduct,删除执行 MsiConfigureProduct(不存在),更新(我不会说修改)提供浏览到最好是重大升级的新 MSI 文件,只需 MsiInstallProduct 就可以了。
    猜你喜欢
    • 2021-12-19
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多