在java中,有没有办法检查Windows服务的状态?
问题描述:
我正在寻找一个库,可以查看Windows服务的状态以验证服务是否已启动并正在运行。我查看了Sigar库,但它是GPL,因此我无法使用它。商业或BSD(ISH)许可证是必需的,因为这将被捆绑到商业软件中。在java中,有没有办法检查Windows服务的状态?
答
如果没有别的帮助,尽量想稍微不同的方式(如果可以的话,当然),例如:
- 有足够的空闲/非自由软件,它确实监测,包括Windows服务监控(例如,Nagios,Zabbix等)。这些监视器通常具有开放的API,您的Java应用程序可以以多种不同的方式集成到这些API中。
- 如果您可以控制依赖服务应用程序,请为您的Java应用程序公开另一种不同的方式来检查(例如,在端口上运行伪侦听器,创建文件等)。 Windows服务不是一个跨平台的东西,因此您不希望在短时间内得到支持。
答
我不知道任何库,但取决于你需要得到多少详细信息才能使用某些shell命令并解析输出。
NET START 服务名
要么启动该服务,或给你回,告诉你它已经启动的错误消息。我不知道任何能够给你身份的命令。
答
我不认为有任何纯粹的Java方式来做到这一点,因为一些操作系统没有Windows那样的“服务”概念。在我们的项目中,我们编写了一个从命令行调用“sc”命令的包装器。为了得到一个服务的状态,你可以这样做:
SC \\一些计算机查询“我的服务名”
你必须手动解析输出,但它是非常简单的。
答
我认为这是检查服务状态的最好方法。
import java.util.*;
import java.sql.*;
import java.io.*;
import java.text.*;
public class doscmd
{
public static void main(String args[])
{
try
{
Process p=Runtime.getRuntime().exec("sc query browser"); //sc query is commond and browser is the name of service
BufferedReader reader=new BufferedReader(new InputStreamReader(p.getInputStream()));
String line=reader.readLine();
while(line!=null)
{
if(line.trim().startsWith("STATE"))
{
if (line.trim().substring(line.trim().indexOf(":")+1,line.trim().indexOf(":")+4).trim().equals("1"))
System.out.println("Stopped");
else
if (line.trim().substring(line.trim().indexOf(":")+1,line.trim().indexOf(":")+4).trim().equals("2"))
System.out.println("Startting....");
else
if (line.trim().substring(line.trim().indexOf(":")+1,line.trim().indexOf(":")+4).trim().equals("3"))
System.out.println("Stopping....");
else
if (line.trim().substring(line.trim().indexOf(":")+1,line.trim().indexOf(":")+4).trim().equals("4"))
System.out.println("Running");
}
line=reader.readLine();
}
}
catch(IOException e1) { }
}
}
在Java中这样做的简单方法 – 2010-03-25 17:50:02