2016-07-20 8 views
2

Ich habe eine Java-Anwendung, die Windows-Dienste stoppt und startet. Ich habe eine Anforderung, dass es auf einer Remote-Maschine möglich sein sollte. Der aktuelle Code Ich habe sieht ein Windows-Dienst zum Starten der Ferne wie folgt:Wie zu stoppen und starten Windows-Dienste in Java auf Remote-Maschine

public void executeCommand() { 

    String[] command = {"cmd.exe", "/c", "sc", "\\\\192.168.1.27", "start", "btwdins"}; 
    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); 
    } 
} 

jedoch, wenn dieser läuft ich die folgende Fehlermeldung erhalten:

[SC] OpenSCManager FAILED 5: 

Access is denied. 

Bitte beachten Sie folgendes:

  • Sowohl der lokale als auch der Remote-Computer laufen unter Windows 10

  • Das entfernte Gerät hat seine Firewall deaktiviert

  • RPC (Remote Procedure Call) auf Remote-Computer

  • Datei- und Druckerfreigabe ausgeführt wird eingeschaltet auf Remote-Rechner

Was bin ich fehlt ? Jede Hilfe wird geschätzt.

+0

Sie könnten versuchen, die Maschine Hinzufügen von 'sc.exe' in lokale' Administrators' Gruppe auf dem entfernten Rechner ausgeführt wird (wie dies schwer zu tun, hängt davon ab, die Version von Windows, die Sie verwenden, daher kann das Hinzufügen der Frage zu weiteren Fragen helfen. –

Antwort

0

Sie können versuchen, PsExec.exe aus dem Internet herunterladen und folgenden Code schreiben.

public class RemoteConnection {

static String psCommandStart = null; 
static String psCommandStop = null; 
public static void main(String[] args) { 
     String currentServerHostname="192.168.0.1"; 
     String currentServerUser="Administrator"; 
     String currentServerPass="admin"; 
     String commandToStart="net start ServiceName"; 
     String commandToStop="net stop ServiceName"; 
     String psCommand = "D://Workspace //PsExec.exe \\\\"+ currentServerHostname + " -u " + currentServerUser + " -p " + currentServerPass; 
     psCommandStart = psCommand + " " + commandToStart; 
     psCommandStop = psCommand + " " + commandToStop; 
     ServiceStart(); 
     ServiceStop();  

} 

private static void ServiceStop() { 
    String[] cmd = new String[5]; 
     cmd[0]="cmd.exe"; 
     cmd[1]="/C"; 
     cmd[2]=psCommandStop; 
     cmd[3]=""; 
     cmd[4]=""; 
     // Run remote command 
     File f = new File(getCurrentWorkingDirectory() + "\\lib"); 
     try 
     { 
     Process run = Runtime.getRuntime().exec(cmd,null,f); 

     } 
     catch (IOException e) 
     { 
     e.printStackTrace(); 
     } 


} 

private static void ServiceStart() { 
    String[] cmd = new String[5]; 
     cmd[0]="cmd.exe"; 
     cmd[1]="/C"; 
     cmd[2]=psCommandStart; 
     cmd[3]=""; 
     cmd[4]=""; 
     // Run remote command 
     File f = new File(getCurrentWorkingDirectory() + "\\lib"); 
     try 
     { 
     Process run = Runtime.getRuntime().exec(cmd,null,f); 
     } 
     catch (IOException e) 
     { 
     e.printStackTrace(); 
     } 


} 

private static String getCurrentWorkingDirectory() { 
    String currentDir = System.getProperty("user.dir"); 
    return currentDir; 
} 

}

Verwandte Themen