2016-07-20 5 views
2

私は、Windowsサービスを停止して開始するjavaアプリケーションを持っています。私はそれがリモートマシンで行うことができる必要があります。次のようにWindowsサービスを開始するため、私が持っている現在のコードをリモートになります。これを実行するときリモートマシン上のjavaでWindowsサービスを停止および開始する方法

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

は、しかし、私は次のエラーを取得する:

[SC] OpenSCManager FAILED 5: 

Access is denied. 

は、次の点に注意してください

  • ローカルマシンとリモートマシンの両方がWindows 10上で動作しています

  • リモートマシンが、それはファイアウォールを無効

  • RPC(リモートプロシージャコール)のしているリモートマシン上で実行されている

  • ファイルとプリンタの共有がリモートマシン上でオンになっている

私は何をしないのです?どんな助けもありがとう。

+0

あなたは、リモートマシン上のローカル 'Administrators'グループに' sc.exe'を実行するマシンを追加してみてください可能性がある(これを実行することに大きく依存してどのようにあなたが使用しているWindowsのバージョンです。その質問に追加すると、さらなる回答がポップアップするのに役立ちます)。 –

答えて

0

インターネットからPsExec.exeをダウンロードして、次のコードを書くことができます。

パブリッククラス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; 
} 

}

関連する問題