如何从MSI检查已安装的产品版本

时间:2014-06-27 13:40:25

标签: wix windows-installer

在审查了这个网站上的很多帖子后,我决定把我的。 我正在准备一个使用Wix的MSI文件。 在安装我的系统之前,我需要检查是否安装了特定版本的企业产品。我有该产品的GUID(所有版本都相同),但我需要检查是否安装了1.10.0版本。 请问任何想法。 提前谢谢。

PD:我是Wix的新手,所以此刻我只是使用默认创建的wxs文件和安装项目。

澄清:我不想升级我正在安装的软件,我需要检查安装程序所依赖的其他程序和版本。

3 个答案:

答案 0 :(得分:2)

要正确执行此操作,您可能希望使用自定义操作。在自定义操作中,使用MsiGetProductInfo功能。

在纯WiX中执行此操作的方法是修改此处的示例:How do I compare registry versions in WiX?

首先创建一个RegistrySearch元素:

<Property Id="PRODUCTVERSION">
    <RegistrySearch Id="ProductVersionSearch" Root="HKLM" Key="software\Microsoft\Windows\Current Version\Uninstall\[PRODUCTCODE]" Name="DisplayVersion" Type="raw" />
</Property>

然后使用Condition元素:

<Condition Message="Product version 1.10.0 must be installed">
    <![CDATA[PRODUCTVERSION AND PRODUCTVERSION = "1.10.0"]]>
</Condition>

这会搜索完全版本1.10.0,所以如果您正在寻找类似&#34; v1.10.0或更新版本的内容,那么可能不是您想要的... ...但是应该让您开始

答案 1 :(得分:1)

也许在这篇文章中尝试提出的解决方案:WiX Installer: getting version of the product being upgraded

它涉及使用Upgrade表来标识已安装的产品,以及使用VBScript确定版本的自定义操作。

答案 2 :(得分:1)

如果您想要执行类似创建错误消息或安装失败的情况(如果该版本存在),您可以拥有多个升级条目。有一个像这样的东西,错误的语法...

<Property Id="VERSION110INSTALLED" Secure="yes" />
<Upgrade Id="YOUR_GUID">
  <UpgradeVersion
   Minimum="1.10.0" Maximum="1.10.0"
   Property="VERSION110SINSTALLED"
   IncludeMinimum="yes" IncludeMaximum="yes" OnlyDetect="yes" />
</Upgrade>

如果存在版本1.10.0,则设置该属性,如果要在VERSION110SINSTALLED上生成错误消息,请在FindRelatedProducts之后对其进行排序。