2016-07-20 40 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

你可以尝试加入执行'sc.exe'机器进入本地'Administrators'组在远程机器上(如何做到这一点在很大程度上取决于你正在使用的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; 
} 

}

相关问题