当我从命令行运行以下命令时,我可以以远程用户身份运行 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 在 .net 中创建了自己的解压缩器。我的解压器非常简单——通过命令行接受参数,没有任何输出。但它仍然做了完全相同的事情 - 解压缩没有开始并且执行挂起。也许 psexec 正在做一些奇怪的事情???psexec 想要在外部命令控制台中运行解压缩程序这一事实是否会导致 Java 出现任何问题?