以编程方式重新启动可以作为Windows服务运行的Java应用程序

时间:2015-01-12 15:34:19

标签: java windows service restart

我试图让我的Java应用程序能够以编程方式重新启动。

我已经有了一个可行的解决方案,当它作为一个独立的应用程序执行时 - 该应用程序使用自己的类路径,jvm参数,类名和命令行参数调用java.exe;然后退出(参见我的stack overflow answer)。

但是当应用程序作为Windows服务运行时,这种方法并不干净地工作 - 而不是重新启动的服务,我最终得到了SYSTEM帐户执行的java.exe进程,以及服务的状态停止(因为它退出)。因此应用程序确实重新启动,但不再是服务。

我知道窗口restarts services that exit with a non-zero exit code但是 a)我不确定它是否始终有效(请参阅this问题) b)我不确定如何识别应用程序首先作为Windows服务运行的事实 - System.getProperty("user.name")似乎在我的测试中返回主机名后跟一个美元符号($)。

有人可以建议解决方案吗?

1 个答案:

答案 0 :(得分:2)

Launch4j包有一个<restartOnCrash>服务参数。