Can';t从Java启动.exe
我正试图通过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
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)未打开。