Wix MSI:修复同一文件的不同组件GUID

Wix MSI:修复同一文件的不同组件GUID,wix,windows-installer,Wix,Windows Installer,我继承了一个具有相当长历史的安装程序。在一些版本中,没有正确跟踪组件GUID,导致给定文件的组件GUID不同 v1.0: C:\Program Files\Foo\Foo.exe {GUID_A} v2.0: C:\Program Files\Foo\Foo.exe {GUID_B} v3.0: C:\Program Files\Foo\Foo.exe {GUID_B} 这显然是错误的,并且需要提前排序,以避免升级后缺少文件 每个新版本都作为一个组件安装。预计最新版本将彻底升级任何以前的版本

我继承了一个具有相当长历史的安装程序。在一些版本中,没有正确跟踪组件GUID,导致给定文件的组件GUID不同

v1.0: C:\Program Files\Foo\Foo.exe {GUID_A}
v2.0: C:\Program Files\Foo\Foo.exe {GUID_B}
v3.0: C:\Program Files\Foo\Foo.exe {GUID_B}
这显然是错误的,并且需要提前排序,以避免升级后缺少文件

每个新版本都作为一个组件安装。预计最新版本将彻底升级任何以前的版本

问题:是否有任何方法可以重置或挽救未来的场景?我希望在安装完成后删除现有产品,而不会造成破坏


(自从我了解这个项目以来,我一直在使用确定性GUI。这是有史以来最好的功能。)

要切换到后期的主要升级,您必须确保只从遵守组件规则的版本升级。因此,在这种情况下,您必须阻止v1.0中的升级。

为什么在InstallFinalize导致销毁后,计划REP?这是一个记录在案的选择,不清楚您关心的是什么。从第一个链接开始:“如果两个组件具有相同名称和位置的资源,并且两个组件都安装在同一文件夹中,则删除其中一个组件会删除公共资源,从而损坏其余组件。”RemoveExistingProducts删除refcount==0组件(在我的方案中为GUID_A)。如果在最后对其进行排序,则新安装的Foo.exe将被删除。好吧,我的愚蠢错误是,我将InstallFinalize读为InstallInitialize,这是您应该对REP进行排序以避免问题的地方。是的,这就是现在正在做的。问题是是否有办法进入一个我不必这么做的情况。我很害怕。