【问题标题】:How can I add "Upgrade" Provision in WiX Installer?如何在 WiX 安装程序中添加“升级”配置?
【发布时间】:2015-02-09 07:46:22
【问题描述】:

我创建了一个 WiX 安装程序,Product Version1.0.0

<Product Id="*" Name="My Application" Language="1033" Version="1.0.0" Manufacturer="My Client" UpgradeCode="182bbc7d-8cc2-4014-9e1c-29312598bxc0">

我正在使用MajorUpgrade Element 升级安装程序,如下所示:

<MajorUpgrade  Schedule="afterInstallInitialize" DowngradeErrorMessage="A newer version of [ProductName] is already installed." />

场景:

Scenario 1: 在已安装的 1.0.0 版上安装 1.0.0 版

在安装相同版本时,安装程​​序会要求修复或删除,这是我想要的并且工作正常。

Scenario 2: 在已安装的 1.0.1 版上安装 1.0.0 版

在安装旧版本时,安装程​​序会抛出错误,我的应用程序的新版本已安装并在单击确定时退出。

我希望我的安装程序显示此错误并通过删除版本 1.0.1 并安装 1.0.0 来继续安装

Scenario 3:在已经安装的1.0.0版上安装1.0.1版

在安装更高版本时,安装程​​序不会询问任何内容,并通过删除 1.0.0 并安装 1.0.1 继续安装

我希望我的安装人员确认是升级到更高版本还是取消安装

如何实现?

【问题讨论】:

    标签: wix installation upgrade versioning


    【解决方案1】:

    要允许降级,您需要在 MajorUpgrade 元素中设置属性“AllowDowngrades”。从以下链接浏览 MajorUpgrade 元素中的所有属性。

    WiX MajorUpgrade

    【讨论】:

      【解决方案2】:

      升级的默认行为是它们刚刚发生。我认为假设是大多数人在安装升级(或降级)时知道他们在做什么,并且将干预保持在最低限度是一件好事,而且在静默升级安装中,无论如何都无法要求确认 -它只是发生了。

      因此,除了允许降级之外,您还需要添加一个基于属性 WIX_UPGRADE_DETECTED 的确认对话框,或者添加一个根据该属性显示的升级对话框。这有点尴尬,因为您只知道要升级的产品代码(即 WIX_UPGRADE_DETECTED 的值),而没有关于已安装版本的其他信息。因此,您只能说您正在升级(甚至可能降级)已安装的版本。要获取有关已安装产品的信息,您需要使用 Win32 MsiGetProductInfo() API 之类的方法向系统查询该 ProductCode 的名称和版本。这可能需要特权(即使您是管理员,UI 序列也不会运行提升)因此事情变得非常棘手。

      这是一个相当常见的问题,因此可能有人已经做过某事,但快速搜索没有找到任何内容。

      【讨论】:

        猜你喜欢
        • 2010-09-11
        • 2014-05-10
        • 1970-01-01
        • 1970-01-01
        • 2014-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多