使用Java运行时,psexec会停止运行

时间:2013-05-14 21:41:47

标签: java psexec

我正在使用psexecsc query state= all打印出远程服务器上的所有服务。我想解析这个的输出,并且一直试图用BufferedReader来做这个。

Runtime rt = Runtime.getRuntime();
String line = null;
Process pr = null;

pr = rt.exec("test.bat");

BufferedReader input = new BufferedReader(new InputStreamReader(pr.getInputStream()));

while((line = input.readLine()) != null) {
    System.out.println(line);
}

test.bat的

 psexec \\server -u username -p password sc query state= all

当我从命令行窗口运行psexec \\server -u username -p password sc query state= all时,我得到了这个;

SERVICE_NAME: Tomcat6 
    TYPE               : 10  WIN32_OWN_PROCESS  
    STATE              : 4  RUNNING 
    WIN32_EXIT_CODE    : 0  (0x0)
    SERVICE_EXIT_CODE  : 0  (0x0)
    CHECKPOINT         : 0x0
    WAIT_HINT          : 0x0

SERVICE_NAME: ActiveMQ 
    TYPE               : 10  WIN32_OWN_PROCESS  
    STATE              : 4  RUNNING 
    WIN32_EXIT_CODE    : 0  (0x0)
    SERVICE_EXIT_CODE  : 0  (0x0)
    CHECKPOINT         : 0x0
    WAIT_HINT          : 0x0

etc.

但在Java中,它会打印第一个服务然后停止,因此打印输出就是这个;

SERVICE_NAME: Tomcat6 
    TYPE               : 10  WIN32_OWN_PROCESS  
    STATE              : 4  RUNNING 
    WIN32_EXIT_CODE    : 0  (0x0)
    SERVICE_EXIT_CODE  : 0  (0x0)
    CHECKPOINT         : 0x0
    WAIT_HINT          : 0x0

2 个答案:

答案 0 :(得分:1)

将psexec与Java一起使用似乎存在问题。我切换到paexec,一切正常。

答案 1 :(得分:0)

您是否尝试过使用 waitFor ?也许程序正在退出而不等待进程终止。尝试使用:

pr = rt.exec("test.bat");
pr.waitFor();