gpt4 book ai didi

WiX:补丁安装程序取代以前的版本(1.0.0 -> 1.0.1、1.0.0 -> 1.0.2、1.0.1 -> 1.0.2,aso。)

转载 作者:行者123 更新时间:2023-12-04 13:40:24 25 4
gpt4 key购买 nike

我正在尝试提供一个简单的安装程序包 (MSI),我希望通过更新(补丁)来支持它,该更新(补丁)会取代所有以前的补丁。所以我有一个 MSI V1.0.0 和 2 个补丁 V1.0.1 和 V1.0.2。用户应该能够只安装最新的补丁,而不管系统中已经应用了哪些以前的补丁。我的项目包含 2 个功能(客户端和服务器)。因此,补丁的基础始终是 RTM 包(HelloWorld 1.0.msi/HelloWorld 1.0.wixpdb)。

所有补丁的生成(构建)都有效,因此更新程序 1.0.0 -> 1.0.1 和 1.0.0 -> 1.0.2 可以,但是当我尝试从 1.0.1 更新到 1.0.2 时,补丁失败并显示以下错误消息:“Windows Installer 服务无法安装升级补丁,因为要升级的程序可能丢失,或者升级补丁可能更新了不同版本的程序。请验证要升级的程序存在于您的计算机,并且您有正确的升级补丁。”。更糟糕的是,当我在已经安装了 1.0.2 的系统上运行 1.0.1 补丁时,补丁会用旧版本覆盖现有安装!?我完全糊涂了...

我还在网上找到了一些关于修补的博客条目,但没有任何内容适用于我的替代 szenario。

wix 修补代码 - “patch1.wxs”:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Patch
AllowRemoval="yes"
Manufacturer="My Company"
MoreInfoURL="http://www.mycompany.com/"
DisplayName="HelloWorld V1.0 Patch 1"
Description="Patch intaller updating HelloWorld V1.0.x to V1.0.1"
Classification="Update">

<Media Id="32000" Cabinet="HelloWorldRTM.cab">
<PatchBaseline Id="HelloWorldRTM">
<Validate ProductId="yes" UpgradeCode="yes" ProductVersionOperator="LesserOrEqual" />
</PatchBaseline>
</Media>

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

<Fragment>
<PatchFamily Id='HelloWorldPatchFamily' Version='1.0.1.0' Supersede='yes'>
<PropertyRef Id="ProductVersion"/>
<ComponentRef Id="HelloWorldServer.dll"/>
</PatchFamily>
</Fragment>
</Wix>

补丁 1 构建脚本 - “generate_patch1.bat”:
"%WIX%\bin\torch.exe" -p -xi ".\_Distrb\HelloWorld 1.0.wixpdb" ".\_Distrb\HelloWorld 1.0.1.wixpdb" -out ".\_Build\patch1.wixmst"
"%WIX%\bin\candle.exe" -out ".\_Build\patch1.wixobj" ".\patch1.wxs"
"%WIX%\bin\light.exe" ".\_Build\patch1.wixobj" -out ".\_Build\patch1.wixmsp"
"%WIX%\bin\pyro.exe" ".\_Build\patch1.wixmsp" -out ".\_Distrb\HelloWorld 1.0 Patch1.msp" -t HelloWorldRTM ".\_Build\patch1.wixmst"

wix 修补代码 - “patch2.wxs”:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Patch
AllowRemoval="yes"
Manufacturer="My Company"
MoreInfoURL="http://www.mycompany.com/"
DisplayName="HelloWorld V1.0 Patch 2"
Description="Patch intaller updating HelloWorld V1.0.x to V1.0.2"
Classification="Update">

<Media Id="32000" Cabinet="HelloWorldRTM.cab">
<PatchBaseline Id="HelloWorldRTM">
<Validate ProductId="yes" UpgradeCode="yes" ProductVersionOperator="LesserOrEqual" />
</PatchBaseline>
</Media>

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

<Fragment>
<PatchFamily Id='HelloWorldPatchFamily' Version='1.0.2.0' Supersede='yes'>
<PropertyRef Id="ProductVersion"/>
<ComponentRef Id="HelloWorldServer.dll"/>
<ComponentRef Id="HelloWorld.exe"/>
</PatchFamily>
</Fragment>
</Wix>

补丁 2 构建脚本 - “generate_patch2.bat”:
"%WIX%\bin\torch.exe" -p -xi ".\_Distrb\HelloWorld 1.0.wixpdb" ".\_Distrb\HelloWorld 1.0.2.wixpdb" -out ".\_Build\patch2.wixmst"
"%WIX%\bin\candle.exe" -out ".\_Build\patch2.wixobj" ".\patch2.wxs"
"%WIX%\bin\light.exe" ".\_Build\patch2.wixobj" -out ".\_Build\patch2.wixmsp"
"%WIX%\bin\pyro.exe" ".\_Build\patch2.wixmsp" -out ".\_Distrb\HelloWorld 1.0 Patch 2.msp" -t HelloWorldRTM ".\_Build\patch2.wixmst"

最佳答案

我有一个类似的问题,并通过向补丁 wxs 添加适当的验证来解决它。尝试这个...

<Media Id="32000" Cabinet="HelloWorldRTM.cab">
<PatchBaseline Id="HelloWorldRTM">
<Validate ProductId="yes" UpgradeCode="yes" ProductVersion="Major" ProductVersionOperator="GreaterOrEqual" />
</PatchBaseline>
</Media>

如果您不希望补丁在安装的修订号大于补丁的修订号时工作,您可能需要将 ProductVersion 更改为“Update”并将 ProductVersion 设置为“GreaterOrEqual”。

我希望这个对你有用!

关于WiX:补丁安装程序取代以前的版本(1.0.0 -> 1.0.1、1.0.0 -> 1.0.2、1.0.1 -> 1.0.2,aso。),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9583914/

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