我抓了网但发现没有解决方案,或者我没有找到线索。
我需要在我的设置中有条件地执行RemoveExistingProducts
操作。我希望我的设置默认卸载所有现有产品,如下所示:
<MajorUpgrade AllowDowngrades="no" DowngradeErrorMessage="No downgrades allowed" />
这很好用。但是当用户取消选择我的UI中的复选框时,我希望安装程序不要卸载以前的产品版本。所以我试过这样的事情:
<Property Id="PREVIOUSVERSIONSINSTALLED" Secure="yes" />
<Upgrade Id="3E700BA7-CAF8-4C49-A53A-70F70DE0C8D6">
<UpgradeVersion
Minimum="1.0.0.0" Maximum="99.0.0.0"
Property="PREVIOUSVERSIONSINSTALLED"
IncludeMinimum="yes" IncludeMaximum="no" OnlyDetect="myVar" />
</Upgrade>
<Property Id="myVar" Value="no" />
希望我可以设置myVar
,但这是非法的。
有人知道如何解决我的问题吗?
原因是,我们希望允许用户(自担风险)安装多个版本的产品 - 这是我们客户的要求。
答案 0 :(得分:0)
我认为,在默认序列中,RemoveExistingProducts
在UI之前运行。
您可以尝试将RemoveExistingProducts
操作重新连接到InstallFinalize
之后,并使用条件触发它:
<RemoveExistingProducts After="InstallFinalize">
NOT CHECKBOX
</RemoveExistingProducts>
不确定这样做会如何。
当您使用复选框退出对话框以手动卸载产品时,也可以尝试运行自定义操作。也许你甚至可以在所述自定义操作中强制启动RemoveExistingProducts
。
最后一个解决方案是创建一个单独的卸载程序,提示用户卸载产品,然后跟进实际的安装程序。