我正在使用psexec
和sc 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
答案 0 :(得分:1)
将psexec与Java一起使用似乎存在问题。我切换到paexec,一切正常。
答案 1 :(得分:0)
您是否尝试过使用 waitFor ?也许程序正在退出而不等待进程终止。尝试使用:
pr = rt.exec("test.bat");
pr.waitFor();