2013-07-17 69 views
0

我正在尝试使用exec函数。对可执行文件的路径包含空格,这是给我悲痛 我的代码看起来像这样将路径传递给exec

Runtime.getRuntime().exec("\"C:\\Program Files (x86)\\ASL\\_ASL Software Suite_installation.exe\"", null, new File("\"C:\\Program Files (x86)\\ASL\\_ASL Software Suite_installation\"")); 

当这样执行,我得到一个例外 -

Cannot run program ""c:\Program" 

我将不胜感激,如果有人可以给我一些帮助解决这个

在此先感谢

+0

改为使用它:http://docs.oracle.com/javase/1.5.0/docs/api/java/ lang/ProcessBuilder.html – Maroun

+0

您正在尝试使用'Runtime.exec()'函数。请明确点。 – EJP

回答

4

Runtime.exec(String command, String[] envp, File dir)

使用指定的环境和工作目录在单独的进程中执行指定的字符串命令。

这是一种方便的方法。调用形式为exec(command, envp, dir)的行为与调用exec(cmdarray, envp, dir)的行为完全相同,其中cmdarraycommand中所有令牌的阵列。

更精确地,command串被分成使用由呼叫new StringTokenizer(command)与字符类别无需进一步修改创建StringTokenizer令牌。然后将令牌生成器生成的令牌以相同的顺序放入新字符串数组cmdarray中。

这意味着无论外引号如何,第一个字符串都会被分成标记。使用Runtime.exec(String[] cmdarray, String[] envp, File dir)版本可以避免可执行文件的标记。

或者,使用ProcessBuilder

File d = new File("C:/Program Files (x86)/ASL/_ASL Software Suite_installation"); 
ProcessBuilder pb = new ProcessBuilder(d.getAbsolutePath() + "/main.exe"); 
Process p = pb.directory(d) 
       .start(); 

参见:

+0

感谢提示 - 我如何安排这样的事情,让程序不会继续,直到被调用的程序退出? – user1414413

-1

你并不需要再次引用的文件名。 Java会照顾它,因为你只需给出正确的文件名就像这样

Runtime.getRuntime().exec(
    "C:\\Program Files (x86)\\ASL\\_ASL Software Suite_installation.exe", 
    null, 
    new File("C:\\Program Files (x86)\\ASL\\_ASL Software Suite_installation")); 
+0

这也不起作用。我尝试过: 'Runtime.getRuntime().exec(“/ Applications/Utilities/Disk Utility.app/Contents/MacOS/Disk Utility”,null,new File(“/ Applications/Utilities/Disk Utility.app/Contents/”苹果系统/”)); '它不会工作。 – Chris