如何使用补丁文件修改CPack生成的WiX XML?



我正在尝试添加功能以在安装某个安装程序的新版本之前卸载以前的版本。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>

该文档显示了如何将环境元素添加到组件。有没有办法可以扩展上述逻辑?

我遇到了与您相同的问题(卸载以前版本的软件包(,并且在尝试使用CPACK_WIX_PATCH_FILE时遇到了一些麻烦,因此我想到了另一种解决方案:使用CPACK_WIX_TEMPLATE宏并将其设置为指向默认模板的修改版本。

默认模板可在此处找到:https://github.com/Kitware/CMake/blob/master/Modules/Internal/CPack/WIX.template.in

我知道这并不理想,因为此文件可能会在 CMake 升级后更改。

但有趣的是,我意识到添加"RemoveExistingProducts"不起作用,因为这已经在默认模板文件中处理过(作为MajorUpgrade的一部分(。

对我来说,真正的问题是我们的项目中从未设置过CPACK_WIX_UPGRADE_GUID,因此CMake总是生成一个新的(每个人都忽略了一个很好的警告(,因此,所有安装程序看起来都像是在引用不同的应用程序。

设置CPACK_WIX_UPGRADE_GUID后,安装以前的版本会自动删除旧软件包。

但这不适用于尚未设置CPACK_WIX_UPGRADE_GUID的软件包。

最新更新