Install4j - 卸载具有不同应用程序 ID 的旧应用程序

Install4j - Uninstall old application with different Application ID

我们目前为每个发布的新产品版本使用不同的随机生成的应用程序 ID 和安装目录。例如:

我们选择为每个新版本使用单独的 ID 和安装目录,以允许用户试用新版本而无需删除以前的版本。如果我们使用相同的 ID,它将覆盖以前的版本并使他们的许可证失效。

但是,对于知道自己想要升级的用户来说,安装新版本然后找到 & 运行 以前版本的卸载程序是一个 2 步过程。我们想要的是在安装过程中提示用户选择卸载以前的版本(如果找到)。

我们已经在 Install4j 设置中寻找一些预建选项来允许这样做,但没有找到好的解决方案。基本上我们想要的工作流程如下:

  1. 显示第一个标准欢迎屏幕
  2. 用户选择我们的自定义选项并开始安装
  3. 在安装过程中:首先检查是否存在以前的版本(使用 已知应用程序 ID 或其他方法),如果是,则显示消息 确认删除以前版本的用户
  4. 如果用户选择“是”运行 之前程序的卸载程序 完成当前新程序的安装。

最终我有2个与此相关的问题:

  1. 我们完成所需工作流程的最佳方式是什么?
  2. 如果没有简单的方法,是否有其他方法来设置我们的 应用程序版本,以便我们可以有一个类似的过程来允许 我们有单独的应用程序版本并以某种方式自动卸载 以前的版本?

注意:我们的解决方案还需要与 Windows、Mac 和 Linux

交叉兼容

谢谢!

如果设置 "Installation directory" 属性 并取消选择 "Only if the same application ID is found" 属性,则有一个 "Execute previous uninstaller" 操作可以从任何目录卸载。

要找出具有不同应用程序 ID 的先前版本的安装位置,请使用

ApplicationRegistry.ApplicationInfo[] applicationInfos =
   ApplicationRegistry.getApplicationInfoById("<application ID of previous version>");

if (applicationInfos.length > 1) {
   context.setVariable("uninstallDir",  
        applicationInfos[0].getInstallationDirectory().getPath());
}

在 "Run script" 动作中。然后可以将"Execute previous uninstaller"动作的"Installation directory"属性设置为

${installer:uninstallDir}

及其"Condition expression"到

context.getVariable("uninstallDir") != null