如果已经安装,则无法重新运行 Java JPackage 安装程序,第二次只是在没有警告的情况下退出

Cannot rerun Java JPackage installer if already installed, second time just exits without warning

无法重新运行 JPackage 安装程序,如果已经安装,第二次只是 似乎在没有警告的情况下退出 ,这是 [=30 上的正确行为吗=] ?

你可能会问我为什么要这么做?

在我的例子中,我正在尝试为我的 Java 应用程序构建一个 JPackage 安装程序,所以我正在构建它并安装它,然后调整设置,重建它并尝试重新安装。我花了一些时间才弄清楚,除非我卸载第一次安装(使用控制面板、程序和功能),否则我无法重新安装它

我的案例可能不是通常的用例,但它没有给出任何理由就退出感觉不正确。

这也意味着,如果我向客户部署了一个新版本,之后我需要修改安装程序,而不是我必须修改版本号才能让用户重新安装,这通常可能是最佳做法,但是如果应用程序本身没有更改,我不会特别想做。

更新:自从通过查看 TaskManager 发现它仍然是 运行 但似乎没有做任何事情并且没有给用户任何指示!

这可能会修复重新安装。

在我的例子中,我创建了 jpackage 安装程序,安装它,创建一个新的安装程序(基于 Inno Setup)并自动卸载 jpackage。

我认为在您的情况下可能有用的方法是卸载第一个安装,因为安装程序可能会检测到它已经安装了相同的版本。

在我的例子中,我使用 Ant 任务自动卸载

  <target name="uninstall" depends="init">
    <exec executable="wmic.exe">
      <arg value="product" />
      <arg value="where" />
      <arg value="description='${full.name}'" />
      <arg value="uninstall" />
    </exec>
  </target>

不知道这对 Mac 或 Linux 是否有帮助,但 Windows 安装程序会在您 运行 时自动删除应用程序的旧版本,因此您只需要设置一个在每次构建时更改版本号的方案,以避免每次都必须卸载旧版本。

要做到这一点,您可以将版本号设置为“YY.MM.DDHH”,这样版本号每小时都会更改并减少卸载。

蚂蚁步骤:

<tstamp>
    <format property="appver"     pattern="yy.MM.ddHH" />
</tstamp>

<exec executable="jpackage">
    <arg line="--app-version ${appver}"/>
    ...
</exec>

此命令的 CMD 版本:

set appver=%date:~6,2%.%date:~3,2%.%date:~0,2%%time:~0,2%
jpackage --app-version %appver% ...