2

我使用旧的(目标映像)msi 和新的(升级映像)创建了一个带有高级安装程序的补丁。检查 MSP 文件我发现它包含修改过的和全新的文件。问题是在安装过程中它只安装“添加”的文件。现有文件将被忽略。我已经尝试过 MSIEXEC 开关,例如:

  • 重新安装=全部
  • REINSTALLMODE=sumo / aums / omus 等...
  • 升级=“是”
  • IS_MINOR_UPGRADE = "1"

..以不同的顺序和组合(即“REINSTALLMODE=aums REINSTALL=ALL”),所以不要仅仅通过告诉我尝试 REINSTALLMODE=omus 或类似的东西来回复或评论。

4

2 回答 2

1

在创建补丁时,需要遵循一组规则,您是否检查过这些规则?破坏其中之一可能会导致意外行为,例如您现在遇到的行为。

要检查规则,您可以从项目文件之间的差异开始,因为它们是标准 XML 文件,并检查它们的产品代码、组件 GUID 等......例如,文件夹同步是补丁发布时遇到的常见问题创建,因为这会更改组件 GUID。

于 2012-09-13T06:25:24.663 回答
1

出于某种奇怪的原因,我想更新的所有核心组件(exe、dll)都设置为“不要在 Windows Installer 中注册此组件”。我想这是某种项目错误,因为它非常古老并且是通过不同的高级安装程序版本(7、8 和 9)迁移的。

无论如何,即使使用了固定补丁,我也无法正确更新我的应用程序。Windows 安装程序不断要求我浏览目标图像 msi 文件(以前版本的缓存安装程序)。

但是,并非我的所有客户都保留这些文件(通常这些缓存文件存储在 %APPDATA% 文件夹中)。所以我找到了一个解决方法:

  1. 我已应用“哈希文件”选项以创建MsiFileHash 表
  2. 我已将我的 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 创作工具的人有用

于 2012-09-17T12:07:26.010 回答