【问题标题】:MSP file extracts only files that belong to new componentsMSP 文件仅提取属于新组件的文件
【发布时间】:2012-09-12 14:09:15
【问题描述】:

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

  • 重新安装=全部
  • REINSTALLMODE=sumo / aums / omus 等...
  • UPGRADE="是"
  • IS_MINOR_UPGRADE = "1"

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

【问题讨论】:

    标签: windows windows-installer patch msp advanced-installer


    【解决方案1】:

    创建补丁时需要遵循a set of rules,你检查过吗?破坏其中之一可能会导致意外行为,例如您现在遇到的行为。

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

    【讨论】:

      【解决方案2】:

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

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

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

      1. 我已应用“哈希文件”选项来创建MsiFileHash table
      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 恢复所有其他 missing files, files with unknown or different (from target) version

      我希望此解决方法对使用除 Advanced Installer 之外的 MSI/MSP 创作工具的人有用

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多