从java代码执行cmd时出现问题

时间:2015-01-08 06:36:21

标签: java service cmd

我有一个要求,我希望通过以下方式查看远程服务器上所有正在运行的服务的状态 执行一些java程序。

为此,我尝试使用cmd的服务控制器功能。

当我从命令提示符执行以下命令时,它可以正常工作 -

sc \ RemoteServerName queryex type = service state = all

但是当我尝试从java程序执行相同的命令时,它不起作用。以下是 java代码

    ProcessBuilder builder = new ProcessBuilder(
            "cmd.exe", "/c", "sc \\RemoteServerName queryex type= service state= all");
    builder.redirectErrorStream(true);
    Process p = builder.start();
    BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line;
    while (true) {
        line = r.readLine();
        if (line == null) { break; }
        System.out.println(line);
    }

它返回类似这样的东西 - 错误:无法识别的命令

描述:         SC是用于与之通信的命令行程序         服务控制管理器和服务。

在远程服务器上运行命令是否需要传递任何特殊参数? 对这个家伙有什么想法吗? 感谢

1 个答案:

答案 0 :(得分:0)

您在服务器名称上缺少第二个\

粘贴时运行命令会显示您在命令窗口中看到的相同错误。

来自sc帮助:

  

描述:          SC是用于与之通信的命令行程序          服务控制管理器和服务。

     

USAGE:          sc [命令] [服务名称] ...

   The option <server> has the form "\\ServerName"
   Further help on commands can be obtained by typing: "sc [command]"

您的命令显示缺少斜杠sc \RemoteServerName queryex type= service state= all

将其更改为:

ProcessBuilder builder = new ProcessBuilder(
        "cmd.exe", "/c", "sc \\\\RemoteServerName queryex type= service state= all");

它应该可以正常工作。

我的输出(由于显而易见的原因而无法返回正确的结果)显示sc命令正常工作。

[SC] OpenSCManager FAILED 1722:

The RPC server is unavailable.