2009-07-09 32 views
4

我想使用Runtime.exec()在具有空格的目錄中啓動另一個進程。 (這聽起來很蠢,但我真的很想滿足我的好奇心)帶有絕對目錄的Runtime.exec()

問題的詳細信息(簡體版) 我有一個myprogram.exe位於C:/ Program Files/MyProgram。

我觀察到: 1)。當我調用Runtime.exec(「C:// Program Files // MyProgram // myprogram.exe」)時,IOException指示:找不到文件C:/ Program,錯誤代碼= 2。我認爲它必須是一個結果的空間

2)。我試過了:Runtime.exec(「/」C:// Program Files // MyProgram // myprogram.exe /「」),IOException表示:找不到文件:「C:/ Program Files/MyProgram/myprogram。 exe「

3)。我學到了我的課程並嘗試了Runtime.exec()的重載版本:File dir = new File(「C:// Program Files // MyProgram //」); 並運行:Runtime.exec(「myprogram.exe」,null,dir),它說:找不到文件myprogram.exe在C:/ Program Files/MyProgram/

4)。我試過1),而不是「程序文件」,我將其重命名爲Program_Files,一切正常

我知道我也可以使用ProcessBuilder來做類似的事情,但我不能讓它進入我的心中... (也許這是我的弱點)。誰能告訴我爲什麼2)和3)不起作用?

謝謝。

+0

你確定你的文件夾名稱是不是 「C:\ Program_and_Files」? – 2009-07-09 16:46:47

+0

`C:/ Program *和* Files /`?在大多數系統中,它被稱爲`C:/ Program Files` - 你的文章準確嗎? – 2009-07-09 16:48:07

+0

抱歉,這是一個錯字。我已經將它們更改爲程序文件... – Lily 2009-07-09 16:52:05

回答

5

我看到有另一種答案几分鐘前,在評論區,我終於找到解決的辦法。我很抱歉,我不知道這個問題的答案是如何刪除...誰或通過註釋的答案給出了答案......

UPDATE:通過一些進一步的調查,我發現它的馬特·凱恩這給了通過評論得到正確答案。請允許我對您的善意幫助表示深深的謝意。 ;-)

這是我如何解決它根據馬特的評論和測試工作:

String[] cmdArray = new String[]{"C://Program Files//MyProgram//myprogram.exe", arg1, arg2}; 
Runtime.exec(cmdArray); 

,其中Arg1和arg2的兩個參數傳遞給myprogram.exe

使用的重載版本EXEC():

1)過程EXEC(字符串[] cmdarray)

2)過程EXEC(字符串[] cmdarray,字符串[] envp)

3)Process exec(String [] cmdarray,String [] envp,File dir)

任何一個都可以工作。在這裏我想提一下3)中的dir和cmdarray中的絕對路徑之間的區別,在我的情況下可能是「C:// Program Files // MyProgram //」。

在3)中的目錄中,您可以指定運行.exe的目錄,您指定的所有相關目錄都將附加在該目錄之後。例如:如果您的目錄是C:/ Hello World,並且在您的.exe文件中,您將要將文件存儲在/ folder1中,最後您會發現該文件位於C:/ Hello World/folder1

但是,dir不爲可執行文件工作(在我的情況下,它是myprogram.exe)。例如,如果您的.exe位於C:/ Program Files/MyProgram /中,並且您已將dir設置爲C:/ Program Files/MyProgram。如果不指定可執行文件的絕對路徑,則無法成功運行該程序。在我的情況下,你只能通過: cmdarray [0] =「C:// Program Files // MyProgram // myprogram.exe」 如果你犯了錯誤,錯誤將會是這樣的: java.io .exception:無法運行程序「myprogram.exe」(在目錄「C:/ Program Files/MyProgram /」中):CreateProcess error = 2,系統找不到指定的文件。 請注意,它只能說「不能在**目錄中運行」而不是說「無法在***目錄中找到文件」。我認爲這很荒謬,但無論如何,這就是它的工作方式。

0

嘗試把一個反斜槓空間之前...「C:/程序\和\文件/ MyProgram/myprogram.exe」你有那麼它被傳遞到OS使用雙反斜線

如果還是不行,請嘗試「C:/ \」程序和文件\「/ MyProgram/myprogram.exe」

0

我有同樣的問題,用c解決了這個問題:\ PROGRA〜1而不要使用c:\​​ Program Files文件