MSI安装MSP后卸载序列及Type 1 CA相关技术问询
MSI与MSP补丁的自定义操作(CA)疑问解答
嘿,这几个关于MSI和MSP补丁里自定义操作的问题,都是部署时很容易踩坑的点,我来给你详细拆解清楚:
Q1:安装MSI后应用MSP,Windows\Install目录中的缓存MSI是否不包含更新后的CA?
没错,Windows\Install目录里的原始MSI缓存不会包含更新后的CA。MSP本质是增量更新包,它不会直接修改原始的缓存MSI文件,而是把包括修改后CA在内的所有变更,单独存储在对应的.msp补丁缓存中(同样位于Windows\Install目录下)。后续系统需要执行相关安装/卸载操作时,会自动将原始MSI和对应的MSP补丁整合起来使用。
Q2:卸载该MSI时,安装程序是否会先卸载MSP补丁再卸载原MSI?
其实不存在“先卸载补丁再卸载原MSI”的拆分步骤,Windows Installer会把已应用的补丁和原MSI视为一个整体来处理卸载。它会先悄悄回滚补丁带来的所有变更,再执行原MSI的卸载流程——但整个过程是在同一个卸载会话里完成的,用户完全感知不到中间的拆分环节。
Q3:卸载过程中会执行哪个CA?是更新后的CA、原CA,还是先执行更新后的CA再执行原CA?
这个得看你在补丁里对Type 1 CA的具体修改方式:
- 如果补丁是直接替换了原MSI里的同一个CA条目(即用修改后的CA覆盖原有定义),那卸载时会执行更新后的CA。因为Windows Installer在处理整合后的安装状态时,会优先采用补丁更新后的组件定义。
- 要是补丁是新增了一个CA(而非替换原有条目),那卸载时如果新增的CA满足卸载阶段的执行条件,可能会先执行它,再执行原CA——不过这种场景比较少见,通常修改CA都是直接替换原有条目。
- 另外要注意:CA的执行时机(比如是否绑定在
Uninstall阶段)和触发条件,也会直接影响它是否会在卸载时被触发,这个得结合你CA的具体配置来判断。
内容的提问来源于stack exchange,提问作者Petronius




