windows-installer - InstallShield 由于卸载错误而失败

标签 windows-installer upgrade installshield

我正在构建一个 InstallShield 项目,该项目对现有安装进行[重大升级][1](即我更改了产品代码,同时保留升级代码) >).

先前版本(已部署)的卸载程序已损坏,并且无法运行某些脚本。这本身并不是一个严重的问题,因为所有相关文件都已预先删除。

问题是,当新安装程序尝试卸载以前的版本时,它会在卸载程序失败时中止。我尝试设置“失败时继续”标志(媒体-->升级-->MajorUpgrade-->高级-->其他设置),但没有效果。

问题:

  • 有没有办法配置 IS 以静默删除以前的版本?
  • 如果没有,我可以编写一些自定义 VB 操作来静默卸载以前的版本吗?

编辑

不确定这是否相关,但以下是以前的卸载程序的问题:

安装顺序包括一些自定义操作。其中两个调用可执行文件,这些可执行文件又安装一些设备驱动程序。显然,它们应该仅在安装正在进行时运行。不幸的是,以前的设计者没有设置“NOT REMOVE”条件,这会导致操作在卸载操作期间运行。因此卸载程序失败(因为它找不到驱动程序可执行文件)。

最佳答案

这更像是一条评论,而不是一个答案,但它对于评论来说太长了。

一般来说,真正的修复是创建次要升级(或次要升级补丁)来“修复”卸载顺序中的错误,然后卸载以正常方式安装产品(无论是主要升级卸载还是手动触发卸载,都可以正常工作)。这是可能的,因为次要升级不会卸载现有产品(失败的卸载自定义操作将永远不会运行),而只是“就地”更新产品(或覆盖它)。这允许您在调用之前修复卸载序列中的任何错误。

我已多次成功使用此方法来修复企业软件包中的严重错误,这些软件包可能具有大量已安装实例,并且卸载顺序严重失败。然而,这并不是一件小事——它需要时间和测试努力。我通常也会将更新作为补丁提供,但小幅升级就足够了(修补很复杂)。

最简单的方法对于您的次要升级包可能是设置一个条件,该条件对于所有失败的卸载自定义操作始终为 false,以便它们永远不会运行一旦实际触发卸载。这显然会在盒子上留下“一些垃圾”,但您也许可以忽略它,或者最好将其清理干净。但要小心清理代码 - 它往往包含新的错误,您必须在适当的时候处理这​​些错误。部署是一个过程,其中每个添加的发布周期、错误修复和调整都会为意外错误带来新的可能性,从而为下一个版本增加新的复杂性和不可预测性。让事情尽可能简单。简而言之:更多的东西可能会损坏,但不会带来任何好处。如果不这样做的话,如果出现操作问题,一定要清理干净。

我不会详细介绍如何实现小升级。 Installshield 帮助文件在这个主题上非常有用,应该可以帮助您完成任务。我会进行更新,除了更改卸载操作的条件之外,什么也不做。

一旦您进行了次要升级,您需要使用适当的命令行来应用它,或者只使用 Installshield 的 setup.exe 来为您执行此操作。再次查看 Installshield 帮助文件(“Run-Time Behavior for Minor Upgrades ” - 此帮助页面应该满足您的所有需求)。

在没有 setup.exe 包装器的情况下应用次要升级的命令行通常是:

msiexec.exe /i product.msi REINSTALLMODE=vomus REINSTALL=ALL

如果您在没有 setup.exe 包装程序的情况下通过 msiexec.exe 手动安装,则为 REINSTALLMODE 添加 v 选项 非常重要。这会在系统上缓存新的 MSI,对于小型升级的正常工作至关重要 - 特别是对于修复卸载顺序的目的。

Applying Minor Upgrades 的 MSDN 文档.

关于windows-installer - InstallShield 由于卸载错误而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46914999/

相关文章:

用于解压缩文件的 Wix 自定义操作

ruby-on-rails - 如何说服我的经理升级 Rails 3 |我应该升级到 rails 3

c# - 'CrystalDecisions.CrystalReports.Engine.ReportDocument' 的类型初始值设定项抛出异常

installshield - 如何使用 InstallShield LE2013 升级/覆盖上一版本?

installation - 微星 : How to check that product is actually installed

vbscript - 我的 MSI 安装程序的 vbscript 有什么问题?

.net - 如何抑制对话框

maven 未在 ubuntu 14.0.4 上更新

asp.net-core - 从 ASP.NET Core 2.2 升级到 3.0

windows-installer - 为 MSI 包设置最小磁盘空间