2008-09-24 208 views
5

我正在尋找一個庫,可以查看Windows服務的狀態以驗證服務是否已啓動並正在運行。我查看了Sigar庫,但它是GPL,因此我無法使用它。商業或BSD(ISH)許可證是必需的,因爲這將被捆綁到商業軟件中。在java中,有沒有辦法檢查Windows服務的狀態?

回答

4

如果沒有別的幫助,儘量想稍微不同的方式(如果可以的話,當然),例如:

  • 有足夠的空閒/非自由軟件,它確實監測,包括Windows服務監控(例如,Nagios,Zabbix等)。這些監視器通常具有開放的API,您的Java應用程序可以以多種不同的方式集成到這些API中。
  • 如果您可以控制依賴服務應用程序,請爲您的Java應用程序公開另一種不同的方式來檢查(例如,在端口上運行僞偵聽器,創建文件等)。 Windows服務不是一個跨平臺的東西,因此您不希望在短時間內得到支持。
0

我不知道任何庫,但取決於你需要得到多少詳細信息才能使用某些shell命令並解析輸出。

NET START 服務名

要麼啓動該服務,或給你回,告訴你它已經啓動的錯誤消息。我不知道任何能夠給你身份的命令。

3

我不認爲有任何純粹的Java方式來做到這一點,因爲一些操作系統沒有Windows那樣的「服務」概念。在我們的項目中,我們編寫了一個從命令行調用「sc」命令的包裝器。爲了得到一個服務的狀態,你可以這樣做:

SC \\一些計算機查詢「我的服務名」

你必須手動解析輸出,但它是非常簡單的。

+0

在Java中這樣做的簡單方法 – 2010-03-25 17:50:02

0

我認爲這是檢查服務狀態的最好方法。

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



     } 
    } 
相關問題