如何让Java应用程序自我更新?

Mar*_*ged 5 java service installer windows-installer

我正在开发一个将推广到Windows计算机的应用程序.因为我的客户很少有计算机知识,所以安装和更新需要尽可能简单.我希望安装是唯一的手动步骤,更新应该自动完成.

安装将通过Installshield完成,或者更有可能通过其中一个开源克隆完成.安装程序将安装这些组件:

  • Java运行时(Oracle JRE)作为一种便携式应用程序(这意味着只需复制包含的文件而不使用提供的安装程序)
  • Apache Commons Daemon将我的应用程序安装为Windows服务
  • 应用程序本身是使用Spring Boot创建的几个JAR的形状

当其中一个组件发生变化时,我希望自动更新它们并尽可能安静地更新它们.该应用程序将能够确定Web上是否有可用的更新并下载它们.

我有什么选择来实现这一目标?Java Webstart在我看来不是一个好的解决方案 - 例如它不能让我更新运行时.提供更新安装程序将需要用户交互,甚至可能需要管理权限,因此它不会以静默方式运行.

下面提出的链接不适合我的问题,因为我使用的守护进程需要在运行时更新,并且链接的帖子中的给定解决方案都不支持.

Ale*_*lex 2

我可以建议您重新考虑 Java Web Start 吗?连维基百科都知道

重要的 Web Start 功能包括在用户未安装 Java 的情况下自动下载和安装 JRE 的能力,以及程序员指定给定程序执行所需的 JRE 版本的能力。

如果您仍然不想使用 Web Start,那么这里是我在 Windows 机器上使用的完全静默的解决方案。假设这里是restart.bat

 cd \myApp
 echo Killing myApp
 pskill.exe myApp
 TIMEOUT 5

 del /q Release
 copy \\mainCIcomputer\Build Release

 TIMEOUT 5
 cd Release
 start myApp.exe
Run Code Online (Sandbox Code Playgroud)

您所要做的就是启动单独的进程,然后从中运行 restart.bat 。您可以使用任何技术来确定何时重新加载应用程序(例如,http/ftp 请求获取最新版本号,如果与现有版本号不同,则重新启动)。不要忘记 - 这个进程应该分开,以免与主 myApp 一起被杀死。它可以从另一批开始,或者,在我的例子中,我使用 IronPython:

from System.Diagnostics import Process
p = Process()
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardOutput = False
p.StartInfo.FileName = 'restart.bat'
p.Start()
p.WaitForExit()
Run Code Online (Sandbox Code Playgroud)