Install4j 64 位安装程序不会卸载以前的 32 位版本

Install4j 64-bit Setup doesn't uninstall previous 32-bit Version

随着上次版本的增加,我们将应用程序从 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位安装,在安装程序的"Startup"节点添加一个"Set a variable"动作,变量名"previousDir"和脚本

if (!context.isUpdateInstallation()) {
    ApplicationRegistry.ApplicationInfo[] infos = 
        ApplicationRegistry.getApplicationInfoById(context.getApplicationId());
    if (infos.length > 0) {
        return infos[0].getInstallationDirectory().getPath();
    }
}
return null;

然后在 "Install files" 操作之前将 "Execute previous uninstaller" 操作添加到 "Installation" 屏幕,并将 "Installation directory" 属性 设置为

${installer:previousDir}

和条件表达式

context.getVariable("previousDir") != null