我正在尝试在安装新版本的某个安装程序之前添加卸载以前版本的功能。 CPackWIX文档页面(https://cmake.org/cmake/help/v3.3/module/CPackWIX.html)不清楚如何使用CPACK_WIX_PROPERTY_ PROPERTY 或CPACK_WIX_PATCH_FILE来修改CPack生成的WiX XML。假设CPack生成的XML中不存在以下内容。有没有办法使用补丁文件向他们添加以下内容?
<InstallExecuteSequence>
<RemoveExistingProducts Before='InstallFinalize' />
</InstallExecuteSequence>
文档显示了如何向组件添加环境元素。有没有办法可以做到以上扩展逻辑呢?
答案 0 :(得分:0)
我遇到了与您相同的问题(卸载软件包的早期版本),尝试使用CPACK_WIX_PATCH_FILE时遇到了一些麻烦,因此我考虑了另一种解决方案:使用CPACK_WIX_TEMPLATE宏并将其设置为指向默认模板的修改版本。 / p>
可以在此处找到默认模板:https://github.com/Kitware/CMake/blob/master/Modules/WIX.template.in
我知道这并不理想,因为在CMake升级后此文件可能会更改。
但是有趣的是,我意识到添加“ RemoveExistingProducts”不起作用,因为这已经在默认模板文件中进行了处理(作为MajorUpgrade的一部分)。
对我来说,真正的问题是我们的项目中从未设置过CPACK_WIX_UPGRADE_GUID ,因此CMake总是生成一个新的(每个人都忽略了一个很好的警告),结果,所有安装程序看上去就像他们要引用其他应用程序一样。
设置CPACK_WIX_UPGRADE_GUID后,安装以前的版本会自动删除旧软件包。
但这不适用于尚未设置CPACK_WIX_UPGRADE_GUID的软件包。