如何根据升级代码检测是不是安装了应用程序

Posted

技术标签:

【中文标题】如何根据升级代码检测是不是安装了应用程序【英文标题】:How to detect if app is installed based on upgrade code如何根据升级代码检测是否安装了应用程序 【发布时间】:2013-09-28 13:46:40 【问题描述】:

我正在安装几个产品,但是因为它们是在日常构建中自动构建的,所以它们有各种 GUID。他们只是有相同的升级代码...

所以我的问题是: 是否可以仅使用 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'

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

任何帮助将不胜感激。

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

【问题讨论】:

【参考方案1】:

您可以使用Upgrade 元素执行此操作。看到这个问题:How to implement WiX installer upgrade?

如果只想检测应用程序是否已经安装,使用OnlyDetect属性(Rob's answer有这种用法的例子)。

如果您真的想升级您的产品,官方WiX documentation 描述了最简单的方法。

【讨论】:

查看我的编辑问题...我知道我可以做您发布的内容,但这不是我想要的... 您也可以使用Upgrade 元素检测其他产品。您只需要使用其他产品的升级代码而不是您自己的。只要确保您设置了OnlyDetect,它就不会卸载其他产品。您甚至可以使用 MinimumMaximum 版本属性检查不同的版本。 它看起来你的解决方案运行良好,但是当我想卸载应用程序时,它没有检测到应用程序是否已安装......嗯,你知道是否可以在卸载时检测到它,修理还是改变?谢谢 我不确定您将如何在卸载时检测到,因为 FindRelatedProducts 操作不会在卸载序列中运行。也许您可以在安装期间将应用程序的状态存储在 reg 密钥或其他东西中,并在卸载期间检索它。如果不了解您的要求,就很难说。

以上是关于如何根据升级代码检测是不是安装了应用程序的主要内容,如果未能解决你的问题,请参考以下文章

检测是不是从在 3.5 上运行的 C# 代码安装了 MSBuild/.net 4?

网页代码 JS代码 检测手机或是Pad设备 是不是安装某软件 之后做相应的跳转

vb 检测某个进程是不是运行

Flutter 如何检测到安装了 VSCode?

Grails 检测是不是安装了插件

检测是不是安装了 Microsoft Access 驱动程序