2011-11-04 146 views
2

我试图运行此行代码:的Java调用Runtime.getRuntime()上的Windows错误EXEC

Process p = Runtime.getRuntime().exec(new String[] {"nmap -sP 192.168.1.0/24", g}); 

上面给出了这样的错误:

Exception in thread "main" java.io.IOException: Cannot run program "nmap -sP 192.168.1.0/24": CreateProcess error=2, The system cannot find the file specified 
    at java.lang.ProcessBuilder.start(Unknown Source) 
    at java.lang.Runtime.exec(Unknown Source) 
    at java.lang.Runtime.exec(Unknown Source) 
    at Test.main(Test.java:14) 

然而,这行代码正常工作:

Process p = Runtime.getRuntime().exec(new String[] {"nmap", g}); 

这里有一些细节:

  • 已安装nmap 5.51从'cmd线'完美工作。
  • Windows Vista
+0

可能重复[如何执行命令与参数?](http://stackoverflow.com/questions/7134486/how-to-execute-command-with-parameters) – Raedwald

回答

3

您应该使用此代码:

Process p = Runtime.getRuntime().exec(new String[] {"nmap", "-sP", "192.168.1.0/24", g}); 

这相当于:

"nmap -sP 192.168.1.0/24".split(" "); 

数组中的第一项是总的文件,任何事情经过是这样的参数。 它在做什么是寻找“nmap -sP 192.168.1.0/24”作为一个程序,没有参数。

+0

这工作。谢谢你的解释。 –

1
ProcessBuilder pb = new ProcessBuilder("nmap", "-sP", "192.168.1.0/24"); 
Process p = pb.start(); 

基本上你必须将程序从它的参数中分离出来。

相关问题