我们使用wix创建我们的设置。对于升级,我们使用this answer by Rob Mensching中演示的主要升级。 (在较新的wix版本中,您可以使用MajorUpgrade元素。)这通常可以正常工作。删除旧产品,然后安装新产品。
但是,显然以上内容并不完全等同于手动卸载旧产品,然后手动安装新产品。
例如,考虑以下情形:
发行了我们产品的
发行了我们产品的
发行了我们产品的
从上面的wix升级逻辑显然可以看出,从1.1版升级到1.2版时,rdt_strong的3rdparty dll将消失。必须进行修理才能恢复它。
还有另一种升级方法,这种方法适用于这种情况吗?我猜我在寻找的是升级逻辑,该逻辑允许行为降级,就像行为是手动卸载旧产品然后手动安装新产品一样。
最佳答案
我们还遇到了以下问题,即在主要升级中未重新安装版本较低的DLL。我认为奇怪的是,安装程序会根据现有文件的版本决定要安装哪些文件,然后完全卸载所有内容,但仍然只安装确定要安装哪些文件,然后再卸载旧产品。看来这可能是Windows Installer中的错误...
要解决此问题,我们将RemoveExistingProducts
操作移至CostFinalize
操作上方。
我知道documentation on MSDN建议将RemoveExistingProducts
放在InstallValidate
之后,但我不确定将它放在InstallValidate
操作之前是否会对次要升级产生任何负面影响,但我们决定仅对我们的产品执行主要升级,因此该解决方案似乎为我们工作。
关于wix - Windows安装程序会在产品升级期间删除版本化文件,而不是降级文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4227456/