我知道如何使用BAT文件(和linux/unix中的.sh文件)从Java程序启动/停止Tomcat。它的工作是这样的:如何从Java程序启动/停止Tomcat作为Windows服务,而不仅仅是从.bat启动/停止?
String command = "c:\program files\tomcat\bin\startup.bat";//for linux use .sh
Process child = Runtime.getRuntime().exec(command);
注:使用CATALINA_HOME,使这个代码更具活力。
现在我正在寻找一种方法来从Java程序启动/停止Tomcat的Windows服务。我的意思是,我想从Java开始/停止Tomcat,就好像我输入了控制面板 - >管理工具 - >服务。 可以这样做,或者使用BAT文件是我们能做到的最大值吗?
我看到的问题start windows service from java,但是当我用“SC”,然后试了一下process.isAlive()
是ALWAYSfalse
,当我用“网”而不是“SC”,那么process.isAlive()
总是true
,甚至当我用serviceName = "aliceinwonderland"
。代码示例我用:
//String servicename = "Dhcp"; // real service that exists and started.
String serviceName = "aliceinwonderland"; // fiction, no such service
//String[] script = {"cmd.exe", "/c", "sc", "query", serviceName, "|", "find", "/C", "\"RUNNING\""};
String[] script = {"cmd.exe", "/c", "net", "query", serviceName, "|", "find", "/C", "\"RUNNING\""};
Process process = Runtime.getRuntime().exec(command);
boolean alive = process.isAlive(); // using "sc" = false; using "net" = true
非常酷!有用。 –
如何查询Windows服务是否正在运行(启动)?我看到一个现有的答案,但它不起作用,请参阅我编辑的问题。 –
@BinyaminRegev你不能使用'process.isAlive',因为它只检查你生成的进程是否存在(即'cmd.exe',尽管我不知道为什么答案会因你的不同调用而有所不同。查看此线程了解如何检查服务的状态信息:https://stackoverflow.com/questions/5388888/find-status-of-windows-service-from-java-application – Shem