2012-01-31 18 views
19

Come possiamo avviare/interrompere un servizio Windows da Java? Ad esempio, vorrei avviare e interrompere il servizio Windows mysql da Java.avvia il servizio Windows da java

Se è possibile avviare/arrestare, è possibile sapere se il servizio è stato avviato correttamente o no?

+1

In Windows, è possibile utilizzare il comando sc.exe dall'interprete dei comandi DOS per avviare/interrompere/eseguire una query sul nome di un servizio; ad esempio: 'sc \\ 10.8.0.1 query spserv' per interrogare lo stato corrente del servizio denominato" spserv "su PC con indirizzo IP 10.8.0.1. Puoi farlo localmente o in remoto. –

+0

Puoi anche usare "net start/stop " per avviare il servizio. – Manish

+0

per ulteriori informazioni sul controller di servizio (sc.exe) controllare [controller di servizio] (http://ss64.com/nt/sc.html). E controllare la risposta migliorata in basso .. – pavan

risposta

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 

eseguire script che utilizzano Runtime.exec (String [] args)

+1

Se provo ad avviare/interrompere il servizio senza diritti di amministratore, fornisce accesso negato. Qualche idea su come eseguirlo con l'accesso amministrativo in JAVA? –

+0

Un modo che conosco è l'amministratore che fornisce i diritti all'utente con il quale si sta tentando di modificare i servizi. Non sono un utente di Windows, quindi non posso spiegare in dettaglio. – pavan

2

È possibile eseguire il sistema da Java utilizzando il comando exec() - Un semplice tutorial sullo stesso può essere trovato qui - http://www.java-samples.com/showtutorial.php?tutorialid=8

Ora è possibile utilizzare i comandi del sistema per avviare servizi di Windows/arresto - Un campione dello stesso può essere trovato qui

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

io non sono molto sicuro circa il monitoraggio dello stato, quindi non posso essere di molto aiuto in quanto riguarda

+0

'sc.exe' è più elaborato che 'net.exe' e può aiutarti a ottenere maggiori dettagli su un servizio di Windows. Vedi 'sc /?' Per quello che può fare. Tuttavia, entrambe le utilità di default di Windows hanno ancora bisogno di privilegi di amministratore. – ecle

+0

Come si gestisce la necessità di elevazione? –

0

Hai provato JNA? Ha delle buone api per farlo.

JNA è molto attivo in SO - è possibile tornare here con domande specifiche.

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

Ha funzionato bene .... invece di "sc" usa il comando "net".

+0

nota che da java 1.7 puoi semplicemente chiamare 'inheritIO' https://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html#inheritIO() per reindirizzare allo stdout l'output da eseguire un processo. –

Problemi correlati