10

目前,只要更新到较新的版本号,所有升级都可以正常工作,但是在降级时我会遇到奇怪的行为。似乎它会卸载现有版本,然后部分安装我要安装的版本,目标位置中尚不存在主 exe,但创建了宣传的快捷方式。打开宣传的快捷方式后,它将完成安装(可能进行修复),然后运行正常。

有谁知道为什么会这样?

我的升级块如下所示:

<UpgradeVersion Minimum="0.0.0.0" Maximum="99.0.0.0" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="yes" IncludeMaximum="no" IgnoreRemoveFailure="yes" />

(IgnoreRemoveFailure 试图解决这个问题,但它似乎没有做任何事情)

在我的 InstallExecuteSequence 我有<RemoveExistingProducts After="InstallValidate" />

我也Product Id="*"Package Id="*"

需要降级的原因是客户端应用程序需要运行与服务器相同的版本以确保兼容性,并且整个过程需要自动化,因此如果客户端/服务器版本在登录时不匹配,用户可以单击“是”,下载、安装并启动正确的版本。到目前为止,这适用于升级,但对于降级,需要一个额外的不直观的步骤,即手动重新启动应用程序,然后在启动之前看到一个 Windows 安装程序对话框弹出。

最终的结果是,无论升级还是降级,都需要完全卸载当前版本,并完全安装下载的版本,所以如果有其他方法可以做到这一点,那也是一个很好的答案。

4

5 回答 5

5

这对我有用:

<Wix ...>
  <Product ...>
    <Property Id="REINSTALLMODE" Value="amus" />
    <MajorUpgrade AllowDowngrades="yes" />
于 2014-03-24T19:42:09.570 回答
2

允许降级不被认为是最佳实践,至少部分原因是很难测试您将支持的每个组合,而仍然可以修复它们。检测并阻止这种情况是否不可行(建议先删除较新版本),并且仅自动支持前进?

如果您必须让这个工作正常,那么详细日志中是否有任何内容用于降级安装(或用于修复 - 您需要设置机器的日志记录策略才能创建这个),这确认了主要升级(我会查看 FindRelatedProducts 附近)或讨论为什么您的 exe 的组件没有安装?一定要检查任何日志行,SELMGR因为它们可能会在较小的升级方案中解释这一点。

由于广告的快捷方式已经到位,因此听起来该组件已被广告。这可能表明在次要升级中违反了组件规则(特别是在较新版本中添加组件,看起来就像在旧版本中删除 - 请参阅 HeathS 的评论),尽管看起来Product/@Id='*'应该强制进行重大升级。

您也可以尝试在示例项目中工作,从具有单个功能、单个组件和单个文件的基础版本开始。如果相关,将另一个组件和文件添加到升级版本;否则只是增加文件版本。然后尝试您的相反方案。慢慢添加东西,直到找到罪魁祸首。然后希望它是您可以从您的真实产品中删除的东西,或者可以以其他方式解决。

于 2009-10-12T13:57:21.350 回答
1

How did you order the operations in your InstallExecuteSequence?

If you perform the uninstall after the install (which gives you the best upgrade performance) you might see issues if file versions change to lower versions; which could be the case on your downgrades.

Windows installer will not overwrite older versions with newer versions unless explicitly asked.

Reordering to uninstall before installing should help if this is the case.

于 2009-10-18T20:18:45.987 回答
1

我的建议是在“让它工作”方面有点 - 你可以尝试在降级的情况下静默修复自定义操作。

于 2009-10-12T16:34:47.210 回答
0

如果您使用两个“UpgradeVersion”元素会发生什么?

<UpgradeVersion Maximum="CurrentVersion" Property="PREVIOUSVERSIONSINSTALLED" IncludeMaximum="no" />
<UpgradeVersion Minimum="CurrentVersion" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="no" />
于 2009-10-16T17:58:27.533 回答