Есть ли способ, в Java, чтобы проверить состояние службы Windows?

Я ищу библиотеку, которая позволит мне посмотреть состояние службы Windows, чтобы убедиться, что служба запущена и работает. Я заглянул в библиотеку Sigar, но это GPL, и поэтому я не могу ее использовать. Требуется коммерческая или BSD(ish) лицензия, поскольку она будет включена в коммерческое программное обеспечение.

3 ответа

Решение

Если больше ничего не помогает, попробуйте придумать немного другой подход (если можете, конечно), например:

  • Существует множество бесплатных / несвободных программ, которые осуществляют мониторинг, включая мониторинг служб Windows (например, nagios, Zabbix и т. Д.). Эти мониторы обычно имеют открытый API, в который ваше Java-приложение может интегрироваться различными способами.
  • Если у вас есть контроль над зависимым приложением-службой, предоставьте другой, другой способ проверки приложению Java (например, запустите фиктивный прослушиватель на порту, создайте файл и т. Д.). Службы Windows не являются кроссплатформенными, поэтому их нельзя ожидать в ближайшее время.

Я не думаю, что существует какой-либо чистый Java-способ сделать это, потому что некоторые операционные системы не имеют понятия "сервисы", как в Windows. В наших проектах мы написали оболочку для вызовов команды sc из командной строки. Чтобы получить статус услуги, вы можете сделать:

sc \\ some-computer query "имя моей службы"

Вам придется вручную анализировать вывод, но это довольно просто.

Я не знаю ни о каких библиотеках, но в зависимости от того, насколько подробно вы должны их получить, вы можете обойтись с помощью некоторых команд оболочки и анализа выходных данных.

NET START имя сервера

либо запустит службу, либо вернет вам сообщение об ошибке, сообщающее, что оно уже запущено. Я не знаю ни одной команды, которая просто даст вам статус.

Я думаю, что это лучший способ проверить статус сервиса.

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



       } 
     } 
Другие вопросы по тегам