主要升级期间合并模块安装失败
-
21-12-2019 - |
题
我有一个 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。