我想使用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),结果显示: can't find File myprogram.exe in C:/Program Files/MyProgram/
4)。我尝试了1),而不是“程序文件”,我将其重命名为Program_Files,一切正常
我知道我也可以使用ProcessBuilder来做类似的事情,但我不能让它在我的心中…(也许这是我的弱点)。谁能告诉我为什么2)和3)不起作用?
谢谢。
发布于 2009-07-09 19:05:09
几分钟前我看到了另一个答案,在评论区,我终于找到了解决它的方法。很抱歉,我不知道这个答案是如何删除的……或者是谁通过评论答案给出了答案...
更新:通过进一步的调查,我发现是Matt Kane通过评论给出了正确的答案。请允许我对您的帮助表示深切的感谢。;-)
以下是我如何根据Matt的评论来处理它,并测试了它的工作情况:
String[] cmdArray = new String[]{"C://Program Files//MyProgram//myprogram.exe", arg1, arg2};
Runtime.exec(cmdArray);其中,arg1和arg2是传递给myprogram.exe的两个参数
使用exec()的重载版本:
1)进程执行(String[]命令)
2)进程执行( String[]命令,String[]环境)
3)进程执行( String[]命令、String[]环境、文件目录)
这两个都行。这里我想提到3)中的dir和cmdarray中的绝对路径之间的区别,在我的例子中,绝对路径可以是""C://Program Files//MyProgram//“”。
在3)中的目录中,您可以指定运行.exe的目录,您指定的所有相对目录都将附加在此目录之后。示例:如果您的目录是C:/Hello World,并且在您的文件夹中,您将在/folder1中存储一个文件,最后您会发现该文件位于C:/Hello World/ .exe 1中
但是,目录不适用于可执行文件(在我的例子中,它是myprogram.exe)。例如,如果您的目录位于C:/Program Files/MyProgram/,并且您已经将.exe设置为C:/Program Files/MyProgram。如果不指定可执行文件的绝对路径,则无法成功运行该程序。在我的例子中,你只能通过: cmdarray = "C://Program Files//MyProgram//myprogram.exe“如果你犯了错,错误将如下所示: java.io.exception:无法运行程序"myprogram.exe”(在"C:/Program Files/MyProgram/“目录中):CreateProcess error=2,系统找不到指定的文件。注意,它只显示“无法在**目录中运行”,而不是“无法在*目录中找到文件”。我认为这很可笑,但不管怎样,这就是它的工作方式。
发布于 2009-07-09 16:47:20
试着在空格前加一个反斜杠..."C:/Program\ and\ Files/MyProgram/myprogram.exe“
你必须使用双反斜杠,这样它才能传递给操作系统。
如果不起作用,请尝试"C:/\"Program and Files\"/MyProgram/myprogram.exe“
发布于 2014-02-24 22:03:39
我遇到了同样的问题,并使用c:\PROGRA~1而不是c:\program files解决了它
https://stackoverflow.com/questions/1105085
复制相似问题