修补程序创建在构建服务器上失败(未发现任何差异)

时间:2014-09-16 16:41:50

标签: wix build-process patch msp

我在构建服务器上创建了自动安装程序,并尝试在已发布版本和当前版本之间创建补丁。

可悲的是,我无法让它发挥作用。

这是我的Patch.wxs:

  <Patch  AllowRemoval="no" Manufacturer="Company" DisplayName="Product Patch" Description="Patch" Classification="Update">
    <Media Id="5000" Cabinet="RTM.cab">
      <PatchBaseline Id="RTM"/>
    </Media>
    <PatchFamily Id="SampleFamily" Version="1.0.0.0" Supersede="yes">
      <FeatureRef Id="ProductFeature"/>
    </PatchFamily>
  </Patch>

我使用postBuild来编译和链接补丁文件:

"C:\Program Files (x86)\WiX Toolset v3.8\bin\candle.exe" $(ProjectDir)Patch.wxs -dDebug -dOutDir=$(TargetDir) -o Patch.wixobj 
"C:\Program Files (x86)\WiX Toolset v3.8\bin\light.exe" $(TargetDir)Patch.wixobj -o  $(TargetDir)Patch.wixmsp

直到这里一切正常我猜。 在成功构建之后,我使用火炬创建了一个变换:

torch -p -xi release.wixpdb latestBuild.wixpdb -out diff.wixmst 

差异已成功创建。 然后pyro给我一个警告,没有文件是不同的:

pyro Patch.wixmsp -t RTM diff.wixmst -out patch.msp"
warning PYRO1079 : The cabinet 'RTM.cab' does not contain any files.  If this patch contains no files, this warning can likely be safely ignored.  Otherwise, try passing -p to torch.exe when first building the transforms, or add a ComponentRef to your PatchFamily authoring to pull changed files into the cabinet.

如果安装msi文件,文件会有所不同,我会得到两个不同的安装。但如果我安装补丁没有任何变化。我玩过PatchFamily,但我无法让它发挥作用。

如何获取Patch文件,包括我的更改?

2 个答案:

答案 0 :(得分:0)

我发现了造成这个问题的原因。

构建服务器没有为每个Build创建一个单独的文件夹(仅用于Drop,而不是为Build本身)所以当我创建一个补丁时,两个wixpdb文件都引用了build文件夹的相同文件,这就是为什么那里没有发现差异。我现在更改了buildserver以在drop文件夹中创建管理安装,并使用最终的msi文件创建转换。

使用如此创建的pyro转换创建包含已更改文件的预期的msp。

答案 1 :(得分:0)

wix工具被视为无法识别文件内容更改。要正常工作,请完全按照WIX tutorial

中的说明进行操作

这里要特别注意在组件的源代码中添加版本部分,即1.0从1.0源获取组件文件,然后说2.0从2.0根文件夹获取源文件。这样文件就可以按预期创建补丁。