Существует много информации о запуске приложений Java как сервисов, но мне нужно знать, как определить, запущена ли служба Windows или нет. Кто-нибудь знает как ???
В командной строке DOS я могу запустить:
tasklist /svc|findstr "NonRunningService"
echo Return code for N onRunningService is %ERRORLEVEL%
tasklist /svc|findstr "RunningService"
echo Return code for RunningService is %ERRORLEVEL%
Я получаю следующее:
Return code for NonRunningService is 1
Return code for RunningService is 0
В коде у меня есть:
int retCode = Runtime.getRuntime.exec("tasklist /svc|findstr \"NonRunningService\"").waitFor();
System.out.println("Return code for NonRunningService is " + retCode);
retCode = Runtime.getRuntime.exec("tasklist /svc|findstr \"RunningService\"").waitFor();
System.out.println("Return code for RunningService is " + retCode);
Я получаю следующий вывод
Return code for NonRunningService is 1
Return code for RunningService is 1
Согласно JavaDocs, waitFor () должен блокироваться до завершения процесса и давать мне выходное значение процесса.
Я также пытался использовать вызовы командной строки Process / ProcessBuilder:
//'tasklist /nh /fi "SERVICES eq RunningService"' will return a line for
// each running service of the requested type.
Process p1 = new ProcessBuilder("tasklist", "/nh", "/fi" "SERVICES eq RunningService").start();
p1.waitFor();
BufferedReader is = new BufferedReader(new InputStreamReader(p1.getInputStream()));
String line = is.readLine();
System.out.println("Service - " + line);
System.out.println("Running? ", (line==null?"No":"Yes");
дает:
Service -
Running? No
даже когда я получаю строки в выводе в командной строке!