procrun - running java applications as a windows service
iniciar el servicio de Windows desde Java (5)
¿Cómo podemos iniciar / detener un servicio de Windows desde Java? Por ejemplo, me gustaría iniciar y detener el servicio de Windows mysql desde Java.
Si es posible iniciar / detener, ¿es posible saber si el servicio se inició con éxito o no?
¿Probaste JNA ? Tiene un buen api para hacer esto.
JNA es muy activa en SO, podría volver here con preguntas específicas.
Puede ejecutar comandos del sistema desde java usando el comando exec (). Aquí puede encontrar un tutorial simple sobre el mismo: http://www.java-samples.com/showtutorial.php?tutorialid=8
Ahora puede usar los comandos del sistema para iniciar / detener servicios de Windows: aquí puede encontrar una muestra de los mismos
No estoy muy seguro de monitorear el estado, por lo que no puedo ser de mucha ayuda al respecto
Puede ejecutar los siguientes comandos a través del método Runtime # exec.
net start y net stop (la información completa está disponible en: http://technet.microsoft.com/en-us/library/cc736564%28WS.10%29.aspx )
Probablemente tendrá que usar cmd / c net start ya que ejecutaría el comando bajo shell.
Puede formular un script de solicitud de comando para iniciar, detener y verificar el estado de un servicio utilizando una matriz de cadenas:
// start service
String[] script = {"cmd.exe", "/c", "sc", "start", SERVICE_NAME};
// stop service
String[] script = {"cmd.exe", "/c", "sc", "stop", SERVICE_NAME};
// check whether service is running or not
String[] script = {"cmd.exe", "/c", "sc", "query", APP_SERVICE_NAME, "|", "find", "/C", "/"RUNNING/""};
Ejecute scripts utilizando lo siguiente:
Process process = Runtime.getRuntime().exec(script);
import java.io.*;
import java.util.*;
public class ServiceStartStop {
public static void main(String args[]) {
String[] command = {"cmd.exe", "/c", "net", "start", "Mobility Client"};
try {
Process process = new ProcessBuilder(command).start();
InputStream inputStream = process.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String line;
while ((line = bufferedReader.readLine()) != null) {
System.out.println(line);
}
} catch(Exception ex) {
System.out.println("Exception : "+ex);
}
}
}
Funcionó bien ... en lugar del comando "sc" use "net".