首页 > 解决方案 > 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 生成

标签: javainstall4j

解决方案


以前的版本存储在注册表中,从 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

推荐阅读