0

我正在尝试使用 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" 

如果有人可以帮我解决这个问题,我将不胜感激

提前致谢

4

2 回答 2

4

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

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

这是一种方便的方法。表单调用的exec(command, envp, dir)行为方式与调用完全相同exec(cmdarray, envp, dir),其中cmdarray是 中所有标记的数组command

更准确地说,使用调用创建的a 将command字符串分解为标记,而无需进一步修改字符类别。标记器生成的标记然后以相同的顺序放置在新的字符串数组中。StringTokenizernew StringTokenizer(command)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();

看:

于 2013-07-17T09:30:41.230 回答
-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"));
于 2013-07-17T09:31:09.280 回答