2012-05-03 150 views
0

当我运行命令行下面的命令,我可以运行的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出现任何问题?

+0

您需要读取进程的输出流,否则将永远挂起。这里有几个问题解释如何做到这一点。 –

+0

@EricPetroelje在inputstream,outputstream和errorstream对象中有一个名为close的函数。足以“关闭”溪流吗?我试过这个,但没有解决问题。看到我的问题中的修正案。 – JSideris

+0

@EricPetroelje阅读应用程序的输出没有帮助。请参阅“更多信息2”。 – JSideris

回答

0

大概有一个错误,你应该阅读从工艺流肯定知道

+0

我读了输出,没有错误。它只是挂起。我为我的问题添加了一些额外的信息。 – JSideris

0

正如更新;我尝试创建自己的解压器,psexec,甚至使用C#.net创建自己的解压器,psexec,甚至是我自己的命令行包装器(不希望重制整个应用程序),两个自定义应用程序都没有任何输出,并且我正在运行的命令每次从一个作为外部用户运行的cmd窗口中运行。但是,从Java开始,它只工作过一次,然后解压缩器第二次冻结,再也没有工作过。似乎是防病毒或防火墙问题。不幸的是,它现在不在我的手中,IT部门目前正在帮助我们实现这个目标,我一直在等待他们的回应。

相关问题