我正在寻找一种方法来阻止我的应用程序的降级。 但“问题”是,我要检查的版本号码
例如:它应该有可能是安装时1.0.0.1安装1.0.0.2 - 但它不应该是可以安装1.0.0.1安装1.0.0.2时。
我知道,该元素MajorUpgrade只检查前三个令牌。 也许有人可以给我一个想法,如何做到这一点? 我可以写一个CustomAction做到这一点? - 如果是,我怎么能在CustomAction检查哪个版本应安装并安装哪个版本? 哪里我有打电话给CustomAction,我怎么能显示一个消息,并防止从CustomAction安装?
这是一个普遍的要求。 下面的模式经常使用:
<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<>"" AND NOT Installed</Custom>
<RemoveExistingProducts After="InstallInitialize">PREVIOUSVERSIONINSTALLED<>""</RemoveExistingProducts>
</InstallExecuteSequence>
PreventDowngrading
自定义操作本质上是一个破错误:
<CustomAction Id="PreventDowngrading" Error="Newer version already installed." />
这对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。