2009-10-09 100 views
8

目前所有升级都可以在更新到新版本号时正常工作,但是在降级时出现奇怪的行为。它似乎会卸载现有的版本,然后部分安装我试图安装的版本,目前的位置还不存在主要的exe文件,但创建了广告快捷方式。当广告的快捷方式打开后,它会完成安装(大概会进行修复),然后运行正常。WiX“重大升级”并未完全安装应用程序降级

有没有人有任何想法,为什么发生这种情况?

我升级块看起来是这样的:

<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

即使在今天,我有这无尽的问题。 WiX添加了一个新的“MajorUpgrade”元素,该元素本应让事情变得更难以出错。我们现在正在使用这个功能,但即便如此,降级也与以前一样。现在的区别是它删除了一些元凶:(1)InstallExecuteSequence(2)UpgradeVersion元素。 – Trejkaz 2011-11-15 22:49:08

回答

2

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

如果你必须得到这个工作,在降级安装(或修复 - 你需要设置机器的日志策略来获得这个创建的)的详细日志中是否有任何内容确认主要升级(我会看FindRelatedProducts附近)或讨论为什么没有安装您的EXE组件?肯定会检查有SELMGR的任何日志行,因为他们可能会在较小的升级情况下解释此行。

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

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

1

我的建议是“让它工作”的一面 - 你可以尝试一个沉默的修复自定义操作的情况下降级。

+0

我无法找到如何将修复安排为自定义操作。你有任何描述这个的链接? – Davy8 2009-10-12 20:21:12

+0

我在想像使用msiexec运行自定义操作并使用msi作为源(msiexec/fa prod.msi/qn) – Gabriel 2009-10-12 23:09:51

+0

我不确定一次可以运行多个Windows安装程序实例。在这种情况下,会有两个。一个从另一个执行。 – w4g3n3r 2009-10-16 17:54:43

0

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

<UpgradeVersion Maximum="CurrentVersion" Property="PREVIOUSVERSIONSINSTALLED" IncludeMaximum="no" /> 
<UpgradeVersion Minimum="CurrentVersion" Property="PREVIOUSVERSIONSINSTALLED" IncludeMinimum="no" /> 
1

您是如何订购InstallExecuteSequence中的操作的?

如果您在安装后执行卸载(这会提供最佳的升级性能),如果文件版本更改为较低版本,则可能会出现问题;您的降级可能就是这种情况。

除非明确询问,否则Windows安装程序不会覆盖较新版本的旧版本。

如果是这种情况,重新排序以在安装之前卸载应该会有所帮助。

+0

卸载是在安装之前订购的。升级之前有过这个问题,直到我重新安排它。现在它适用于升级,但仍然存在降级问题 – Davy8 2009-10-19 04:23:40

3

这是对我工作:

<Wix ...> 
    <Product ...> 
    <Property Id="REINSTALLMODE" Value="amus" /> 
    <MajorUpgrade AllowDowngrades="yes" /> 
+0

这应该是公认的答案。这也适用于我,虽然我使用“dmus”而不是“amus”来仅在版本不同的情况下覆盖文件。完整的标志列表在这里:https://msdn.microsoft.com/en-us/library/aa371182%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 – 2016-03-04 10:04:20