2012-01-31 50 views
19

¿Cómo podemos iniciar/detener un servicio de Windows desde Java? Por ejemplo, me gustaría iniciar y detener el servicio de Windows mysql de Java.iniciar el servicio de Windows desde java

Si es posible iniciar/detener, ¿es posible saber si el servicio se inició correctamente o no?

+1

En Windows, puede usar el comando sc.exe del intérprete de comandos de DOS para iniciar/detener/consultar un nombre de servicio; por ejemplo: 'sc \\ 10.8.0.1 query spserv' para consultar el estado actual del servicio llamado" spserv "en la PC con la dirección IP 10.8.0.1. Puedes hacer esto de forma local o remota. –

+0

También puede usar "net start/stop " para iniciar el servicio. – Manish

+0

para obtener más información sobre el controlador de servicio (sc.exe), consulte [controlador de servicio] (http://ss64.com/nt/sc.html). Y compruebe la siguiente respuesta mejorada. – pavan

Respuesta

22
String[] script = {"cmd.exe", "/c", "sc", "query", APP_SERVICE_NAME, "|", "find", "/C", "\"RUNNING\""};//to check whether service is running or not 

String[] script = {"cmd.exe", "/c", "sc", "start", SERVICE_NAME};//to start service 

String[] script = {"cmd.exe", "/c", "sc", "stop", SERVICE_NAME};//to stop service 

ejecutar secuencias de comandos utilizando Runtime.exec (String [] args)

+1

Si trato de iniciar/detener el servicio sin derechos de administrador, da acceso denegado. ¿Alguna idea de cómo ejecutar esto con acceso de administrador en JAVA? –

+0

Una forma que conozco es la administración de los derechos del usuario con el que intenta modificar los servicios. No soy usuario de Windows, así que no puedo explicar en detalle. – pavan

2

puede ejecutar comandos del sistema de Java usando el comando exec() - Una explicación sencilla de la misma se puede encontrar aquí - http://www.java-samples.com/showtutorial.php?tutorialid=8

Ahora puede utilizar los comandos del sistema para iniciar los servicios de Windows/stop - Una muestra de la misma se puede encontrar aquí

http://www.windowsitpro.com/article/registry2/how-can-i-stop-and-start-services-from-the-command-line-

no estoy muy seguro acerca de la supervisión del estado, así que no puedo ser de mucha ayuda en esa dirección las

+0

'sc.exe' es más elaborado ese 'net.exe' y puede ayudarte a obtener más detalles sobre un servicio de Windows. Ver 'sc /?' Para ver lo que puede hacer. Sin embargo, las utilidades predeterminadas de Windows aún necesitan privilegios de administrador. – ecle

+0

¿Cómo manejas la necesidad de elevación? –

0

¿Usted intentó JNA? Tiene algunas buenas aplicaciones para hacer esto.

JNA es muy activo en SO - puede volver here con preguntas específicas.

3
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 de "sc" utilizar el comando "net".

+0

tenga en cuenta que desde Java 1.7 puede simplemente llamar a 'inheritIO' https://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html#inheritIO() para redirigir a stdout el resultado de ejecución un proceso. –

Cuestiones relacionadas