Does anyone know how to detect whether a Windows Service is running through Java

Posted by GKelly on Stack Overflow See other posts from Stack Overflow or by GKelly
Published on 2010-04-13T13:34:31Z Indexed on 2010/04/13 13:42 UTC
Read the original article Hit count: 354

Filed under:
|

There's plenty of information on running Java apps as services, but I need to know how to detect whether a windows service is running or not. Does anyone know how???

At the DOS prompt, I can run:

tasklist /svc|findstr "NonRunningService"
echo Return code for N onRunningService is %ERRORLEVEL%
tasklist /svc|findstr "RunningService"
echo Return code for RunningService is %ERRORLEVEL%

I get the following:

Return code for NonRunningService is 1
Return code for RunningService is 0

In code, I have:

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);

I get the following output

Return code for NonRunningService is 1
Return code for RunningService is 1

According to the JavaDocs, the waitFor() should block until the process finishes, and give me the exit value of the process.

I've also tried using the Process/ProcessBuilder command line calls:

//'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");

gives:

Service -
Running? No

even when I get lines in the output at the command line!

© Stack Overflow or respective owner

Related posts about java

Related posts about windows-services