从Java应用程序中查找Windows服务的状态?
如何从java程序检查windows服务的状态?至少您应该能够使用命令从Java应用程序中查找Windows服务的状态?,java,windows-services,Java,Windows Services,如何从java程序检查windows服务的状态?至少您应该能够使用命令sc query service name启动cmd.exe进程,并解析输出以确定状态。不太好看,但是Windows服务管理器缺少Java API,这将是一个可行的替代方案 编辑-读取的Javadoc,这将允许您执行外部命令。您可能应该设置redirectErrorStream属性,这样就不必处理两个输入流(stdout和stderr),从而使设计更加简单。在下面的示例中,您可以找到如何检查windws服务状态,以及如何解析以
sc query service name
启动cmd.exe进程,并解析输出以确定状态。不太好看,但是Windows服务管理器缺少Java API,这将是一个可行的替代方案
编辑-读取的Javadoc,这将允许您执行外部命令。您可能应该设置redirectErrorStream属性,这样就不必处理两个输入流(stdout和stderr),从而使设计更加简单。在下面的示例中,您可以找到如何检查windws服务状态,以及如何解析以执行某些操作
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");
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) { }
}
}
此方法将返回true或false,具体取决于服务是否正在运行
public boolean checkIfServiceRunning(String serviceName) {
Process process;
try {
process = Runtime.getRuntime().exec("sc query " + serviceName);
Scanner reader = new Scanner(process.getInputStream(), "UTF-8");
while(reader.hasNextLine()) {
if(reader.nextLine().contains("RUNNING")) {
return true;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
@Péter Török的可能重复:这可能是问题的重复,但这个问题的答案都没有涉及到我提供的基于ProcessBuilder的相对简单的答案。我已经在谷歌上搜索了这个sc查询,你能告诉我如何从java运行这个查询吗?我编辑了我的答案,包含了一个指向API的指针,你需要这样做。上面的代码没有返回任何内容。调试时,它表示访问被拒绝且为空。