Installshield 升级带有额外组件的补丁

Installshield upgrade a patch with extra components

我们使用 Install Shield 构建 installs\releases。我遇到了这样一种情况,我们有一个补丁无法通过具有更高版本号的版本升级,即缺少补丁中包含的组件。

在发布完整的次要版本(即 7.2.0)后,我们发布了之前的完整次要版本(即 7.1.12)的补丁。

补丁 7.1.12 添加了 7.2.0 中不存在的文件和组件。该补丁不可卸载。

现在无法将 7.1.12 升级到 7.2.0,因为缺少组件。一些客户特别希望升级到 7.2.0 而不是可以添加组件来解决问题的更高版本 (7.3.0)。

除了卸载 7.1.12 然后安装 7.2.0,我找不到任何解决方案来修复。

有什么办法解决这个问题吗?我们能否构建一个 7.1.13 作为桥梁以某种方式修复错误。或者在安装 7.2.0 时使用参数来解决这个问题。

我查看了注册表,想弄清楚是否可以通过注册表删除组件。 我尝试删除注册表中的组件条目。那没有做到。 如果我删除注册表中有效的产品条目 - 但它一定是矫枉过正。
我还尝试从 C:\Windows\Installer 中删除补丁 msi,但没有成功。
仍然必须有一种方法可以在不删除整个产品的情况下取消组件与注册表中的功能的链接。

听起来你想做一系列Minor Upgrades, with at least 7.1.12 delivered as a patch. Using minor upgrades imposes various limitations; anything that requires you to Change the Product Code必须避免。在您的情况下,请注意添加组件是允许的,但反之则不行:

  • The update can add a new component to a new or an existing feature.

The product code must be changed if any of the following are true for the update:

  • A component is removed from an existing feature.

简而言之,除了添加新的功能组件树之外,对功能组件树的任何修改都需要更改产品代码,因此 Major Upgrade。主要升级在幕后执行卸载,因此对允许交付的更改的限制较少。

你有两个选择:

  1. 在安装新版本之前,使用主要升级或其他方式卸载旧安装。如果可能的话,这是我推荐的。使用较小的升级通常会增加更多的困难而不是好处(尽管您的需求可能不同)。
  2. 在较新版本中维护新组件。请注意,您不一定必须维护其中的资源:

    • The update can add, remove, or modify the files, registry keys, or shortcuts of components that are not shared by two or more features.

    但是您将不得不进行额外的更改以说明对资源的更改。在你的情况下,这可能需要添加到 RemoveFile table,并且可能最好由 "puncture component" 模式提供。

通过注册表探索修改 Windows 安装程序簿记的解决方法是个坏主意。它可能有效,可能看起来有效,也可能根本无效。在任何情况下都不支持。

如果 7.1.12 和 7.2.0 版本都已公开发布,那么您就处境艰难了。我认为最好的选择是使用新的产品代码和版本重新发布 7.2.0,例如7.2.1 重大升级。您可以建议您的最终用户,那些已经在 7.2.0 的用户不需要安装它。