【问题标题】:wix: How to prevent user from restarting machine during the installation or upgrading of applicationwix:如何防止用户在安装或升级应用程序期间重新启动机器
【发布时间】:2016-07-06 10:58:51
【问题描述】:

当更新\安装发生时机器可能正在关闭/重新启动/注销,这可能会损坏安装。

如果我们通过在InstallInitialize 之后安排RemoveExistingProducts 来设置回滚选项,它会在机器重新启动后恢复安装\更新吗?

如果 wix 中有一种方法可以防止用户在安装\升级期间重新启动和注销?

我们如何让 wix 安装程序在重启后甚至在突然关机后(通过硬件)恢复其剩余的工作?

更新

我们为客户部署了一个桌面应用程序。我们的客户可以自动升级到最新版本。我们的应用程序将下载最新版本的 msi 并在后台静默运行 msiexex.exe 命令,以便用户无需执行任何操作。所有的事情都会在后台默默地完成。它工作得很好。现在,我们的一些客户抱怨他们之前有 v2.1,但现在它已经消失了。我们正在考虑以下可能的情况:

  1. 在升级过程中,会下载最新版本的 MSI,并由应用程序本身在后台使用命令 MSIEXEC.exe 调用它。已安装(现有)版本的卸载已完成,但新版本的安装失败,这两个版本均已从计算机上卸载。

    根据阅读不同的论坛,似乎只有在卸载现有版本失败时才会发生 wix 中的回滚。 所以,我的问题是: 如果新版本安装过程中出现错误,是否会回滚到现有版本?

  2. 由于用户永远不会知道应用程序的更新正在进行,因为它将在静默模式下完成,因此用户可能会在升级期间重新启动或关闭他们的计算机。所以,我最初的问题是:如果机器在安装过程中重新启动或关闭,安装是否会损坏。就像您说的那样,如果所有事情都是事务性的并且旨在随时从重新启动中恢复,那么这对我们有好处。那么,你的意思是我们不必自己处理这种情况吗?会被wix自动处理吗?

那么,是否是第一种情况导致应用程序在升级过程中被卸载?或者还有其他可能吗?

【问题讨论】:

    标签: c# installation wix windows-installer


    【解决方案1】:

    Windows Installer 在重新启动后重新启动就好了,即使重新启动是在安装阶段。如果安装需要,甚至有一个 ForceReboot 操作来强制执行此操作,并且设置了一个 AFTERREBOOT 属性来检测安装期间是否有重新启动。

    如果 RemoveExistingProducts (REP) 刚刚在 InstallInitialize 之后,则它在事务中,升级失败将导致回滚升级,这包括回滚 REP 和安装之前安装的产品。然而,这是许多安装都没有测试的场景,重新安装产品失败将导致两个产品都无法安装。这与重新启动无关,只是回滚 REP 基本上是对旧产品的静默安装,需要恢复所有基本属性和自定义操作才能正常运行。如果您的客户在升级失败后发现没有安装任何东西,这似乎是您的问题。

    如果 REP 在 InstallFinalize 之后,则它在事务之外。这意味着安装了新产品,交易完成,然后卸载旧产品,如果失败,您将同时安装新旧产品。

    如果您使用 WiX 和捆绑软件来安装或升级多个 MSI,则有一个回滚边界来控制在一系列 MSI 中回滚的程度。

    同样,是否重新启动并不重要 - Windows Installer 可以处理这个问题,而且看起来您的回滚未能重新安装原始产品。您应该使用完整的详细日志进行升级(如果您控制命令行并可以添加日志记录选项,则 IMO 应该是默认的)。日志应显示升级期间的任何故障。

    【讨论】:

    • 谢谢。我已经更新了这个问题。请在更新部分查看我的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    相关资源
    最近更新 更多