2011-03-22 54 views
5

如何从java程序中检查windows服务的状态?从Java应用程序中查找Windows服务的状态?

+1

可能重复有什么办法,在Java中,以检查状态一个Windows服务?](http://stackoverflow.com/questions/127299/is-there-any-way-in-java-to-check-on-the-status-of-a-windows-service) – 2011-03-22 09:11:15

+0

@ PéterTörök:这可能是一个可能的问题,但这个问题的答案没有涉及我提供的相对简单的基于ProcessBuilder的答案。 – 2011-03-25 01:15:56

回答

2

至少您应该能够使用命令sc query service-name启动cmd.exe进程并解析输出以确定状态。不太好,但缺少Windows服务管理器的Java API,这将是一个可行的选择。

编辑 - 阅读Javadoc的java.lang.ProcessBuilder,这将允许您执行外部命令。您应该设置redirectErrorStream属性,以便您不必处理两个输入流(stdout和stderr),从而实现更简单的设计。

+0

我已经使用了这个sc查询,它的工作很好。你可以告诉我,我怎么能从java运行这个查询? – 2011-03-24 07:07:29

+0

我编辑了我的答案,包含一个指向您需要执行此操作的API的指针。 – 2011-03-25 01:14:04

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) { } 



    } 
} 
的[
+0

伟大的答案waleed .. – bluelurker 2015-04-05 20:15:25

+0

上面的代码不会返回任何内容。调试时,它表示访问被拒绝并为空。 – 2016-03-08 09:32:33

相关问题