WIX:动态生成补丁

J. *_*son 2 patch wix

我们有许多基于 WIX(当前为 3.9)的安装,例如我们使用收获来收集不同的组件,并且它的流动性非常好。一切都是自动化的,当我们需要最新的安装时,我们会进行夜间构建。

像许多其他公司一样,我们需要修补一个或多个安装中的多个文件中的一个,但确保我们在不同的安装中找到正确的文件和正确的组件确实很痛苦。

对于这种情况,是否有任何最佳实践,因为我不能相信我们独自一人进行这种设置?和我们不希望只是修正了几个bug做一个升级。

这是一个需要解决的场景:

2.0 版终于发布了,我们有一个完整的系统安装以及几个不同的客户端安装和一个可选包。

当然,我们发现了软件中的一些小故障,比如在 3 周内,我们在系统的不同部分进行了大约 15 个或多或少的关键错误修复。

现在我们觉得我们需要修补那里的安装,但我们需要为每个安装(MSI)做一个补丁项目,然后我们构建它,收集差异并创建补丁,以便能够快速发送给那些已经安装了不同的部件。

以下是我所做的 patch.wxs 的片段,但找不到自动执行的方法:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <?include "InitDefinitions.wxi"?>
  <Patch  AllowRemoval="no" Manufacturer="$(var.Company)" 
          DisplayName="$(var.InstallerProductName), patch $(var.Build)" 
          Description="Small Update Patch" Classification="Update">
    <Media Id="5000" Cabinet="patch.cab" EmbedCab="yes">
      <PatchBaseline Id="RTM"/>
    </Media>

    <PatchFamilyRef Id="SP-$(var.Build)-Patch"/>
  </Patch>

  <Fragment>
    <PatchFamily Id="SP-$(var.Build)-Patch" 
                 Version="$(var.Major).$(var.Minor).$(var.Build).$(var.Revision)" 
                 Supersede="yes">
      <PropertyRef Id="ProductVersion" />
      <!--  
            As I understand it's here I define the changes, 
            but I like this section to be automatic populated during build, 
            or something
      -->
    </PatchFamily>
  </Fragment>
</Wix>
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个问题?

提前致谢!

Bry*_*anJ 5

我在一篇名为“使用 WiX 和 Visual Studio 自动构建补丁”的博文中对此进行了讨论。

以下是基本步骤:

  1. 创建初始补丁文件。你已经用 patch.wxs 做到了这一点。
  2. 执行已发布和更新 msis 的管理员安装。您可以从服务器位置复制已发布的 .msi。我假设您正在使用某种类型的自动构建构建更新 .msi。
  3. 使用 Torch.exe 生成 msis 之间的差异。
  4. 构建补丁。使用 Candle.exe 编译它,使用 Light.exe 链接它,并使用 Pyro.exe 创建最终补丁。

如何手动执行这些步骤一个简单的例子可以发现这里在FireGiant。