1

我爬网但没有找到解决方案,或者我只是没有线索。

我需要有条件地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,但这是非法的。

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

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

4

1 回答 1

0

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

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

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

不知道这在你的情况下会如何。

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

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

于 2013-02-20T03:04:21.917 回答