目前,只要更新到较新的版本号,所有升级都可以正常工作,但是在降级时我会遇到奇怪的行为。它似乎将卸载现有版本,然后部分安装我正在尝试安装的版本,目标位置尚不存在主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安装程序对话框。
最终结果是,无论升级或降级,当前版本都需要完全卸载并且下载的版本已完全安装,因此如果还有另一种方法可以实现,那么这也是一个很好的答案。
答案 0 :(得分:3)
这对我有用:
<Wix ...>
<Product ...>
<Property Id="REINSTALLMODE" Value="amus" />
<MajorUpgrade AllowDowngrades="yes" />
答案 1 :(得分:2)
允许降级不被视为最佳做法,至少部分原因是因为很难测试您支持的每个组合,同时仍然可以修复它们。是不是可以检测并阻止这种情况(建议先删除新版本),并且只自动支持前进?
如果你必须让这个工作正常,那么降级安装(或修复 - 你需要设置机器的日志策略来创建这个)的详细日志中有什么东西可以确认主要的升级(我看看FindRelatedProducts附近)或讨论为什么没有安装exe的组件?绝对检查SELMGR
的任何日志行,因为他们可以在次要的升级方案中解释这一点。
由于广告的快捷方式已经到位,因此听起来就像组件被广告了一样。这可能表示在次要升级中违反了组件规则(特别是在较新版本中添加了一个类似于旧版本中删除的组件 - 请参阅HeathS的commentary),尽管Product/@Id='*'
似乎应该强制执行重大升级。
您也可以尝试使用示例项目,从具有单个功能,单个组件和带快捷方式的单个文件的基本版本开始。如果相关,请将另一个组件和文件添加到升级版本中;否则只是递增文件版本。然后尝试你的反向场景。慢慢添加东西,直到找到罪魁祸首。然后希望它可以从您的真实产品中删除,或者可以以其他方式解决。
答案 2 :(得分:1)
我的建议是关于“让它工作”的一点 - 你可以在降级的情况下尝试静默修复自定义动作。
答案 3 :(得分:1)
您是如何在InstallExecuteSequence中订购操作的?
如果您在安装后执行卸载(这可以提供最佳的升级性能),那么如果文件版本更改为较低版本,您可能会发现问题;你的降级可能就是这种情况。
除非明确询问,否则Windows安装程序不会覆盖旧版本的旧版本。
如果是这种情况,在安装之前重新排序以卸载应该会有所帮助。
答案 4 :(得分:0)
如果您使用两个“UpgradeVersion”元素会怎样?
<UpgradeVersion Maximum="CurrentVersion" Property="PREVIOUSVERSIONSINSTALLED" IncludeMaximum="no" />
<UpgradeVersion Minimum="CurrentVersion" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="no" />