【问题标题】:Minor upgrade is failing小升级失败
【发布时间】:2017-07-23 07:27:38
【问题描述】:

我正在执行小规模升级,但它没有将文件更新为我的安装程序功能之一。它在 MSI 日志中给出以下错误。

MSI (c) (88:64) [21:35:44:834]:注意:1:2262 2:补丁 3:-2147287038
MSI (c) (88:64) [21:35:44:834]:机器策略值 “EnforceUpgradeComponentRules”为 0
微星 (c) (88:64) [21:35:44:834]: SELMGR:ComponentId '{A48DDBD3-3B28-F2FF-DBCE-0462EC330D7E}' 是 注册到功能“客户端”,但不存在于组件中 桌子。不支持从功能中删除组件!
微星 (c) (88:64) [21:35:44:834]:SELMGR:从功能中删除组件 不支持

在制作升级安装程序时,我不会删除任何组件。我还检查了任何组件违规规则,但我没有。我不知道为什么会这样。正因为如此,功能“客户”将进入广告状态。我还检查了我的 MSI 中不存在此组件。

【问题讨论】:

  • 该组件是否有可能不是您直接创作的,而是通过其他方式(例如动态文件链接等)在构建时添加的?在基础包 .msi 中查找该组件以确定它是什么。
  • 始终查看已构建的 msis 而不是 ism 以了解其中的真正内容。
  • @MichaelUrman :不。我们不会在构建时添加它。
  • @ChristopherPainter:我比较了以前版本的MSI和最新的MSI(我要升级),发现该组件的密钥文件已从动态位置删除,因为不再使用在较新的版本中。但是当我查看旧版本的 ISM 时,我没有找到那个组件,但是在那个版本的 MSI 中我可以看到它。为什么会这样?
  • 我知道为什么我可以在 MSI 而不是 ISM 文件中看到该组件的原因。因为它是一个动态文件链接,并且在构建时它正在为这些文件创建一个组件。

标签: windows-installer upgrade installshield-2013


【解决方案1】:

出于这个原因,动态文件/依赖项扫描确实与次要升级不兼容。小升级对其规则非常挑剔。如果您真的想保持动态,请考虑切换到 Major Upgardes。无论哪种方式,如果您坚持进行较小的升级,请始终使用 MSIENFORCEUPGRADECOMPONENTRULES=1 属性设置测试您的安装程序。

至于您目前的情况,在您的构建环境中创建一个同名的 0 字节文件,并将其编写到 ISM 中,就像您在构建环境中看到的一样。说组件主键,文件主键,组件ID(guid)相同的功能......一切。现在将该组件标记为可传递的(我认为它在 InstallShield 中称为重新评估.. 对不起,它已经有一段时间了)并给它一个条件表达式,该表达式将始终评估为 false,例如 GoAway=1。

现在您将通过小升级规则,组件将被“刺穿”并消失。

但我希望你能看到这只是一个补丁。使用您当前的策略,这种情况很容易再次发生。我强烈建议改变它。

这是我大约 10 年前写的一篇文章,适用于这里:

http://blog.iswix.com/2007/06/dealing-with-very-large-number-of-files.html

【讨论】:

    猜你喜欢
    • 2018-12-17
    • 2022-11-11
    • 1970-01-01
    • 2015-08-06
    • 2019-02-23
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多