当我运行命令行下面的命令,我可以运行的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