2011-11-04 55 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(); 

基本上你必須將程序從它的參數中分離出來。

相關問題