带有绝对目录的Runtime.exec()

时间:2009-07-09 16:41:35

标签: java executable spaces 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)不起作用?

感谢。

3 个答案:

答案 0 :(得分:5)

我看到几分钟前还有另一个答案,在评论区域,我终于找到了解决问题的方法。对不起,我不知道这个答案是如何被删除的......或者是谁通过评论答案给出了答案......

更新:通过一些进一步的调查,我发现它的 Matt Kane 通过评论给出了正确答案。请允许我对你的帮助表示深深的谢意。 ;-)

根据马特的评论,我是如何处理它的,并且经过测试工作:

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

其中arg1和arg2是传递给myprogram.exe的两个参数

使用exec()的重载版本:

1)处理exec(String [] cmdarray)

2)处理exec(String [] cmdarray,String [] envp)

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

任何一个都可以。在这里我想提一下3)中dir和cmdarray中的绝对路径之间的区别,在我的情况下可能是“”C:// Program Files // MyProgram //“。

在3)中的dir中,您可以指定运行.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://程序文件// MyProgram // myprogram.exe” 如果你弄错了,错误将如下所示: java.io.exception:无法运行程序“myprogram.exe”(在目录“C:/ Program Files / MyProgram /”中):CreateProcess error = 2,系统找不到指定的文件。 请注意,它只说“不能在**目录中运行”而不是说“无法在***目录中找到文件”。我认为这很荒谬,但无论如何,这就是它的工作方式。

答案 1 :(得分:0)

尝试在空格前加一个反斜杠......“C:/ Program \ and \ Files / MyProgram / myprogram.exe”

你必须使用双反斜杠才能将它传递给操作系统。

如果不起作用,请尝试“C:/ \”程序和文件\“/ MyProgram / myprogram.exe”

答案 2 :(得分:0)

我遇到了同样的问题并使用c:\​​ PROGRA~1而不是c:\ program files

解决了它