在次要升级期间不会替换DLL

时间:2017-09-03 15:25:47

标签: windows-installer installshield installshield-2016

在小幅升级期间,我收到以下错误:

  

SELMGR:ComponentId' {C1B06529-966C-2A82-EF0C-A5CFA0113872}'已注册到功能' X',但在组件表中不存在。不支持从功能中删除组件!

我不明白为什么我会收到此错误或者为什么installshield会尝试删除它。确实,这个值不在组件表中,但在首次安装时它不存在

首次安装时,我有以下一行:

  

执行op:ComponentRegister(ComponentId = {C1B06529-966C-2A82-EF0C-A5CFA0113872},KeyPath = [path] \ Newtonsoft.Json.dll,State = 3 ,, Disk = 1,SharedDllRefCount = 1,BinaryType = 0 )

有没有办法告诉installshield忽略这个?

1 个答案:

答案 0 :(得分:1)

简短回答:使用主要升级版来提供最新版本的应用程序。

您是否在最新版本的设置中删除了文件 Newtonsoft.Json.dll ?您必须遵循的规则才能使用次要升级非常严格。请阅读" 更新规则"部分: http://www.installsite.org/pages/en/msi/updates.htm 。还有一些进一步的限制 - 这个列表已经很老了。看起来您删除了上面提到的文件,这会导致您的次要升级失败。

大多数人最终使用主要升级而非次要升级 - 这样更加灵活和可靠 - 在您的情况下似乎必须这样做。如果我想创建一个包含几个更新文件的小补丁,并且没有对设置的组件和功能结构进行其他更改,我只使用次要升级。这是我发现轻微升级的唯一情况。

Installshield有很好的帮助材料,可以帮助您设置主要升级。只需在在线帮助中搜索即可。 Here is just an online version of their documentation for reference。基本上你去了" Upgrades view"并按照你在那里看到的说明进行操作。

另请参阅Michael Urman的答案(据我所知,Installshield开发人员): Installshield minor upgrade component 。他提供了两个更好的链接供你检查。