0

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

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

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

4

1 回答 1

1

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

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

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

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

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

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

于 2017-07-24T11:01:05.027 回答