Есть ли способ, в 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) { }
}
}