如何基于升级代码检测应用程序是否已安装

4

我正在安装几个产品,但由于它们是在每日构建中自动构建的,因此它们具有不同的GUID。它们只有相同的UPGRADE代码...

所以我的问题是: 是否可能仅使用UPGRADE代码就知道该产品是否已安装(无需使用自定义操作)?

我尝试了:

    <Property Id="WF_INSTALLED" Value="NOT INSTALLED">
        <ProductSearch Minimum="0" UpgradeCode="{XXXXXXXX-XXXX-XXXX-XXXX-8660911C6596}"/>
    </Property>

但是似乎我不能使用那个... 我还找到了一个注册表记录:
Root='HKLM' Key='SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UpgradeCodes\XXXXXXX'

其中XXXXXXXX是转换的UPGRADE Code,但在此键下没有值,因此我无法检查其是否存在:(

任何帮助都将不胜感激。

编辑:我正在尝试发现是否安装了其他产品,而不是我当前正在安装的产品。

1个回答

2
你可以使用Upgrade元素来实现这一点。参见此问题:如何实现 WiX 安装程序升级? 如果你只想检测应用程序是否已经安装,请使用OnlyDetect属性(Rob's answer 中有一个使用示例)。
如果你真的想升级你的产品,官方WiX文档描述了最简单的方法来实现这一点。

请看我在问题中的编辑...我知道我可以做你发的那个,但那不是我想要的... - Dusan Plavak
2
您也可以使用“升级(Upgrade)”元素来检测其他产品。您只需要使用其他产品的升级代码而不是自己的即可。请确保设置“OnlyDetect”以避免卸载其他产品。您甚至可以使用“最小(Minimum)”和“最大(Maximum)”版本属性来检查不同版本。 - Dave Andersen
看起来你的解决方案很好,但是当我想要卸载应用程序时,它无法检测到应用程序是否已安装... 嗯,你知道是否可能在卸载、修复或更改时也能检测到吗?谢谢。 - Dusan Plavak
我不确定如何在卸载时检测,因为FindRelatedProducts操作不会在卸载序列中运行。也许你可以在安装期间将应用程序的状态存储在注册表键或其他地方,并在卸载期间检索它。如果不了解更多关于您的要求,很难说。 - Dave Andersen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接