Lil*_*ily 4 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.可执行程序"
3).我吸取了教训并尝试了Runtime.exec()的重载版本:File dir = new File("C:// Program Files // MyProgram //"); 并运行:Runtime.exec("myprogram.exe",null,dir),它说:在C:/ Program Files/MyProgram /找不到文件myprogram.exe
4).我试过1),而不是"程序文件",我将它重命名为Program_Files,一切正常
我知道我也可以使用ProcessBuilder做类似的事情,但我不能放在心里......(也许这是我的弱点).谁能告诉我为什么2)和3)不起作用?
谢谢.
我看到几分钟前还有另一个答案,在评论区域,我终于找到了解决问题的方法.对不起,我不知道这个答案是如何被删除的......或者是谁通过评论答案给出了答案......
更新:通过一些进一步的调查,我发现Matt Kane通过评论给出了正确答案.请允许我对你的帮助表示深深的谢意.;-)
以下是我根据马特的评论解决这个问题,并进行了测试工作:
String[] cmdArray = new String[]{"C://Program Files//MyProgram//myprogram.exe", arg1, arg2};
Runtime.exec(cmdArray);
Run Code Online (Sandbox Code Playgroud)
其中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:// Program Files // MyProgram // myprogram.exe"如果你做错了,错误将如下所示:java.io.exception:无法运行程序"myprogram.exe"(在目录"C:/ Program Files/MyProgram /"中):CreateProcess error = 2,系统找不到指定的文件.请注意,它只说"不能在**目录中运行"而不是说"无法在***目录中找到文件".我认为这很荒谬,但无论如何,这就是它的工作方式.
| 归档时间: |
|
| 查看次数: |
9329 次 |
| 最近记录: |