维克斯 - 防止降级与检查修订(WiX - Prevent downgrade with check

2019-09-17 01:34发布

我正在寻找一种方法来阻止我的应用程序的降级。 但“问题”是,我要检查的版本号码

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

我知道,该元素MajorUpgrade只检查前三个令牌。 也许有人可以给我一个想法,如何做到这一点? 我可以写一个CustomAction做到这一点? - 如果是,我怎么能在CustomAction检查哪个版本应安装并安装哪个版本? 哪里我有打电话给CustomAction,我怎么能显示一个消息,并防止从CustomAction安装?

Answer 1:

这是一个普遍的要求。 下面的模式经常使用:

<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." />


Answer 2:

这对WIX网站的教程为我工作。

总结它,你必须添加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。



文章来源: WiX - Prevent downgrade with check for revision