當我運行命令行下面的命令,我可以運行的7-Zip作爲遠程用戶,並提取一個文件到網絡共享:啓動一個啓動另一個命令行應用程序從不響應一個命令行應用程序
C:\PsExec.exe -u username -p password "C:\7z.exe" x -y -o\\network\extractedfiles\ C:\compressed.zip toextract.txt
我正在運行此生成的行,正如我的應用程序正在運行它(請注意我已更改目錄,路徑,用戶名和密碼,以便我可以在網上發佈它)。實際上,該行是從我的應用程序日誌中複製的。
但由於某些原因,當我使用下面的代碼從Java運行此命令時,它會一直等待。 「\ network \ extractedfiles \」路徑中沒有文件出現。
final Process copyFile = Runtime.getRuntime().exec(cmd);
final int exit = copyFile.waitFor();
其中cmd是上面的字符串。有任何想法嗎?
更多信息1:
我也想說的是,當這是由命令行運行我注意到,PSEXEC推出Z-ZIP在一個單獨的命令窗口。難道問題是來自zip的輸出沒有被處理掉?我試圖關閉輸入流,但它似乎沒有解決我面臨的問題。
更多信息2:
我試圖從命令註銷輸出,這裏是我得到了什麼:
INFO 2012-05-03 15:07:55,188 - Command output: PsExec v1.98 - Execute processes remotely
INFO 2012-05-03 15:07:55,188 - Command output: Copyright (C) 2001-2010 Mark Russinovich
INFO 2012-05-03 15:07:55,188 - Command output: Sysinternals - www.sysinternals.com
INFO 2012-05-03 15:07:55,188 - Command output:
然後坐在永遠。當在命令行上運行時,下一行輸出是:
C:\7z.exe exited with error code 0.
所以看起來7-zip是懸掛的。它甚至沒有開始提取文件,雖然 - 當我檢查文件預計將提取到什麼目錄出現。
更多信息3:
我使用ionic.zip.dll創建了自己的unzipper在.NET。我的解壓器非常簡單 - 通過命令行接受的參數,沒有任何輸出。但它仍然做了完全相同的事情 - 解壓縮不會啓動並且執行掛起。也許psexec正在做一些奇怪的事情? psexec是否希望在外部命令控制檯中運行解壓縮程序會導致Java出現任何問題?
您需要讀取進程的輸出流,否則將永遠掛起。這裏有幾個問題解釋如何做到這一點。 –
@EricPetroelje在inputstream,outputstream和errorstream對象中有一個名爲close的函數。足以「關閉」溪流嗎?我試過這個,但沒有解決問題。看到我的問題中的修正案。 – JSideris
@EricPetroelje閱讀應用程序的輸出沒有幫助。請參閱「更多信息2」。 – JSideris