Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t从Java启动.exe_Java_Process_Runtime.exec - Fatal编程技术网

Can';t从Java启动.exe

Can';t从Java启动.exe,java,process,runtime.exec,Java,Process,Runtime.exec,我正试图通过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 jav

我正试图通过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 程序已打开


我不知道是什么问题

很可能是路径中的空间问题

我建议您将参数作为数组传递,而不是传递包含整个命令的单个字符串(或者您可以正确引用空格,但这并不容易)

或者

  • 使用或
  • 切换到使用更简单、更直观的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();

这很可能是你的路径空间的问题

我建议您将参数作为数组传递,而不是传递包含整个命令的单个字符串(或者您可以正确引用空格,但这并不容易)

或者

  • 使用或
  • 切换到使用更简单、更直观的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();

您需要使用构造路径。在这种情况下,您使用的路径分隔符将取决于系统。

您需要使用来构造路径。在这种情况下,您使用的路径分隔符将取决于系统。

您会遇到什么错误?路径的值是多少?您可能需要将“pat”括在引号“\“c:/Program Files/…\”旁边注:为什么要使用
rundll32
?您正在调用的命令是一个
.exe
文件,您应该能够直接执行该文件。另外,请访问从&implementaltherecommendations链接的JavaWorld文章。如果代码能正常工作,我会比失败时更惊讶。您会遇到什么错误?
path
的值是多少?您可能需要将“pat”括在引号中“\”c:/Program Files/…\”侧注:为什么要使用
rundll32
?您正在调用的命令是一个
.exe
文件,您应该能够直接执行该文件。另外,请访问从&implementaltherecommendations链接的JavaWorld文章。如果代码能正常运行,我会比失败时更惊讶。这并不重要,因为
rundll32
已经非常依赖于系统,每个具有该可执行文件的系统都将使用\作为文件分隔符。这并不重要,因为
rundll32
已经非常依赖于系统,每个具有该可执行文件的系统都将使用\作为文件分隔符。该程序使用套接字。服务器端MySQL数据库中的文件路径。它通过ServerSocket读取并发送到客户端。我试着打印“路径”(从服务器收到的文件路径)和“pat”(程序中给出的文件路径),两者都是相同的。但是当我使用
processexec
exec=Runtime.getRuntime().exec(“rundll32.DLL,ShellExec\u RunDLL”+路径)程序(CppIDE)未打开。该程序使用套接字。服务器端MySQL数据库中的文件路径。它通过ServerSocket读取并发送到客户端。我试着打印“路径”(从服务器收到的文件路径)和“pat”(程序中给出的文件路径),两者都是相同的。但是当我使用
processexec
exec=Runtime.getRuntime().exec(“rundll32.DLL,ShellExec\u RunDLL”+路径)程序(CppIDE)未打开。