Installshield主要升级不会卸载旧版本

2024-01-30

我有一个 Installshield 项目。

我添加了一个主要的升级项目并进行了更改Product version , Product code and Package code.

使用新安装程序安装后,旧版本仍然存在(在Add / Remove)

我认为这与我的旧版本号有关1.0.4.23新的是1.0.4.24- 这是一个问题吗?重大升级会忽略版本属性中如此小的变化吗?

重大升级中common我选择的选项卡Any earlier version

我记得几年前用版本号做过这个1.1 and 1.2一切都很好,这就是我怀疑当前问题与版本号有关的主要原因。


我认为这与我的旧版本号有关 1.0.4.23,新版本是 1.0.4.24 - 这是一个问题吗?重大升级会忽略版本中如此小的变化吗?

是的,只有版本号的前三个字段对于主要升级很重要。第四个字段被简单地忽略。

这是在注释中说明的主要升级 MSDN 页面 https://msdn.microsoft.com/en-us/library/windows/desktop/aa369786(v=vs.85).aspx.

如果您想触发重大升级,您的新版本号必须是1.0.5.0或更大。


Edit:

正如克里斯托弗·佩因特指出的:

如果您必须使用所有四个字段,则有一种方法可以解决此问题。你可以 创建一个自定义操作来执行您自己的实现 FindRelatedProducts 并使用 ProductCode 设置操作属性 然后,RemoveExistingProducts 将对其进行操作。

自定义操作可以这样实现:

  1. Call MsiGetProperty https://msdn.microsoft.com/en-us/library/windows/desktop/aa370134(v=vs.85).aspx得到升级代码您的产品。
  2. Call MsiEnumRelatedProducts() https://msdn.microsoft.com/en-us/library/windows/desktop/aa370103(v=vs.85).aspx枚举具有相同的所有产品升级代码作为您的产品。
  3. Call MsiQueryProductState() https://msdn.microsoft.com/en-us/library/windows/desktop/aa370363(v=vs.85).aspx验证退回的产品MsiEnumRelatedProducts()已实际安装。我经历过一些案例MsiEnumRelatedProducts()退回不再安装的孤立产品。因此,通过双重检查安装状态,代码将更加健壮MsiQueryProductState().
  4. Call MsiGetProductInfo() https://msdn.microsoft.com/en-us/library/windows/desktop/aa370130(v=vs.85).aspx with INSTALLPROPERTY_VERSIONSTRING作为论证szProperty参数来查询已安装产品的版本。不要使用INSTALLPROPERTY_VERSION相反,因为INSTALLPROPERTY_VERSION仅从版本号的前三个字段派生,这是我们要避免的问题。
  5. 比较版本号时,请确保不只是比较字符串,而是比较将字符串解析为由“.”分隔的字段并单独比较字段 https://stackoverflow.com/q/2941491/7571258.
  6. 如果您找到想要更换的匹配产品,请致电MsiSetProperty() https://msdn.microsoft.com/en-us/library/windows/desktop/aa370391(v=vs.85).aspx设置动作属性 https://msdn.microsoft.com/en-us/library/windows/desktop/aa372379(v=vs.85).aspx to the 产品代码该产品的RemoveExistingProducts https://msdn.microsoft.com/en-us/library/windows/desktop/aa371197(v=vs.85).aspx然后采取行动。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Installshield主要升级不会卸载旧版本 的相关文章

  • 使用WiX安装后是否可以提示重启机器?

    使用WiX安装后是否可以提示重启机器
  • 获取我的应用程序的当前 dot net 版本

    如何获取我的 asp net 应用程序的正在运行的 dot net 版本 我尝试了这里的解决方案 有没有一种简单的方法来检查 NET Framework 版本 https stackoverflow com questions 951856
  • Wix如何隐藏功能选项

    我正在使用 Wix 3 5 构建 MSI 安装程序 我想知道是否有任何方法可以隐藏 功能自定义安装对话框 中的某些选项 您可以在其中从功能树中选择要安装的内容 我只想有 将安装在本地硬盘上 和 整个功能将不可用 的选项 目前 除了这两个选项
  • 如何检测正在运行的 MSI 安装 [重复]

    这个问题在这里已经有答案了 我正在寻找一种方法来检测 Windows Installer 安装是否已在进行中 到目前为止我发现的是 检查注册表项 HKEY LOCAL MACHINE SOFTWARE Microsoft Windows C
  • 成功后动态改变EndDialog中的RTF内容

    多亏了这个question https stackoverflow com a 33679439 1076116 我能够执行自定义操作来临时更新和动态修改 MSI 数据库 简而言之 我正在做 CustomAction public stat
  • 为什么我无法将 ASP.NET Framework 版本显示为 3.5?

    有人可以向我确认一下 当我的应用程序是用 NET 3 5 编写时 这段代码 System Environment Version Major ToString 将产生这个 2 0 50727 1433 我刚刚迁移到 3 5 我迁移的第一个应
  • 使用帮助库管理器和 WiX 安装帮助

    我试图通过使用 WiX 运行 Sandcastle 帮助文件生成器在构建我的 Sandcastle 项目后创建的 HelpLibraryManagerLauncher 将我自己的帮助文件添加到 Visual Studio 2010 的帮助库
  • 如何在 Github Action 中使用 Github 发布版本号

    我创建了一个 Github 存储库 其中包含构建 npm 包并将其发布到 npmjs com 的操作 我的行动的触发因素是在 Github 上创建一个新版本 创建新版本时 Github 要求我提供版本号 我很想在操作中使用这个版本号并将其提
  • 从命令行获取设备的 Android SDK 版本

    我计划构建一个自动化系统 用于将 Android 版本部署到各种设备 以便使多平台开发更加轻松 有没有办法通过android shell或adb获取连接设备的sdk版本 将有一台计算机连接多个测试设备 我计划编写一个脚本 该脚本将从构建服务
  • 找到的程序集的清单定义与程序集引用不匹配

    我试图在 C Windows 窗体应用程序 Visual Studio 2005 中运行一些单元测试 但出现以下错误 System IO FileLoadException 无法加载文件或程序集 实用程序 版本 1 2 0 200 文化 中
  • 从命令行获取 NuGet.exe 版本

    我想得到NuGet exe使用命令行的版本 我知道我可以按照说明获取作为 Visual Studio 一部分运行的 NuGet 版本here http docs nuget org docs start here nuget faq How
  • 如何制作一个简单包装 EXE 文件的 MSI

    经过大量实验后 我得出的结论是 Windows Installer 是一种糟糕的技术 但客户需要 MSI 文件 那么 如何创建一个 MSI 文件 将 EXE 文件提取到临时目录 并使用与传递给 EXE 文件相同或相似的选项运行它 MSI 的
  • 如何检测当前的 JSF 版本?

    我正在开发 jsf webapp 现在我需要知道我正在使用什么 JSF 版本 我在哪里可以查到这个 提前致谢 您的意思是 以编程方式 你可以从Package getImplementationVersion http docs oracle
  • Installshield 在次要升级时不更新相关 DLL

    我目前正在使用 InstallShield 部署 NET Winforms 应用程序 我是 InstallShield 的新手 不太喜欢学习过程 Winforms 应用程序具有三个相关的 DLL 这些 DLL 在次要升级期间不会更新 例如
  • Wix - 自定义安装目录

    我使用的是 Wix 3 x 用户应该能够选择目标目录 我的Setup wxs目前是这样的 http pastebin com uH1EjbDQ http pastebin com uH1EjbDQ 询问用户自定义目标目录的最简单方法是什么
  • 如何获取nodejs程序中的nodejs版本?

    In a Node js 的调试器 https github com rocky trepanjs 有一个命令显示V8版本和调试器包版本 如何获取nodejs版本 我想我基本上可以运行命令node version or nodejs ver
  • ubuntu:升级软件(cmake)-版本消歧(本地编译)[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我的机器上安装了 cmake 2 8 0 来自 ubuntu 软件包 二进制文件放置在 usr bin cmake 中 我需要将 cmake 版本至少
  • Tensorflow 与 Keras 的兼容性

    我正在使用 Python 3 6 和 Tensorflow 2 0 并且有一些 Keras 代码 import keras from keras models import Sequential from keras layers impo
  • Javac 版本 1.7 无法为目标 1.7 构建

    我试图在 Linux Mint 系统上使用 Sun Java JDK 1 7 0 17 编译 Java 代码 但遇到了这个问题 javac version target 1 7 javac 1 7 0 17 javac invalid ta
  • 在java中查找OSX的版本

    我需要测试 java 中 osx 的版本是否 Try System getProperty os name and or System getProperty os version 它返回字符串 HERE https docs oracle

随机推荐