出于某种奇怪的原因,我想更新的所有核心组件(exe、dll)都设置为“不要在 Windows Installer 中注册此组件”。我想这是某种项目错误,因为它非常古老并且是通过不同的高级安装程序版本(7、8 和 9)迁移的。
无论如何,即使使用了固定补丁,我也无法正确更新我的应用程序。Windows 安装程序不断要求我浏览目标图像 msi 文件(以前版本的缓存安装程序)。
但是,并非我的所有客户都保留这些文件(通常这些缓存文件存储在 %APPDATA% 文件夹中)。所以我找到了一个解决方法:
- 我已应用“哈希文件”选项以创建MsiFileHash 表
- 我已将我的 msp 补丁打包在一个引导程序(exe 文件)中,该程序使用 TWICE 启动它,并带有以下命令行参数:
第一次:
"myPatch.msp" /n {150F6CE2-8C12-414B-9377-F087A62E6B67} REINSTALLMODE=c /qb
第二次:
"myPatch.msp" /n {150F6CE2-8C12-414B-9377-F087A62E6B67} REINSTALLMODE=dep /qb
REINSTALLMODE=c开关强制基于哈希的文件比较算法,因此不再需要原始设置源
REINSTALLMODE=dep恢复所有其他丢失的文件、未知或不同(来自目标)版本的文件
我希望此解决方法对使用除 Advanced Installer 之外的 MSI/MSP 创作工具的人有用