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

2023-12-22

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

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

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


为了正确执行此操作,您可能需要使用自定义操作。在自定义操作中,使用微星获取产品信息 http://msdn.microsoft.com/en-us/library/aa370130%28v=vs.85%29.aspx功能。

在 pure-WiX 中执行此操作的一种方法是修改此处的示例:如何比较 WiX 中的注册表版本? https://stackoverflow.com/questions/7245152/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,因此如果您正在寻找“v1.10.0 或更高版本”之类的内容,可能不是您想要的...但应该可以帮助您开始。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 MSI 检查产品的已安装版本 的相关文章

随机推荐

  • 如何查找 Android 设备上设置的默认浏览器

    有什么方法可以找出 Android 设备上哪个浏览器被设置为默认浏览器 在 Android 设备上可能安装了多个浏览器 但其中只有一个设置为默认浏览器 我需要以编程方式找出它 提前致谢 尽早回复表示赞赏 这段代码可以帮助你 Intent b
  • 怎么叫沉默啊!在达利缓存存储上?

    我正在尝试在开发模式下使用缓存来开发应用程序 但是development log 垃圾邮件主要是由缓存日志造成的 我正在使用达利 我知道 达利有沉默 方法 https github com mperham dalli commit 8920
  • 如何修改一个大的 json 字符串?

    死一般的寂静 您在 Stackoverflow 上并不经常遇到这种情况 我添加了一小笔赏金来让事情顺利进行 我构建了一个 json 文档 其中包含有关各个国家 地区位置的信息 我添加了一些自定义键 这是 json 文件的开头 type Fe
  • Java 将 long 转换为字节 - 哪种方法更有效

    我有两种方法将 long 转换为字节数组 for int i 0 i lt 7 i data pos i byte value gt gt 7 i 1 lt lt 3 and for int i 7 i gt 0 i data p i by
  • 无法反序列化对象 - 应为 BEGIN_OBJECT,但在第 1 行第 1 列为 STRING

    首先我要说的是 我在发帖之前已经搜索过了 只是找不到答案 我在反序列化 JSON 时遇到问题 这是一个有效的 JSON 在http jsonlint com http jsonlint com 它是用 servicestack json 序
  • AVAudioSession 类别未按照文档指示工作

    我有一个 iOS 应用程序 在某些地方有一些音频反馈 但我希望允许用户在后台播放的任何其他音乐都可以在此之上播放 此外 我希望应用程序中的音频遵守静音开关 根据开发人员文档 此功能应全部由 AVAudioSession 环境类别启用 这是我
  • 如何使用 IOC 从存储库中删除工作单元功能

    我有一个使用 ASP NET MVC Unity 和 Linq to SQL 的应用程序 unity容器注册类型AcmeDataContext它继承自System Data Linq DataContext 有一个LifetimeManag
  • Firefox 通过 GeckoDriver 在 Selenium 3.0.1 中的 .Quit() 上抛出异常

    上下文 Firefox 50 0 2 64 位 C Visual Studio 2015 Windows Server 2012 R2 Azure ClearScript V8 5 4 7 Selenium Mozilla Firefox
  • 为什么我不能使用 AWS 的新 st1/sc1 EBS 卷作为根卷

    AWS 最近推出了 sc1 和 st1 HDD EBS 卷类型 在启动新的 EC2 实例或从已创建的 AMI 启动时 都尝试过 我似乎无法将它们用作根卷 我选择了一台 m4 机器 无论如何 根卷是 EBS 本身 下面是屏幕截图 我添加的第二
  • “模拟器”和“虚拟机”之间有哪些具体区别? [复制]

    这个问题在这里已经有答案了 我发现它们是不同的东西 但我真的无法说出为什么 有人说 模拟器是用来游戏的 虚拟机是用来操作系统的 我不同意这个答案 因为除了视频游戏控制台之外还有其他平台的模拟器 AMIGA 你能帮我吗 虚拟机利用 CPU 自
  • 使用html5上传浏览器中录制的音频

    我是 HTML Javascript 和公司的新手 所以请原谅我问一个可能很明显的问题 我想构建一个网络应用程序 用户可以在其中上传音频以及一些有关自己的信息 我有一个表格 大部分看起来像这样
  • EC2 上的 Java 8 应用程序

    我想知道是否有人知道我是否可以在 EC2 实例上安装 Java 8 我的应用程序打包为带有嵌入式 jetty 的 fat jar 因此仅 Java 8 运行时就足够了 我对 Linux 不太熟悉 我看到他们在默认 AMI 上只支持 Java
  • C# 中多线程和异步程序的区别

    我最初在 Stackoverflow 和 google 中搜索了类似类型的问题 只有一个链接给出了一些要点 但我无法清楚地理解 1 https social msdn microsoft com Forums en US 3de8670c
  • 如何以编程方式将程序的 CPU 使用率限制在 70% 以下?

    最近 我在构建程序时变得更加注重健康 我观察到大多数程序需要 2 或 3 分钟才能执行 当我检查任务调度程序时 我发现它们消耗了 100 的 CPU 使用率 可以我在代码中以编程方式限制这种用法 这肯定会让我能够在给定时间运行多个程序 谢谢
  • 一旦按下按钮,Java 键事件就不会执行

    您好 希望有人能告诉我我的关键事件做错了什么 我正在使用卡片布局来浏览我的两个 JPanels atm 为此 我使用操作事件和关键事件 当按下按钮时 动作事件将在 JPanel 之间切换 而当按下按键时 按键事件将隐藏按钮 按键事件一切顺利
  • asp.net MSDeployEnableWebConfigEncryptRule 无法加密 web.config

    我已经添加了
  • Rails:注册后设计登录

    我正在使用 Devise 来实现用户注册 登录 我希望用户注册成功后能够自动登录 我怎样才能做到这一点 可能情况是默认情况下设计这个 但也许我在某个地方禁用了该设置 我不记得了 你必须 1 将用户注册到设备网站 2 登录用户 对于选项 1
  • 无需矢量扫描即可查找给定区间内的值

    带有R包data table是否可以在不对数据进行全矢量扫描的情况下找到给定区间内的值 例如 gt DT lt data table x c 1 1 2 3 5 8 13 21 34 55 89 gt my data table funct
  • 如果我的测试中有验证,期望是否多余?

    我对期望和验证的目的和区别感到困惑 例如 Tested FooServiceImpl fooService Injectable FooDao fooDao Test public void callsFooDaoDelete throws
  • 如何从 MSI 检查产品的已安装版本

    在查看了这个网站上的很多帖子后 我最终决定把我的帖子放上来 我正在使用 Wix 准备 MSI 文件 在安装系统之前 我需要检查是否安装了特定版本的企业产品 我有该产品的 GUID 所有版本都相同 但我需要检查是否安装了 1 10 0 版本