降级会删除新版本的可执行文件,但不会重新安装旧版本
Posted
技术标签:
【中文标题】降级会删除新版本的可执行文件,但不会重新安装旧版本【英文标题】:Downgrade removes new versions of executables but does not reinstall old versions 【发布时间】:2019-10-08 14:36:07 【问题描述】:我已经构建了两个版本的应用程序安装程序。一个版本 1.0.0.0 和一个版本 1.0.1.0。 在预构建步骤中,应用程序的可执行文件会添加所选版本。
为了允许降级,将 MajorUpgrade 中的 AllowDowngrades 属性设置为“yes”。
安装 1.0.0.0 后,我通过运行 1.0.1.0 安装程序来升级安装。可执行文件已正确升级。 然后我再次运行 1.0.0.0 安装程序以将安装降级回 1.0.0.0。 安装完成,1.0.1.0 版本的可执行文件被删除; 但不会重新安装版本为 1.0.0.0 的可执行文件。他们只是失踪了。
我不明白为什么会这样。我可以理解安装程序是否拒绝覆盖较新的可执行文件,但为什么要删除较新的可执行文件? 我还需要做些什么才能使降级成为可能吗?
我的 Product.wxs 的开头:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<!-- Including defines. -->
<?include Defines.wxi ?>
<Product Id="*"
Name="$(var.ProductName) $(var.MajorMinorVersion)"
Language="1033"
Version="$(var.ProductVersion)"
Manufacturer="$(var.Manufacturer)"
UpgradeCode="$(var.UpgradeGuid)">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade Schedule="afterInstallInitialize" AllowDowngrades='yes' AllowSameVersionUpgrades='no' />
...
【问题讨论】:
尝试将 MajorUpgrade 计划设置为 afterInstallValidate 并再次测试 - 看看是否可行。问题与 MSI 错误有关。降级是一种不好的做法,你能消除它吗? 出于相当尴尬的原因,我无法消除它。设置“afterInstallValidate”不起作用。 【参考方案1】:REINSTALLMODE 必须从默认的 omus
更改为 amus
:
<Property Id="REINSTALLMODE" Value="amus" />
来自微软文档:
o Reinstall if the file is missing or is an older version.
a Force all files to be reinstalled, regardless of checksum or version.
通过此更改,可执行文件将在正确版本的降级时重新安装。
【讨论】:
如果您的 MSI 中有任何合并模块或共享文件,这可能会导致一些不幸的副作用,主要是文件降级和文件版本不一致。 您也可以意外覆盖设置文件 - 我上次检查过。你也查? :-)。 幸运的是,安装程序非常基础,不必面向未来。是的,一个自定义对话框询问是否应该覆盖配置文件。以上是关于降级会删除新版本的可执行文件,但不会重新安装旧版本的主要内容,如果未能解决你的问题,请参考以下文章