1

我有一个InstallShield InstallScript MSI项目,其中包含没有软件管理器合并模块的FLEXnet Connect 。本产品的版本为 6.0.32。我为 6.1 版创建了第二个安装程序,其中还包含FLEXnet Connect without Software Manager 合并模块。当我在包含 6.0.32 版本的系统上执行重大升级时,我在 MSI 日志中收到一条消息,指出:

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

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

看起来此检查发生在6.0.32产品被移除之前。安装继续删除6.0.32产品,这将删除isusweb.dll. 由于组件版本检查,在6.1安装isusweb.dll过程中不会放回。

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

有没有办法让合并模块总是覆盖?

4

4 回答 4

2

这听起来很像这个错误:

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

我遇到了这个错误,您确实看到了该日志消息,并且 RemoveExistingProducts 在安装的早期。它决定不安装基于更高版本的文件,但在 REP 删除它后不会重新评估该决定。然后,当您使用快捷方式时,修复会恢复它。这个错误应该只适用于 GAC 或 SxS 中的文件,所以这有点令人费解。

如果您可以在应该修复它的事务序列(InstallExecute、REP、InstallFinalize)的末尾安排 REP - 可能值得一试,移动的所有其他效果都可以。

于 2014-04-12T17:59:17.857 回答
2

合并模块不会被安装,它们会被合并。已安装产品 MSI。使用第三方合并模块的问题之一是,如果它们有错误,那么您无能为力。

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

于 2014-04-13T00:19:05.687 回答
2

您已经得到了两个非常好的答案,但要尝试综合:

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

  • 从主设置中删除合并模块。
  • 创建一个新设置并添加错误的合并模块并确保正确的 REP 排序。

为了使 REP 修复工作,您的组件引用必须 100% 正确 - 现在和将来。为消除此问题,创建单独的设置允许您将错误模块包含在其自己的 MSI 中。这将帮助您避免在未来因错误或更改设计而重新激活错误 - 后者永远不会发生。

正如克里斯所说:合并模块没有交付,它被合并了。据我所知,更新的合并模块可能是可用的,但即便如此,包含它也是明智的。尤其是在处理 GAC(全局程序集缓存)时。

于 2014-04-13T14:32:31.757 回答
0

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

于 2014-04-14T09:17:13.010 回答