installation - Installshield :卸载以前版本并安装最新版本的自定义操作
问题描述
我的要求如下:
如果安装了 12.0 版本的应用程序,
C:\Folder1
并且要在文件夹C:\Folder1
中安装 13.0 版本的安装程序,则 13.0 版本的安装程序应静默卸载 12.0 版本并安装最新版本 13.0如果安装了版本为 12.0 的应用程序,
C:\Folder1
并且要在文件夹C:\Folder200
中安装版本为 13.0 的设置,则版本 13.0 的设置应安装最新版本并保留版本 12.0
我尝试过的事情:
如果我使用升级代码方法卸载以前的版本,那么即使以前的版本安装在系统的任何位置,也会发生以前版本的卸载。
使用自定义操作 - 创建一个 vbscript 以使用 WindowsInstaller.Products 数据读取已安装的产品,并使用产品代码创建一个命令以使用“msiexec.exe /x ProductCode”卸载应用程序
- 在安装屏蔽项目的“文件传输之前”部分中添加此自定义操作时,会弹出一个“应用程序正在安装版本并等待它完成该过程”的弹出窗口。
- 自定义操作的“等待操作”属性设置为是。
- 我尝试将其设置为“否”,但仍然出现相同的弹出窗口。
- 如果我在安装屏蔽项目的“设置完成后成功对话框”部分添加自定义操作,则安装两个版本,并且在 vbscript 执行后,它会卸载以前的版本。这种方法的问题是,当我双击应用程序的桌面图标时;它开始安装并显示安装进度的弹出窗口。这会让客户感到困惑。所以这种方法是不合适的。
我们没有在注册表中添加任何数据,因此无法使用注册表方法卸载以前的版本。
这是任何软件的一个非常基本的要求,但我无法弄清楚如何实现这一点。如果有人有一些指示,请告诉我。
我有 Installshield 限量版 2015 和 Visual Studio 2015 Professional。
解决方案
这实际上不是“任何软件的基本要求”。基础是如果安装了 ProductCode/UpgradeCode 升级它。
对于第 2 点,您会收到弹出窗口,因为您尝试同时运行 2 个 MSI ExecuteSequences。如果您想继续这条路,您必须将卸载操作移至 UISequence。请注意,静默安装不会运行此操作,因为它永远不会命中 UISequence。此外,走这条路的更好方法是构建您自己的引导程序 (setup.exe) 来控制卸载/安装流程。
推荐阅读
- google-apps-script - 将行从 A 列中具有历史日期的多个选项卡移动到单个选项卡
- c# - 用 { } vs => 定义属性有什么区别?
- javascript - 用于检查多级数组中特定数字的 JavaScript 代码
- c++ - 模板类的 C++11 std::vector 在构造函数中带有参数
- php - $checkLike = $user->places->contains($placeId); 即使根据我的计算它应该返回true,但仍然返回false
- sql - 如何根据查询结果从存储过程中将列添加到选择中?
- python - 自定义评分指标 sklearn 逻辑回归
- javascript - 我的 AngularJs 应用程序不会转发到另一个站点
- python - 如何在 Python 中修复井字游戏,填充整列而不是一个正方形
- vb.net - 解码邮件编码字=?utf-8?B?xxxx?=,=?utf-8?Q?xxxx?=