5

如果已经安装,则无法重新运行JPackage安装程序,第二次似乎没有警告就退出,这是 Windows 上的正确行为吗?

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

好吧,就我而言,我正在尝试为我的 Java 应用程序构建一个 JPackage 安装程序,所以我正在构建它来安装它,然后调整设置,重建它并尝试重新安装。我花了一些时间才发现我无法重新安装它,除非我卸载第一次安装(使用控制面板、程序和功能)

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

这也意味着,如果我向客户部署新版本,并且稍后我需要修改安装程序,而不是我必须修改版本号以让用户重新安装,这通常可能是最佳实践,但我并不特别想要如果应用程序本身没有更改,则执行此操作。

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

4

2 回答 2

6

不知道这对 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% ...
于 2020-07-09T16:04:48.310 回答
1

这可能会修复重新安装。

在我的例子中,我创建了 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>
于 2020-07-09T12:43:58.143 回答