问题:两个产品安装程序(A
和B
)具有一组共享组件,这些组件安装在同一路径中。 A
包含v1共享组件,B
包含v2。
但是,安装程序B
还包含v2共享组件所依赖的其他共享组件。
当两者都安装时,共享组件的引用计数为2,但新的共享组件的计数为1.当卸载安装程序B
时,新组件将在其计数减少时被删除,但其他共享组件未降级,因此会因DLL丢失而失败。
有没有办法在WIX中表达这种依赖关系,或以其他方式解决问题?
我可以通过将新资源添加到现有组件来解决这个问题,但是经文规定了一个文件,一个组件'我来自哪里。
答案 0 :(得分:1)
您可以尝试一些事项,但如果A和B都已部署,可能会有一些限制因素:
您可以为A添加补丁,添加丢失的Dll,将其添加到现有功能,使用相同的组件ID等。您需要确保使用REINSTALL = [该功能名称]安装补丁时(或REINSTALL = ALL可能是默认值)。任何升级到A都可以解决问题,包括重大升级,但如果A是未维护的旧产品,则这些都不是不可接受的。
您可以将该Dll安装为单独的新MSI,相同的组件ID等,并且可能使用Bundle来安装B和新的MSI。你的Dll现在有两个引用计数,一个用于B,一个用于新的MSI。如果A存在且B不存在,则新的MSI将具有禁止其卸载的逻辑。或者可能存在可行的依赖链。