Wix 3.6:有条件地触发“RemoveExistingProducts”

时间:2013-02-12 09:03:11

标签: wix upgrade wix3.6

我抓了网但发现没有解决方案,或者我没有找到线索。

我需要在我的设置中有条件地执行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,但这是非法的。

有人知道如何解决我的问题吗?

原因是,我们希望允许用户(自担风险)安装多个版本的产品 - 这是我们客户的要求。

1 个答案:

答案 0 :(得分:0)

我认为,在默认序列中,RemoveExistingProducts在UI之前运行。

您可以尝试将RemoveExistingProducts操作重新连接到InstallFinalize之后,并使用条件触发它:

<RemoveExistingProducts After="InstallFinalize">
    NOT CHECKBOX
</RemoveExistingProducts>

不确定这样做会如何。

当您使用复选框退出对话框以手动卸载产品时,也可以尝试运行自定义操作。也许你甚至可以在所述自定义操作中强制启动RemoveExistingProducts

最后一个解决方案是创建一个单独的卸载程序,提示用户卸载产品,然后跟进实际的安装程序。