WiX v3升级至v5后ComPlus应用无法安装求助
原有基于WiX v3的安装程序可稳定部署13个ComPlus应用,运行时长约8年。通过HeatWave升级至WiX v5后,ComPlus应用完全未被安装。
原ComPlusApplication元素示例(升级时未修改):
<Component Id="ExampleApplication" Directory="INSTALLFOLDER" Guid="99C26517-64D1-4962-92BB-BE94F0A78B1F"> <complus:ComPlusApplication Id="ExampleApplication" Name="ExampleApplication" Description="ExampleApplication" ApplicationAccessChecksEnabled="no" RunForever="yes" DumpOnFailfast="yes" MaxDumpCount="100" ThreeGigSupportEnabled="yes" Identity="[DOMAIN]\[USERNAME]" Password="[PASSWORD]"/> </Component>
对比WiX v3与v5的MSI详细日志发现:
- v3中
ComPlusInstallExecute自定义动作正常执行 - v5中仅存在隐藏属性
Wix4ComPlusInstallExecute_X86,但无该自定义动作的执行记录
尝试手动将该自定义动作添加至InstallExecute序列:
<InstallExecuteSequence> <Custom Action="Wix4ComPlusInstallExecute_X86" After="Wix4ConfigureComPlusInstall_X86" /> </InstallExecuteSequence>
执行时出现报错:
MSI (s) (D8:50) [14:31:01:224]: Invoking remote custom action. DLL: C:\WINDOWS\Installer\MSI35C2.tmp, Entrypoint: ComPlusInstallExecute ComPlusInstallExecute: Error 0x80070003: Failed to open rollback file, name: CustomAction Wix4ComPlusInstallExecute_X86 returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
已尝试为ComPlusApplication添加子元素、调整组件配置等操作,均未解决问题。
确认ComPlus扩展的引用与命名空间
WiX v5对扩展的引用方式和命名空间有变更:- 项目需引用
WixToolset.ComPlus.wixext扩展(替代v3的WixComPlusExtension) - WXS文件顶部的命名空间需更新为
xmlns:complus="http://wixtoolset.org/schemas/v4/wxs/complus"
若引用或命名空间错误,WiX会忽略ComPlus元素,不会生成对应的自定义动作。
- 项目需引用
检查组件的安装状态
查看MSI日志确认包含ComPlusApplication的组件是否被标记为Local(即选中安装)。若组件因条件限制未被安装,关联的ComPlus自定义动作不会触发。此外,可尝试为组件显式设置KeyPath="yes",确保WiX正确识别组件的安装触发条件。不要手动添加ComPlus自定义动作
手动添加Wix4ComPlusInstallExecute_X86报错的原因是WiX v5的ComPlus扩展会自动生成回滚文件路径等依赖属性,手动添加CA时缺失这些属性,导致无法找到回滚文件。应聚焦解决WiX未自动生成CA的问题,而非手动添加。验证ComPlus元素属性的兼容性
核对WiX v5官方文档,确认使用的属性(如ThreeGigSupportEnabled、Identity)未被废弃或变更格式。部分旧属性可能在v5中被移除,或需要搭配新属性使用。分析WiX构建日志
查看MSI构建过程的WiX日志,确认ComPlus扩展是否正确处理了ComPlusApplication元素,是否生成了相关的自定义动作和属性。如果日志中无ComPlus相关的处理记录,说明扩展未被正确加载。最小化测试排查
创建一个极简的WiX v5项目,仅包含一个基础的ComPlusApplication元素(暂时去掉Identity、Password等复杂属性),测试是否能正常安装。若可行,逐步添加原项目中的配置,定位具体是哪个属性或配置导致的问题。检查自定义动作的执行条件
用Orca打开生成的MSI文件,查看Wix4ComPlusInstallExecute_X86的Condition属性,确认条件是否满足当前安装场景(如是否仅在首次安装时执行,而你的场景是升级?)。若条件不匹配,CA不会触发。
内容的提问来源于stack exchange,提问作者Ryan Quasney

