gpt4 book ai didi

Wix:PatchFamily 没有正确过滤转换(根本)

转载 作者:行者123 更新时间:2023-12-04 20:34:27 32 4
gpt4 key购买 nike

首先,我使用的是 WiX 版本 3.5.2519.0,但我也在最新的 3.6 版本上测试了它,结果相同。

我很难确定 PatchFamily 究竟能过滤掉 torch 生成的差异的某些部分。按照手册中的示例(“使用纯粹的 WiX 构建补丁”http://wix.sourceforge.net/manual-wix3/wix_patching.htm),我已经能够成功生成一个基本的安装程序 + 补丁,其效果与宣传的一样。但是,当我尝试扩展该示例时,我遇到了一些问题。

简短版:我在 Product.wxs 中将新组件 B 添加到与原始组件 A 相同的文件夹中,然后构建安装程序的 1.0 版和 1.1 版。组件 A 和 B 的文件在版本 1.0 和 1.1 之间发生了变化。

使用 torch,我生成了安装程序 1.0 和 1.1 之间的转换。

我使用 pyro 创建了 msp 补丁。请注意,我没有更改 Patch.wxs,因此 PatchFamily 元素仍然只包含组件 A 的 ComponentRef,而不包含组件 B。

现在,基于此,我假设应用补丁时会发生的情况是组件 A 的文件将更新,但组件 B 的文件将保持不变。换句话说,pyro 将从 torch 中获取总变换,其中包含组件 A 和 B 的变换,然后过滤掉所有在 PatchFamily 元素中找不到的变换 Action ,以便所有留在最后的补丁是组件 A 的转换。

显然我错了,所以我真正想知道的是,如果可能的话,我如何才能在创建补丁时从 diff 中过滤掉不需要的转换?


详细版,如果你想要文件内容和使用的命令:

产品.wxs:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="48C49ACE-90CF-4161-9C6E-9162115A54DD"
Name="WiX Patch Example Product"
Language="1033"
Version="1.0.0"
Manufacturer="Dynamo Corporation"
UpgradeCode="48C49ACE-90CF-4161-9C6E-9162115A54DD">
<Package Description="Installs a file that will be patched."
Comments="This Product does not install any executables"
InstallerVersion="200"
Compressed="yes" />

<Media Id="1" Cabinet="product.cab" EmbedCab="yes" />
<FeatureRef Id="SampleProductFeature"/>
</Product>

<Fragment>
<Feature Id="SampleProductFeature" Title="Sample Product Feature" Level="1">
<ComponentRef Id="SampleComponent" />
<ComponentRef Id="SampleComponent2" />
</Feature>
</Fragment>

<Fragment>
<DirectoryRef Id="SampleProductFolder">
<Component Id="SampleComponent" Guid="{C28843DA-EF08-41CC-BA75-D2B99D8A1983}" DiskId="1">
<File Id="SampleFile" Name="Sample.txt" Source=".\$(var.Version)\Sample.txt" />
</Component>
<Component Id="SampleComponent2" Guid="{C28843DA-EF08-41CC-BA75-D2B99D8A1984}" DiskId="1">
<File Id="SampleFile2" Name="Sample2.txt" Source=".\$(var.Version)\Sample2.txt" />
</Component>
</DirectoryRef>
</Fragment>

<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="SampleProductFolder" Name="Patch Sample Directory">
</Directory>
</Directory>
</Directory>
</Fragment>
</Wix>

补丁.wxs:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Patch
AllowRemoval="yes"
Manufacturer="Dynamo Corp"
MoreInfoURL="http://www.dynamocorp.com/"
DisplayName="Sample Patch"
Description="Small Update Patch"
Classification="Update"
>

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

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

<Fragment>
<PatchFamily Id='SamplePatchFamily' Version='1.0.0.0' Supersede='yes'>
<ComponentRef Id="SampleComponent"/>
</PatchFamily>
</Fragment>
</Wix>

两个子文件夹,1.0 和 1.1,都包含具有不同(不同)内容的 Sample.txt 和 Sample2.txt。

命令:

candle.exe -dVersion=1.0 product.wxs
light.exe product.wixobj -out 1.0\product.msi
candle.exe -dVersion=1.1 product.wxs
light.exe product.wixobj -out 1.1\product.msi
torch.exe -p -xi 1.0\product.wixpdb 1.1\product.wixpdb -out patch\diff.wixmst
candle.exe patch.wxs
light.exe patch.wixobj -out patch\patch.wixmsp
pyro.exe patch\patch.wixmsp -out patch\patch.msp -t RTM patch\diff.wixmst

编辑:正如 Bob Arnson 非常友好地指出的那样,Fragment 元素“成为一个不可变的原子单元,可以完全包含在产品中或从产品中排除”,因此为了单独更新文件,它们必须在不同的片段中定义。知道这一点当然很好,因为到目前为止,我一直将片段视为分隔元素引用和元素定义的一种方式。如果有人对此有兴趣,以下是 Product.wxs 的工作版本:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="48C49ACE-90CF-4161-9C6E-9162115A54DD"
Name="WiX Patch Example Product"
Language="1033"
Version="1.0.0"
Manufacturer="Dynamo Corporation"
UpgradeCode="48C49ACE-90CF-4161-9C6E-9162115A54DD">
<Package Description="Installs a file that will be patched."
Comments="This Product does not install any executables"
InstallerVersion="200"
Compressed="yes" />

<Media Id="1" Cabinet="product.cab" EmbedCab="yes" />
<FeatureRef Id="SampleProductFeature"/>
</Product>

<Fragment>
<Feature Id="SampleProductFeature" Title="Sample Product Feature" Level="1">
<ComponentRef Id="SampleComponent" />
<ComponentRef Id="SampleComponent2" />
</Feature>
</Fragment>

<Fragment>
<DirectoryRef Id="SampleProductFolder">
<Component Id="SampleComponent" Guid="{C28843DA-EF08-41CC-BA75-D2B99D8A1983}" DiskId="1">
<File Id="SampleFile" Name="Sample.txt" Source=".\$(var.Version)\Sample.txt" />
</Component>
</DirectoryRef>
</Fragment>

<Fragment>
<DirectoryRef Id="SampleProductFolder">
<Component Id="SampleComponent2" Guid="{C28843DA-EF08-41CC-BA75-D2B99D8A1984}" DiskId="1">
<File Id="SampleFile2" Name="Sample2.txt" Source=".\$(var.Version)\Sample2.txt" />
</Component>
</DirectoryRef>
</Fragment>

<Fragment>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="SampleProductFolder" Name="Patch Sample Directory">
</Directory>
</Directory>
</Directory>
</Fragment>
</Wix>

最佳答案

这两个组件都在同一个片段中,因此它们都包含在补丁中。如果您不想这样,请将它们放在不同的片段中。

关于Wix:PatchFamily 没有正确过滤转换(根本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13362954/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com