我试图让我的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")
似乎在我的测试中返回主机名后跟一个美元符号($)。
有人可以建议解决方案吗?