2013-05-14 14 views
1

我正在使用psexecsc query state= all來打印出遠程服務器上的所有服務。我想分析這個輸出,並試圖使用BufferedReader來做到這一點。psexec在與Java一起運行時失速

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 

回答

1

在Java中使用psexec似乎存在問題。我切換到paexec,一切正常。

0

您是否嘗試過使用WAITFOR?也許程序正在退出而不等待進程終止。嘗試使用:

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

是的,我產生了相同的結果。 – bunduru

相關問題