msimsp处理内嵌CAB的MSI生成MSP报错0xC00E5116的解决咨询
问题解答
为什么仅归档到CAB会被msimsp判定为“压缩”?
Windows Installer的Summary Information Stream中有一个PID_WORDCOUNT属性,只要MSI将文件打包进CAB容器(无论是否启用压缩算法),这个属性就会被标记为代表“压缩状态”的值(通常是1)。PatchWiz(msimsp命令依赖的底层工具)只会读取这个属性值来判断,不会实际检查CAB内文件是否真的被压缩,因此会触发错误。
解决办法
修改MSI的Summary Information Stream属性
用Orca工具打开目标MSI文件:- 点击菜单栏的
View->Summary Information - 找到
Word Count(对应PID_WORDCOUNT),将其值改为0 - 保存修改后的MSI,对原始版本和升级版本的MSI都执行此操作,再重新运行
msimsp -s MyProperties.pcp -p MyPatch.msp -l MyPatch.log命令
- 点击菜单栏的
使用Advanced Installer内置补丁功能
直接在Advanced Installer中创建Patch Project,选择原始和升级后的MSI文件,它会自动处理CAB文件的兼容性问题,无需手动调用msimsp,生成补丁的同时保留MSI的单文件分发形式。折中打包方案(若坚持用msimsp)
先将MSI文件解包生成补丁,之后用Advanced Installer的重新打包功能,将解包的文件重新封装为单文件MSI或EXE安装包,不过该步骤相对繁琐。
能否兼顾单文件分发与补丁生成?
可以实现:
- 优先推荐使用Advanced Installer的内置补丁工具,它原生支持基于CAB打包(未压缩)的MSI生成补丁,同时保持单文件分发的特性。
- 若必须使用
msimsp,通过修改PID_WORDCOUNT属性后,也能在保留CAB打包单文件MSI的前提下生成补丁。
内容的提问来源于stack exchange,提问作者komodosp
相关产品推荐
相关产品推荐

