我有一个 InstallShield InstallScript MSI 包含 FLEXnet连接 没有软件管理器合并模块。本产品的版本是6.0.32。我为版本6.1创建了第二个安装程序,其中还包含 FLEXnet连接 没有软件管理器合并模块。当我在包含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连接文件夹.

看起来这个检查发生在 6.0.32 产品被移除。安装继续删除 6.0.32 产品,其去除 isusweb.dll.在 6.1 安装 isusweb.dll 由于组件版本检查而不放回。

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

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

有帮助吗?

解决方案

这听起来像这个bug可疑:

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

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

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

其他提示

合并模块没有安装,它们被合并。产品MSI的安装。使用第三方合并模块的一个问题是,如果他们有一个错误,你对此无能为力。

我会考虑创建一个MSI,仅用于封装此MSM。然后我会创建一个安装程序prereq或套件安装程序来安装这个MSI除了您的产品MSI。

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

这听起来真的像一个错误的合并模块。 菲尔 建议在InstallExecuteSequence中修复您的代表位置,以解决该错误。 克里斯 建议将错误的合并模块放在自己的设置中。我同意两者,并认为你应该遵循这两个建议:

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

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

正如克里斯所说:合并模块没有交付,它被合并。更新的合并模块可能适用于我所知道的所有内容,但即使如此,包含它也是明智的。特别是当您处理GAC(全局程序集缓存)时。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top