2011-03-22 56 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

相關問題