MSP文件仅提取属于新组件的文件

时间:2012-09-12 14:09:15

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

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

  • REINSTALL = ALL
  • REINSTALLMODE = sumo / aums / omus等......
  • UPGRADE = “是”
  • IS_MINOR_UPGRADE =“1”

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

由于某些奇怪的原因,我想要更新的所有核心组件(exe,dlls)都设置为“不要使用Windows Installer注册此组件”。 我想这是某种项目错误,因为它已经很老了,并且通过不同的Advanced Installer版本(7,8和9)进行了迁移。

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

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

  1. 我已应用“哈希文件”选项以创建MsiFileHash table
  2. 我已经在一个bootstrapper(exe文件)中打包了我的msp补丁,它使用TWICE以及以下命令行参数启动它:
  3. 第一次:

    "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创作工具的人有用