小智 9
在下面的示例中,您可以找到如何检查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) { }
}
}
Run Code Online (Sandbox Code Playgroud)
至少您应该能够使用该命令启动 cmd.exe 进程sc query service-name并解析输出以确定状态。不太漂亮,但由于 Windows 服务管理器缺乏 Java API,这将是一个可行的替代方案。
编辑 - 阅读java.lang.ProcessBuilder的 Javadoc ,它将允许您执行外部命令。您可能应该设置redirectErrorStream属性,以便不必处理两个输入流(stdout 和stderr),从而实现更简单的设计。