7

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

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

  1. 获取原始 MSI 的副本,并编译固定 MSI 的新副本
  2. 编写一个指向两个安装程序的新 Wix 文件
  3. 使用 Candle 将 Wix 文件编译为 .wixobj 为 .psp
  4. 在原始安装程序和 .psp 的快照之前/之后运行 Torch/Pyro,或者使用 MsiMsp.exe

现在我的问题是,我不能简单地将注册表更改描述为 Wix 文件并直接将其编译到 .msp 中,而不需要步骤 1 和 4 - 这对于一个简单的更改来说是一个巨大的努力吗?

4

3 回答 3

7

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

于 2010-03-19T02:41:49.807 回答
3

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

  1. 使用创建“基本版本”的管理员安装msiexec /qn /a <msi-file> TARGETDIR=<absolute-path-of-existing-directory>(如果您从 make 文件或其他脚本运行它,请start /wait在命令前面使用),说%BASEDIR%
  2. 重复上述,但进入%UPDDIR%
  3. 现在您已将安装解压在里面%UPDDIR%,对将位于该文件夹根目录中的 .msi 文件进行更改...您还应该最好更改版本号...
    • 如果您交换文件,请确保更新哈希表 ( MsiFileHash) 或File带有版本信息的文件表。
    • 如果您仅更改一些注册表值,那么没有任何这些都应该没问题...
  4. 现在准备一个.pcp(补丁创建属性)文件,将TargetImages表中的一行指向.msiin %BASEDIR%,将一行UpgradedImages指向.msiin%UPDIR%
  5. 调用msimsp.exe <pcp-file> -p <absolute-path-to-desired-patch-file>

瞧,你完成了。

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

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

这里的技巧是修补解压缩的管理映像并直接在未压缩的管理映像msimsp.exe的未更改版本和更改版本之间创建补丁。总而言之,符合您“手工”完成的要求。

写评论以防需要澄清。

于 2011-11-25T23:43:35.443 回答
2

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

是我用几分钟谷歌搜索能找到的最好的解释;不过,我仍然怀疑那里一定有更好的东西。但是,如果您熟悉 Windows Installer 格式,那么使用 Orca 很容易探索和尝试一些事情,直到您掌握它的窍门。

于 2010-03-19T07:20:53.420 回答