java - Install4j 64 位安装程序不会卸载以前的 32 位版本
问题描述
随着上一次版本的增加,我们将应用程序从 32 位更改为 64 位,但现在我们的安装程序无法识别何时安装了以前的版本,因此在安装新版本时它不会卸载以前的版本。
示例:应用程序版本 1.0.0 32 位 应用程序版本 2.0.0 32 位 应用程序版本 3.0.0 64 位
安装 1.0.0 版应用程序并执行 2.0.0 版安装程序 -> 卸载 1.0.0 版应用程序并安装 2.0.0 版。
安装应用程序版本 2.0.0 并执行版本 3.0.0 安装程序 -> 未触及应用程序版本 2.0.0 并安装版本 3.0.0。
我们没有更改应用程序 ID。
2.0.0 版安装程序使用 Install4j 6.1.6 生成,3.0.0 版使用 7.0.10 生成
解决方案
以前的版本存储在注册表中,从 install4j 8.0 开始,64 位安装程序不会检查 32 位注册表是否有以前的安装,以防止 64 位安装最终进入 32 位程序文件目录。
要卸载 32 位安装,请在安装程序的“启动”节点中添加“设置变量”操作,变量名称为“previousDir”和脚本
if (!context.isUpdateInstallation()) {
ApplicationRegistry.ApplicationInfo[] infos =
ApplicationRegistry.getApplicationInfoById(context.getApplicationId());
if (infos.length > 0) {
return infos[0].getInstallationDirectory().getPath();
}
}
return null;
然后在“安装文件”操作之前将“执行上一个卸载程序”操作添加到“安装”屏幕,并将“安装目录”属性设置为
${installer:previousDir}
和条件表达式
context.getVariable("previousDir") != null
推荐阅读
- android - 如何在Android中为TextInputLayout的提示和文本设置不同的重力
- python - 通过 Python Paramiko 以不同用户身份运行 SFTP 操作
- amazon-web-services - AWS 图像处理
- android - 无法在 android 的 BackPress 上获取 SearchView 的值
- python - Pandas to_datetime 未按预期格式化
- javascript - 如何在javascript中用正则表达式替换
- php - 查询以查找高级搜索选项
- c# - 将所有程序事件写入日志
- javascript - 数组 JavaScript
- html - XPATH,基于文本值抓取下一个 div 的内容