gpt4 book ai didi

Wix - 如何在安装 MSI 文件时覆盖 UpgradeCode

转载 作者:行者123 更新时间:2023-12-04 05:47:16 24 4
gpt4 key购买 nike

我正在编写具有 2 个要求的 WIX 安装程序:

  • 实现升级规则(我成功地使用 <MajorUpgrade><Upgrade>
  • 保留一种强制安装与当前版本并行的旧版本的方法(因此不要升级)。

  • 问题来自第二个要求:如果应用程序的所有版本具有相同的 UpgradeCode,系统将删除旧的(具有相同的 UpgradeCode) avec 安装新的。

    那么是否可以升级旧版本(默认情况下)并让用户强制并行安装?
    我的一种解决方案是在安装 MSI 时更改 UpgradeCode。在这种情况下,2 个版本将完全独立,这就是我想要的。

    但是我没有找到在安装阶段指定另一个 UpgradeCode 的方法。我试过 msiexec /i app.msi UpgradeCode="{60C200E9-E317-4a67-9CC1-7BF156DEF4FD}" ,但根据日志,它正确获取了 UpgradeCode 属性,但在构建 MSI 时仍使用指定的 GUID。

    知道如何在安装 MSI 时强制使用 UpgradeCode 吗?

    有关信息,我的 Wix 文件的组成如下:
    <?define ProductUpgradeCode = "32318521-631C-4064-88C6-4A54FAA3B383"?>
    [...]
    <Product Name='App' Id='*' UpgradeCode='$(var.ProductUpgradeCode)'
    Language='1033' Codepage='1252' Version='1.0.0' Manufacturer='App inc'>
    [...]
    <MajorUpgrade AllowDowngrades="yes" Schedule="afterInstallInitialize" />

    编辑 - 解决方案 ,基于 Ciprian 的回答:

    首先,定义一个 ALLOWUPGRADE属性,默认值为 Yes :
    <Property Id="ALLOWUPGRADE" Value="Yes" />

    然后,在 <InstallExecuteSequence> 中调节 Action ,所以它只会在 ALLOWUPGRADE=Yes 时卸载旧版本:
    <RemoveExistingProducts After="InstallFinalize">ALLOWUPGRADE="Yes"</RemoveExistingProducts>

    而且,更好的是,添加一个对话框,询问用户是否要升级或进行并行安装。一键 ParallelInstallBtn将属性值更改为 No .此对话框将在 FindRelatedProducts 之后调用如果 UpgradeVersion 检测到旧版本部分:
    <UI>
    <Dialog Id="InstallDlg" Width="370" Height="270" Title="[ProductName] Setup" NoMinimize="yes">
    [...]
    <Control Id="ParallelInstallBtn" Type="PushButton" X="280" Y="243" Width="80" Height="17" Default="no" Text="&amp;Parallel Install">
    <Publish Property="ALLOWUPGRADE" Value="No">1</Publish>
    <Publish Event="EndDialog" Value="Return">1</Publish>
    </Control>
    </Dialog>
    <InstallUISequence>
    <Show Dialog="InstallDlg" After="FindRelatedProducts">OLDERVERSIONBEINGUPGRADED</Show>
    </InstallUISequence>
    </UI>

    最佳答案

    您可以通过调节 RemoveExistingProducts 来做到这一点。行动。

     <InstallExecuteSequence> 
    <RemoveExistingProducts After="InstallFinalize">ALLOWUPGRADE="Yes"</RemoveExistingProducts>
    </InstallExecuteSequence>

    默认情况下,ALLOWUPGRADE 属性的值为"is"。当您不想执行升级时,请更改它。

    关于Wix - 如何在安装 MSI 文件时覆盖 UpgradeCode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10517066/

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