WiX - 通过检查修订来防止降级

时间:2012-05-05 12:28:53

标签: wix windows-installer custom-action

我正在寻找一种方法来阻止我的应用程序降级。但“问题”是,我必须检查修订号

例如: 安装1.0.0.1时应该可以安装1.0.0.2 - 但是安装1.0.0.2时不应该安装1.0.0.1。

我知道,Element MajorUpgrade只检查前三个令牌。 也许有人可以给我一个想法,怎么做?我可以写一个CustomAction来做到这一点吗? - 如果是,我如何检查CustomAction应该安装哪个版本以及安装了哪个版本? 我在哪里调用CustomAction,如何显示消息并阻止从CustomAction安装?

2 个答案:

答案 0 :(得分:2)

这是一个常见的要求。经常使用以下模式:

<Upgrade Id="THE-PRODUCT-GUID">
  <UpgradeVersion Property="PREVIOUSVERSIONINSTALLED" Minimum="1.0.0.0" Maximum="$(var.packageVersion)"
          IncludeMinimum="yes" IncludeMaximum="no" MigrateFeatures="yes" />
          IncludeMinimum="yes" IncludeMaximum="yes" />
  <UpgradeVersion Property="NEWERVERSIONINSTALLED" Minimum="$(var.packageVersion)" Maximum="99.0.0.0"
          IncludeMinimum="no" IncludeMaximum="yes" />
</Upgrade>

<InstallExecuteSequence>
  <Custom Action="PreventDowngrading" After="FindRelatedProducts">NEWERVERSIONINSTALLED&lt;&gt;"" AND NOT Installed</Custom>
  <RemoveExistingProducts After="InstallInitialize">PREVIOUSVERSIONINSTALLED&lt;&gt;""</RemoveExistingProducts>
</InstallExecuteSequence>

PreventDowngrading自定义操作本质上是一个突发错误:

<CustomAction Id="PreventDowngrading" Error="Newer version already installed." />

答案 1 :(得分:2)

WIX网站上的

This教程为我工作。

总结一下,您必须在升级标记中添加应该在您的产品中的UpgradeVersion标记。然后添加自定义操作并有条件地安排它 - 在FindRelatedProducts之前并测试是否已安装更新的版本。

代码可以是:

<Product ...>
 <Upgrade Id="YOUR-UPGRADE_GUID">  
  <UpgradeVersion OnlyDetect="yes" Property="NEWERFOUND" Minimum="{CURRENTVERSION}}" IncludeMinimum="no" />
 </Upgrade>
 <CustomAction Id="NoDowngrade" Error="Error Message" />
 <InstallExecuteSequence>
  <Custom Action="NoDowngrade" After="FindRelatedProducts">NEWERFOUND</Custom>
  <RemoveExistingProducts Before="InstallInitialize" />
 </InstallExecuteSequence>
</Product>

将CURRENTVERSION替换为产品的版本号。