5

我正在为纯粹使用 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 文件。有人可以告诉我我在这里做错了什么吗?

4

3 回答 3

5

希特什,

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

<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 属性

于 2012-04-26T15:13:16.450 回答
2

我还想提一下,PatchFamily在构建补丁时元素是可选的,旨在允许对将要修补的确切内容进行细粒度控制。在大多数情况下,我发现在构建补丁时我想包含 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在每次需要构建补丁时手动包含。

于 2018-06-18T14:38:52.913 回答
0

我遇到了同样的问题,解决此错误的方法是将 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>

于 2015-12-16T05:49:05.350 回答