如何在远程计算机上停止和启动java中的windows服务

如何在远程计算机上停止和启动java中的windows服务,java,windows-services,Java,Windows Services,我有一个停止和启动windows服务的java应用程序。我有一个要求,它应该能够在远程机器上执行此操作。我当前用于远程启动Windows服务的代码如下所示: public void executeCommand() { String[] command = {"cmd.exe", "/c", "sc", "\\\\192.168.1.27", "start", "btwdins"}; try { Process process = new ProcessBuil

我有一个停止和启动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(远程过程调用)正在远程计算机上运行

  • 在远程计算机上打开文件和打印机共享


我错过了什么?任何帮助都将不胜感激

您可以尝试从internet下载PsExec.exe并编写以下代码

公共类远程连接 {


}

您可以尝试将执行
sc.exe
的计算机添加到远程计算机上的本地
Administrators
组中(如何操作在很大程度上取决于您使用的Windows版本,因此将其添加到问题中可能有助于弹出更多答案)。
 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;
}