我正在尝试通过Java程序启动.exe文件。我使用了以下代码:
System.out.println("Opening " + path);
Process exec;
exec = Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " + path);//path is the path of the exe file which is passed as an argument from another java class
输出如下:
Opening C:\Program Files (x86)\C-Free 5\CppIDE.exe
但它没有开放。
相反,当我尝试
时String pat="C:\\Program Files (x86)\\C-Free 5\\CppIDE.exe";
Process exec;
exec = Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL " + pat);
程序已打开。
我不知道问题是什么。
答案 0 :(得分:3)
路径中的空间很可能就是问题所在。
我建议您将参数作为数组传递,而不是传递包含整个命令的单个字符串(或者您可以正确引用空格,但这并不是那么容易)。
String[]
version of Runtime.exec()
或 ProcessBuilder
,它具有更简单,更直观的API。使用ProcessBuilder
,这可能如下所示:
ProcessBuilder pb = new ProcessBuilder("rundll32", "SHELL32.DLL,ShellExec_RunDLL", path);
Process p = pb.start();
此外,在这种情况下,我认为根本没有理由调用rundll32
。这也应该有效:
ProcessBuilder pb = new ProcessBuilder(path);
Process p = pb.start();
答案 1 :(得分:0)
您需要使用File.separator构建路径。在这种情况下,您使用的路径分隔符将取决于系统。