wix:如何防止用户在安装或升级应用程序期间重新启动计算机

时间:2016-07-06 10:58:52

标签: c# installation wix windows-installer

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

如果我们通过在安装启动后调度RemoveExistingProducts来实现回滚选项,它会在机器重启后恢复安装\更新吗?

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

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

更新

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

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

    根据阅读不同的论坛,似乎只有在卸载现有版本时出现故障才会在wix中进行回滚。 所以,我的问题是: 如果在安装新版本期间出现任何错误,它是否会回滚到现有版本?

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

  3. 那么,在升级过程中是否会导致应用程序被卸载?或者还有其他可能吗?

1 个答案:

答案 0 :(得分:1)

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

如果RemoveExistingProducts(REP)就在InstallInitialize之后,那么它就在事务中,并且升级失败将导致回滚升级,这包括回滚REP并安装以前安装的产品。但是,这是许多安装不进行测试的情况,如果无法重新安装产品,则不会导致安装任何产品。这与重新启动无关,只是回滚REP基本上是旧产品的静默安装,需要恢复所有必要属性并使自定义操作正常运行。如果您的客户在升级失败后未发现任何安装,那么这似乎是您的问题。

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

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

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