【问题标题】:How to check an installed version of a product from MSI如何从 MSI 检查产品的已安装版本
【发布时间】:2014-08-18 15:37:38
【问题描述】:

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

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

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

【问题讨论】:

  • 你想用什么编程语言来实现签到?
  • “该产品的 GUID(所有版本都相同)”将被解释为 UpgradeCode 属性,正如 PhilDW 在他的 answer 中使用的那样。 请确认。您可以使用包括InstEd 和WiX 的dark 在内的多种工具检查初始属性值。

标签: wix windows-installer


【解决方案1】:

要正确执行此操作,您可能需要使用自定义操作。在自定义操作中,使用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 Message="Product version 1.10.0 must be installed">
    <![CDATA[PRODUCTVERSION AND PRODUCTVERSION = "1.10.0"]]>
</Condition>

这将准确搜索 1.10.0 版本,因此如果您正在寻找“v1.10.0 或更新版本”之类的内容,可能不是您想要的……但应该可以帮助您入门。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      <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 之后对其进行排序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-11
        • 1970-01-01
        • 1970-01-01
        • 2015-02-22
        • 1970-01-01
        • 2013-11-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多