【问题标题】:patching using purely WIX使用纯 WIX 进行修补
【发布时间】:2012-05-05 13:28:03
【问题描述】:

我正在努力创建一个纯粹使用 WIX 的补丁,我希望有人能指导我朝着正确的方向前进。

我有几百个源文件,我对它们运行加热以创建一个收获文件,然后使用蜡烛和光创建一个包。

我需要更改一些配置文件,并使用更改创建第二个包。

我使用 Torch 和 pyro 创建了 .wixmst 文件,然后在尝试创建 msp 文件时,pyro 抱怨以下错误。

pyro.exe:错误 PYRO0252:没有提供有效的转换来附加到补丁。检查以确保您在命令行上传递的转换具有在补丁中创建的匹配基线。此外,请确保您的目标和升级之间存在差异。

我的问题确实是:patch.wxs 应该包含什么?

这是我的 patch.wxs 的样子:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">

    <Patch 
        AllowRemoval="yes"
        Manufacturer="sample llc" 
        MoreInfoURL="sample.com"
        DisplayName="Env Patch" 
        Description="Env Specfic Patch" 
        Classification="Update"
        >

        <Media Id="5000" Cabinet="RTM.cab">
            <PatchBaseline Id="RTM" />
        </Media>

        <PatchFamilyRef Id="EnvPatchFamily" />
    </Patch>

    <Fragment>    
        <PatchFamily Id='EnvPatchFamily' Version='1.0.0.0' ProductCode="PUT-GUID-HERE" Supersede='yes' >

            ********************************************** 
                What component Ref should I put in here
                heat creates a component group and I can't
                put ComponentGroupRef in here
            **********************************************

    </PatchFamily>
    </Fragment>
</Wix>

我正在使用此链接中描述的 Wix 修补程序: http://wix.sourceforge.net/manual-wix3/wix_patching.htm

但是,它不考虑使用 heat 创建的源 wix 文件。 谁能告诉我我在这里做错了什么?

【问题讨论】:

    标签: wix patch wix3.5 wix3.6


    【解决方案1】:

    我还想提一下,PatchFamily 元素在构建补丁时是可选的,旨在允许精确控制要修补的内容。在大多数情况下,我发现我想在构建补丁时包含 2 个 MSI 版本之间的所有差异,在这种情况下,我完全省略了 PatchFamily。在您的情况下,生成的补丁 WXS 如下所示:

    <?xml version="1.0" encoding="UTF-8"?>
    <Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
        <Patch 
            AllowRemoval="yes"
            Manufacturer="sample llc" 
            MoreInfoURL="sample.com"
            DisplayName="Env Patch" 
            Description="Env Specfic Patch" 
            Classification="Update"
        >
            <Media Id="5000" Cabinet="RTM.cab">
                <PatchBaseline Id="RTM" />
            </Media>
        </Patch>
    </Wix>
    

    我希望这个答案可以帮助任何有类似问题的人,即想要手动构建补丁系列,想要在每次需要时手动包含ComponentRef构建补丁。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,解决此错误的方法是将 GUID 添加到组件中,并且对于两个版本的 msi,它应该保持相同。

          <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
          <MediaTemplate />
      
          <Feature Id="ProductFeature" Title="WixPatch" Level="1">
              <ComponentGroupRef Id="ProductComponents" />
          </Feature>
      </Product>
      
      <Fragment>
          <Directory Id="TARGETDIR" Name="SourceDir">
              <Directory Id="ProgramFilesFolder">
                  <Directory Id="INSTALLFOLDER" Name="WixPatch" />
              </Directory>
          </Directory>
      </Fragment>
      
      <Fragment>
          <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER" >
               <Component Id="File1" **Guid="3A64BE7A-BBEC-40AD-8319-45C602734146"**>
           <File Source="D:\V2\File1.txt" Name="File1" KeyPath="yes" DiskId="1" Id="F1"/>
               </Component>
      
      </ComponentGroup>
      </Fragment>
      

      【讨论】:

        【解决方案3】:

        希特什,

        对我来说,热量会像这样创建一个组件组:

        <Fragment>
            <ComponentGroup Id="MyFiles">
                <ComponentRef Id="cmp2AA1A30564C621322ECB3CDD70B1C03C" />
                <ComponentRef Id="cmp788C978F16E473D4FD85720B5B75C207" />
            </ComponentGroup>
        </Fragment>
        

        加热命令:

        "%WIX%\bin\heat.exe" dir slndir\bin\Release -cg MyFiles -gg -scom -sreg -sfrag -srd -dr INSTALLDIR -out ..\Wix\MyFiles.wxs -var var.BinOutputPath -nologo -v -ke  -t wixtransform.xsl
        

        在patch.wxs中:

        <Fragment>    
            <PatchFamily Id='ProductPatchFamily' Version='1.3.0.0' Supersede='yes'>
                <ComponentRef Id="cmp2AA1A30564C621322ECB3CDD70B1C03C" />
                <ComponentRef Id="cmp788C978F16E473D4FD85720B5B75C207" />
            </PatchFamily>
        </Fragment>
        

        注意:PatchFamily 标签中没有 ProductCode 属性

        【讨论】:

        • 是的,您对 ProductCode 的看法是正确的,我将其删除。但我的问题确实是我应该在 PatchFamily 元素中添加什么,我发现它不应该包含任何内容。不过感谢您的回复。我将接受您指出删除 ProductCode 属性的答案。谢谢。
        • 对不起,我赶时间,错过了patch.wxs被隐藏的事实。如果你把它留空,补丁将升级所有不同的文件。否则它将只升级您选择的内容。
        猜你喜欢
        • 1970-01-01
        • 2017-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-17
        • 2012-02-13
        • 1970-01-01
        • 2012-06-19
        相关资源
        最近更新 更多