我正在尝试使我的Java应用程序能够以编程方式自行重启。

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

但是,当应用程序作为Windows服务运行时,这种方法无法正常工作-代替重新启动的服务,我最终遇到了由SYSTEM帐户执行的java.exe进程,并且服务的状态已停止(因为它退出)。因此,该应用程序确实会重新启动,但不再是服务。

我知道Windows restarts services that exit with a non-zero exit code,但是a)我不确定它是否总是可以正常工作(请参阅this问题)b)我不确定在第一个方法中如何识别应用程序作为Windows服务运行的事实地方-System.getProperty("user.name")在我的测试中似乎只返回了主机名,后跟一个美元符号($)。

谁能提出解决方案?

最佳答案

Launch4j包的服务参数为<restartOnCrash>

09-16 05:15