Wix(Wixsharp)不同捆绑包中的一个msi



我有两个bundle。两个捆绑包都包含2个msi。其中一个msi在捆绑包之间共享,所以我们有这样的东西:

  1. Bundle1包含Product1.msi和Aux.msi
  2. Bundle2包含Product2.msi和Aux.msi正如您所看到的,Aux.msi是两个bundle的一部分。当我在一台电脑上安装两个捆绑包时,一切都是文件。对于第二个捆绑包,引导程序发现Aux.msi已经安装,跳过它的安装操作,并标记注册表依赖项,以便只有在删除两个捆绑包时才卸载Aux.msi。但是当Bundle2有更新版本的Aux.msi时,问题就来了。以下是操作顺序:
  3. 安装包含Product1.msi(版本无关紧要(和Aux.msi(1.0.0版本(的Bundle1-一切正常
  4. 安装包含Product2.msi(版本无关紧要(和Aux.msi(2.0.0版(的Bundle2-bundle捕获到安装了以前版本的Aux.msy,卸载了1.0.0版,安装了2.0.0版。这里的一切看起来都很好,但在注册表中,Bundle2被设置为Aux.msi的依赖项,Bundle1则保留了对1.0.0版本的Aux..msi的死依赖项。这就是为什么如果在我卸载Bundle2后,Aux.msi也被卸载了,并且我在电脑上安装了一个没有Aux.msy的Bundle1。我真的相信燃烧引擎应该妥善处理这些情况。有什么解决办法吗

要在升级过程中启用引用计数,请在Aux.msi:中声明依赖项提供程序

<!-- a pre-existing component that is always installed -->
<Component>
<dep:Provides Key="AuxKey" />
</Component>

这假设Aux.msi的所有升级都是向后兼容的。当这不是真的时,提供/@密钥和MSI的升级代码可能需要更改。

最新更新