2012-11-16 1 views
0

Java 프로그램을 통해 .exe 파일을 시작하려고합니다.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

어떤 오류가 발생합니까? –

+2

'path'의 값은 무엇입니까? –

+2

"pat"을 따옴표로 묶어야 할 수도 있습니다 "\"c :/Program Files/... \ "" – MadProgrammer

답변

3

경로의 공간이 문제 일 가능성이 큽니다.

전체 명령이 포함 된 단일 문자열을 전달하는 대신 배열로 인수를 전달하는 것이 좋습니다 (또는 공백을 올바르게 인용 할 수도 있지만 매우 쉽지는 않음).

어느

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(); 
+0

프로그램은 소켓을 사용합니다. 서버 측 MySQL 데이터베이스의 파일 경로. 이것은 읽고 ServerSocket을 통해 클라이언트에 전송합니다. '경로'(서버에서받은 파일 경로)와 '팻'(프로그램에서 주어진 파일 경로)을 모두 인쇄하려고했는데 둘 다 같습니다. 그러나 제가 '프로세스 간부 사용할 때' '간부 = Runtime.getRuntime() 간부 ("Rundll32는 SHELL32.DLL, ShellExec_RunDLL"경로 +).' 프로그램 (CppIDE) 열리지 않습니다. – salabh

0

당신은 File.separator를 사용하여 경로를 구성해야합니다. 이 경우 사용중인 경로 구분 기호는 시스템에 따라 다릅니다.

+0

'rundll32'가 이미 * pretty * 시스템에 의존하고 있기 때문에 실제로는 상관 없습니다. 그리고 그 실행 파일을 가진 모든 시스템은 \을 파일 분리 자로 사용합니다. –