主要升级期间合并模块安装失败

时间:2014-04-12 14:14:55

标签: installer windows-installer installshield merge-module

我有一个 InstallShield InstallScript MSI 项目,其中包含 FLEXnet Connect ,没有Software Manager合并模块。该产品的版本是6.0.32。我为版本6.1创建了第二个安装程序,该安装程序还包含 FLEXnet Connect ,没有Software Manager合并模块。当我在包含6.0.32版本的系统上执行主要升级时,我在MSI日志中收到一条消息,说明:

Disallowing installation of component: {FF970098-B748-427B-B946-AA8E1A1F82AD} since the same component with higher versioned keyfile exists

该组件引用位于 FLEXnet Connect文件夹中的isusweb.dll文件。

看起来此检查发生在6.0.32产品被移除之前。安装将继续删除6.0.32产品,该产品将删除isusweb.dll。在6.1安装期间,由于组件版本检查,isusweb.dll未被放回。

升级成功。当我尝试从快捷方式运行应用程序时,它会验证组件。由于缺少isusweb.dll MSI尝试修复,因此无法找到MSI并且不允许应用程序打开。

有没有办法让合并模块始终覆盖?

4 个答案:

答案 0 :(得分:2)

这听起来像这个错误:

http://support.microsoft.com/kb/905238/en-us

我发现了这个错误,你确实看到了日志消息,而RemoveExistingProducts是安装的早期版本。它决定不根据存在的更高版本安装文件,但在REP删除之后不会重新评估该决定。然后,当您使用快捷方式时,修复将恢复它。该错误应仅适用于GAC或SxS中的文件,因此有点令人费解。

如果您可以在应该修复它的事务序列(InstallExecute,REP,InstallFinalize)结束时安排REP - 可能值得一试,此举的所有其他效果都可以。

答案 1 :(得分:2)

合并模块未安装,它们会合并。产品MSI已安装。使用第三方合并模块的一个问题是,如果他们有错误,你就无法做到这一点。

我考虑仅为了封装此MSM而创建MSI。然后,我创建一个安装先决条件或套件安装程序,以便在您的产品MSI之外安装此MSI。

答案 2 :(得分:2)

你已经有了两个非常好的答案,但尝试合成:

这听起来像是一个有缺陷的合并模块。 Phil 建议修复InstallExecuteSequence中的REP位置以解决此问题。 Chris 建议将错误的合并模块放在自己的设置中。我同意这两点,并认为你应该遵循这两个建议:

  • 从主设置中删除合并模块。
  • 创建新设置并添加有故障的合并模块并确保正确的REP排序。

要使REP修复工作,您的组件引用必须100%正确 - 现在和将来。要消除此问题,创建单独设置的问题允许您将错误模块包含在其自己的MSI中。这将有助于您避免在将来错误地或通过更改设计重新激活错误 - 后者绝不可能。

正如Chris所说:合并模块未交付,它已合并。我所知道的所有人都可以使用更新的合并模块,但即使这样,包含它也是明智之举。特别是在处理GAC(全局程序集缓存)时。

答案 3 :(得分:0)

我遇到此错误时应用的另一个解决方案是设置为使用Orca在合并模块中从File表更新“Version”列。将其设置为最大65535.65535.65535.65535,这将强制升级始终从合并模块安装DLL。