手动创建MSI补丁(.msp)?

时间:2010-03-19 02:20:26

标签: windows wix installer windows-installer msp

我们的团队最近一直在考虑向用户推出一个小的注册表修复程序来修改一个特定的有问题的密钥。非常简单的东西,只需更新注册表中的1个键/值。

目前,我们正在使用Wix为该产品构建.msi安装程序。在研究Wix对生成.msp补丁文件的支持时,似乎创建.msp的唯一方法是将一个过于复杂的多步骤过程:

  1. 获取原始MSI的副本,并编译固定MSI的新副本
  2. 编写一个指向两个安装程序的新Wix文件
  3. 将Wix文件编译为.wixobj,其中Candle为.psp
  4. 在原始安装程序和.psp的快照之前/之后运行Torch / Pyro,或者使用MsiMsp.exe
  5. 现在我的问题是,我不能简单地将注册表更改描述为Wix文件并将其直接编译到.msp中,而不需要步骤1和4 - 这只是一个简单的更改需要付出巨大的努力? / p>

3 个答案:

答案 0 :(得分:7)

没有。补丁是两个可安装映像的增量。要生成增量,即使差异非常小,您也需要两个图像。

答案 1 :(得分:3)

是的,还有另一种方法,即使你认为它同样复杂:

  1. 使用msiexec /qn /a <msi-file> TARGETDIR=<absolute-path-of-existing-directory>创建“基本版本”的管理员安装(如果您从make文件或其他脚本运行此命令,请在命令前面使用start /wait),比如{{1} }}
  2. 重复上述内容,但进入%BASEDIR%
  3. 现在您已在%UPDDIR%内解压缩安装,对.msi文件进行更改,该文件将位于该文件夹的根目录中...您还应该更改版本号...
    • 如果您交换文件,请确保更新哈希表(%UPDDIR%)或MsiFileHash表以获取包含版本信息的文件。
    • 如果你只改变一些注册表值,那么你应该没有任何其他的......
  4. 现在准备一个File(修补程序创建属性)文件,将.pcp表中的一行指向TargetImages中的.msi%BASEDIR%中的一行} UpgradedImages
  5. 中的.msi
  6. 调用%UPDIR%
  7. 瞧,瞧,你已经完成了。

    现在这是否值得,完全取决于你。

    这是我在MSI数据库上运行SQL查询的一些脚本的帮助下进行的,以便查询值或根据需要更新它们。这非常有效,并已被放入GNU make文件中,以构建一大堆MSI,派生的MSI,补丁和虚拟补丁(用于测试)。

    这里的技巧是修补解压缩的管理员映像并指示msimsp.exe <pcp-file> -p <absolute-path-to-desired-patch-file>在解压缩的管理映像的未更改版本和更改版本之间创建补丁。总而言之,这符合你“手工”做的要求。

    如果需要澄清,请撰写评论。

答案 2 :(得分:2)

可以使用Orca和Windows Install SDK中的其他工具(现在是Windows SDK的一部分)创建MSP(补丁)和MST(转换)。但是,这个过程可能并不比您使用WiX更容易。

Here是我用谷歌搜索几分钟就能找到的最好的解释;不过,我仍然怀疑那里肯定会有更好的东西。但是如果你熟悉Windows Installer格式,那么在你掌握它之前,它很容易探索并尝试使用Orca。