【问题标题】:Prevent multiple installs防止多次安装
【发布时间】:2016-04-27 00:31:07
【问题描述】:

我正在使用 WiX Toolset 3.10.2 为我的产品构建安装程序。

解决方案中有两个 WIX 项目,一个从已编译的二进制文件构建 MSI,另一个使用 WixStandardBootstrapperApplication 从 MSI 构建 setup.exe。

如果我增加版本,它可以正常工作,提供升级。

如果我第二次启动相同的安装程序,它可以正常工作,打开“修改设置”屏幕。

问题是,我在不增加版本的情况下重新构建安装程序后,它无法检测到以前的安装,并愉快地安装了第二次(因此“卸载”控制面板有多个相同的项目)。

如何阻止这种情况,只允许安装单个产品实例?

微星:

<?include "..\Version.wxi"?>

<Product Id="*" Name="xxx" Language="1033" Version="$(var.vvvVersion)"
        Manufacturer="yyy" UpgradeCode="0d88cab0-d278-43bb-b891-607bc01c4dec" >
    <MajorUpgrade DowngradeErrorMessage="A newer version of xxx is already installed." />

EXE:

<?include "..\Version.wxi"?>

<Bundle Name="xxx" Manufacturer="yyy" Version="$(var.vvvVersion)"
        UpgradeCode="eac46fb0-09d1-4c29-8fc1-984dddb35e50"
        IconSourceFile="$(var.SolutionDir)applicationIcon.ico" >

【问题讨论】:

    标签: windows wix windows-installer


    【解决方案1】:

    如果当前安装包的版本

    有两种方法可以解决这个问题。一种实现起来相对简单,另一种则需要编辑引导程序的代码。

    正如您所指出的,解决此问题的第一种方法是将引导程序的版本与代码的内部版本号或修订号相关联,以便版本的一部分始终增加。这样,引导程序总是知道删除以前安装的包 exe。需要注意的是,引导程序应用程序确实考虑了版本的全部 4 个部分,这与 MSI 的丢弃第 4 位数字不同。这是我在引导程序应用程序中实现的解决方案。

    解决此问题的第二种方法是覆盖 OnPlanRelatedBundle 中的 requestedState。 (供参考https://sourceforge.net/p/wix/bugs/3065/

    【讨论】:

    • 即使他这样做(目前正在讨论默认启用该功能),MSI 也会出现类似的问题,而无需升级版本。实际上,几年前我为您的 MSI 添加了支持以获取文件版本和捆绑包以获取产品版本: 您还可以更改 MSI 的升级表以允许相同版本升级 - 测试相同版本后续版本中的任何更改所必需的。
    猜你喜欢
    • 2022-01-02
    • 2013-02-21
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多