清理Wix安装程序中的重复条目

清理Wix安装程序中的重复条目,wix,windows-installer,wix3.6,Wix,Windows Installer,Wix3.6,我需要一些关于如何清理一个管理得不好的旧Wix项目的建议。一个问题是,该项目当前有多个条目用于相同的文件,并且指向相同的位置。例如,项目中的几个.wxs文件将为foo.exe定义一个新组件,每个文件使用不同的GUID,并将此文件发送到同一个DirectoryRef。这还没有产生任何问题,但现在我想在我们的产品中使用补丁(MSP),而这类事情会干扰它们的操作 我想知道在不破坏升级的情况下解决这个问题的最佳方法(因为以前的安装程序都是这样的)。如果我只是删除了所有重复的组件,那么在升级过程中就会出现

我需要一些关于如何清理一个管理得不好的旧Wix项目的建议。一个问题是,该项目当前有多个条目用于相同的文件,并且指向相同的位置。例如,项目中的几个.wxs文件将为foo.exe定义一个新组件,每个文件使用不同的GUID,并将此文件发送到同一个DirectoryRef。这还没有产生任何问题,但现在我想在我们的产品中使用补丁(MSP),而这类事情会干扰它们的操作

我想知道在不破坏升级的情况下解决这个问题的最佳方法(因为以前的安装程序都是这样的)。如果我只是删除了所有重复的组件,那么在升级过程中就会出现未定义的行为。我认为,删除一个或多个重复条目会导致安装程序为该文件生成删除操作。即使文件的剩余条目是新版本,也不能保证安装期间的操作顺序。因此,其中一些文件将首先得到更新,然后一个或多个删除操作将删除更新的文件。因此,在升级结束时,将丢失几个文件。之后立即运行修复将恢复文件,因为安装程序知道它们应该在那里

我想解决这个问题的一种方法是在下一个版本中进行一次性的“黑客攻击”,我们将这些文件复制到一个辅助位置,然后运行一个自定义操作post安装,将文件从辅助位置复制到主位置并删除临时目录


有没有更干净的方法可以解决这个问题?

您可能要做的是使用验证来识别所有重复项并修复它们。然后将您的升级更改为最早安排的主要升级。您可能还必须将安装位置更改为稍微不同的目录,以避免组件引用计数中断

一旦清洁,你应该能够回到小升级,并开始考虑修补。另一种选择是“假”补丁。我曾经使用过一个MSI,它不会将自己作为修补程序方法发布,这是非常成功的。它打破了很多规则,但对于那些不关心修补规则、只想让业务愉快的组织来说,它是有用的