我怎样才能加上?’;“升级”;WiX安装程序中的规定?

我怎样才能加上?’;“升级”;WiX安装程序中的规定?,wix,installation,upgrade,versioning,Wix,Installation,Upgrade,Versioning,我已经创建了一个WiX安装程序,其产品版本为1.0.0 <Product Id="*" Name="My Application" Language="1033" Version="1.0.0" Manufacturer="My Client" UpgradeCode="182bbc7d-8cc2-4014-9e1c-29312598bxc0"> 场景: 场景1:在已安装的1.0.0版上安装1.0.0版 在安装同一版本时,安装程序要求修复或删除,这是我想要的,并且工作正常 场景2:

我已经创建了一个WiX安装程序,其产品版本为
1.0.0

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

场景1:
在已安装的1.0.0版上安装1.0.0版

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

场景2:
在已安装的1.0.1版上安装1.0.0版

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

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

场景3:
在已安装的1.0.0版上安装1.0.1版

安装更高版本时,安装程序不会询问任何问题,而是通过删除1.0.0和安装1.0.1继续安装

我希望我的安装程序要求确认是升级到更高版本还是取消安装


如何实现这一点

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


升级的默认行为是它们只是发生而已。我认为这样的假设是,大多数人在安装升级(或降级)时都知道自己在做什么,将干预降至最低是一件好事,而且在静默升级安装中,无论如何也没有办法要求确认——这只是碰巧发生的事

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

这是一个相当常见的问题,所以可能有人已经做了一些事情,但快速搜索没有找到任何东西

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