我们每周都会自动生成设置,以修复错误或为我们的产品引入新功能。
所有组件都在 Wix 库预构建步骤中自动收集。例如:
"%WIX%bin\Heat.exe" 项目 "%SolutionDir%projectNameXXX.Web\projectNameXXX.Web.csproj" -configuration %FlavorToBuild% -directoryid dirBE9FDAE56D974104BBF8070FB6CC7F69 -platform AnyCPU -pog Content -projectname projectNameXXX.Web -ag -sfrag -out "%ProjectDir%projectNameXXX.Web.wxs"
因此,我们部署的每个文件都有一个带有“*”Guid 的组件。
我们还自动化了我们设置的任何先前版本(比如说 V0)和当前版本 (V1) 之间的补丁创建。只要 V1 没有删除(或重命名)文件,补丁就会被创建并被部署。我们不介意 V0 中的文件是否不被删除,只要部署了更新的文件和新文件即可。
到目前为止,我已经做了几十次测试,使用不同的参数,例如:在蜡烛上添加 –sfdvital 以强制文件不重要,但我最终发现问题来自组件,而不是文件……;
另一个重要的测试是在 V0 中的 3 个组件上设置硬编码的 Guid,我在 V1 设置中将其删除。生成的补丁被安装(要删除的文件仍在磁盘上,所有其他文件更新都已部署)。当安装程序被卸载时,除了 3 个文件之外的所有内容都将被删除。不幸的是,如果安装程序 V1 删除了 3 个文件但添加了 1 个其他文件,则不会安装补丁,它会在遇到第一个要删除的文件时立即停止。
SELMGR:ComponentId '{68FB7BC2-8D59-4CFB-88F5-9AA8CA570345}' 已注册到功能 'ProductFeature',但未出现在 Component 表中。不支持从功能中删除组件!相关主题:
没有提出可行的解决方案,因为我无法应用“穿刺模式”技术,或添加标签,因为这无法自动完成。或者可以吗?如果用户必须编辑 V0 msi,获取组件 ID 并将它们添加到新的 msi 或补丁中,这不是我们的解决方案。我们正在部署超过 25000 个文件。重大升级也不是解决方案。任何想法都会受到欢迎!