首页 > 解决方案 > Installshield :卸载以前版本并安装最新版本的自定义操作

问题描述

我的要求如下:

  1. 如果安装了 12.0 版本的应用程序,C:\Folder1并且要在文件夹C:\Folder1中安装 13.0 版本的安装程序,则 13.0 版本的安装程序应静默卸载 12.0 版本并安装最新版本 13.0

  2. 如果安装了版本为 12.0 的应用程序,C:\Folder1并且要在文件夹C:\Folder200中安装版本为 13.0 的设置,则版本 13.0 的设置应安装最新版本并保留版本 12.0

我尝试过的事情:

  1. 如果我使用升级代码方法卸载以前的版本,那么即使以前的版本安装在系统的任何位置,也会发生以前版本的卸载。

  2. 使用自定义操作 - 创建一个 vbscript 以使用 WindowsInstaller.Products 数据读取已安装的产品,并使用产品代码创建一个命令以使用“msiexec.exe /x ProductCode”卸载应用程序

    • 在安装屏蔽项目的“文件传输之前”部分中添加此自定义操作时,会弹出一个“应用程序正在安装版本并等待它完成该过程”的弹出窗口。
    • 自定义操作的“等待操作”属性设置为是。
    • 我尝试将其设置为“否”,但仍然出现相同的弹出窗口。
    • 如果我在安装屏蔽项目的“设置完成后成功对话框”部分添加自定义操作,则安装两个版本,并且在 vbscript 执行后,它会卸载以前的版本。这种方法的问题是,当我双击应用程序的桌面图标时;它开始安装并显示安装进度的弹出窗口。这会让客户感到困惑。所以这种方法是不合适的。
  3. 我们没有在注册表中添加任何数据,因此无法使用注册表方法卸载以前的版本。

这是任何软件的一个非常基本的要求,但我无法弄清楚如何实现这一点。如果有人有一些指示,请告诉我。

我有 Installshield 限量版 2015 和 Visual Studio 2015 Professional。

标签: installationwindows-installerinstallshieldcustom-action

解决方案


这实际上不是“任何软件的基本要求”。基础是如果安装了 ProductCode/UpgradeCode 升级它。

对于第 2 点,您会收到弹出窗口,因为您尝试同时运行 2 个 MSI ExecuteSequences。如果您想继续这条路,您必须将卸载操作移至 UISequence。请注意,静默安装不会运行此操作,因为它永远不会命中 UISequence。此外,走这条路的更好方法是构建您自己的引导程序 (setup.exe) 来控制卸载/安装流程。


推荐阅读