如何用InstallShield 2016SP1实现旧版本检测并弹出指定安装提示
解决InstallShield 2016 SP1中阻止旧版本安装并提示卸载的问题
Hey,我之前也碰到过一模一样的需求——默认的主/次要升级是用来自动升级旧版本的,根本不是用来阻止安装的,所以你用那个肯定达不到效果。给你一套亲测有效的步骤,用自定义检测+条件判断来实现你要的提示:
1. 先加个系统搜索,检测旧版本是否存在
打开你的InstallShield项目,跟着走:
- 切换到System Configuration > System Search面板
- 点击工具栏的Add,选择Registry类型的搜索
- 配置搜索参数:
- 根目录选
HKEY_LOCAL_MACHINE - 键路径填旧版本产品的卸载注册表项,一般是
SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\[你的产品GUID](如果是32位产品装在64位系统里,要改成SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\[你的产品GUID]) - 要搜索的名称填
DisplayVersion(这个是显示在控制面板卸载列表里的版本号) - 搜索结果的属性名设为
OLD_VERSION_INSTALLED,记得勾选Store the actual value in the property - 点击OK保存配置
- 根目录选
2. 实现提示功能(两种方式选其一)
方式一:用自定义对话框弹出提示
- 切换到User Interface > Dialogs面板
- 在安装欢迎页(InstallWelcome)之前添加一个对话框:右键点击对话框列表→Add Dialog,选择MessageBox模板即可
- 修改对话框标题为
提示,消息内容设为你需要的产品已安装,请卸载后再安装新版本,只保留一个OK按钮 - 给这个对话框设置显示条件:点击对话框的Condition属性,输入
OLD_VERSION_INSTALLED = "1.1.3"(如果想拦截所有低于1.2.1的版本,就用VersionCompare(OLD_VERSION_INSTALLED, "1.2.1") < 0) - 设置OK按钮的动作:编辑按钮的Action属性,选择
Exit,退出代码设为1(表示安装终止)
方式二:用启动条件直接终止安装(更简洁)
- 切换到System Configuration > Launch Conditions面板
- 添加一个新条件:
- Condition填写
NOT OLD_VERSION_INSTALLED OR OLD_VERSION_INSTALLED >= "1.2.1" - Message填写
产品已安装,请卸载后再安装新版本
这样用户一运行安装包,只要检测到旧版本,就会直接弹出提示并终止安装,不用走后续流程
- Condition填写
为啥主/次要升级没用?
得给你理清楚逻辑:主/次要升级的设计目标是自动把旧版本升级到新版本——它会检测到旧版本后,自动执行卸载旧版本+安装新版本的流程,完全是自动化操作,根本不会提示用户手动卸载。这和你要的“阻止安装,让用户自行卸载旧版本”完全是两个需求,所以那个功能肯定解决不了你的问题。
最后提醒下:一定要确认旧版本的产品GUID是正确的,你可以在装了1.1.3版本的机器上,去注册表的卸载路径里找到对应的项,把GUID抄对,不然搜索会失败哦。
内容的提问来源于stack exchange,提问作者vishal shah
相关产品推荐
相关产品推荐

