2016-12-12 94 views
1

我知道如何使用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 

回答

0

您可以使用Windows服务控制器(sc)命令从cmd.exe,像这样:

String[] script = {"cmd.exe", "/c", "sc", "start", "Tomcat8"}; 
Runtime.getRuntime().exec(script); 

也就是说只要你有安装Tomcat服务,并命名为Tomcat8。您可以检查安装说明here

+0

非常酷!有用。 –

+0

如何查询Windows服务是否正在运行(启动)?我看到一个现有的答案,但它不起作用,请参阅我编辑的问题。 –

+0

@BinyaminRegev你不能使用'process.isAlive',因为它只检查你生成的进程是否存在(即'cmd.exe',尽管我不知道为什么答案会因你的不同调用而有所不同。查看此线程了解如何检查服务的状态信息:https://stackoverflow.com/questions/5388888/find-status-of-windows-service-from-java-application – Shem

相关问题