2011-09-28 1 views
0

그래, 여러 가지 방법으로 시도했지만 성공하지 못했습니다. 나는 커스텀 EXE를 실행하고 결과물을 얻고 싶다. 그것은 명령 프롬프트에서 잘 실행됩니다. "dir"이 잘 작동하지만 custom.exe는 작동하지 않습니다. 다음은 코드입니다.ProcessBuilder가 사용자 지정 실행 파일을 실행합니다.

List<String> command = new ArrayList<String>(); 
    command.add("cmd");   // Even removed these two lines 
    command.add("/c");   // aka hail mary coding. 
    //command.add("dir"); 
    command.add("custom.exe"); // even tried "c://custom.exe" 

    String line; 
    Process p = new ProcessBuilder(command).start(); 
    BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    while ((line = input.readLine()) != null) { 
    System.out.println(line); 
    } 

전혀 출력이 없습니다. 배치 파일에 배치하면 결과가 출력됩니다. % PATH %와 (과) 관련이 있다는 느낌이 들었습니다. 다시에서 ...

편집 -> 그래서 내가 코드 무슨 일이 일어나고보고,이 사용자 정의 EXE의 출력은 에러 간다 밝혀 :

List<String> command = new ArrayList<String>(); 
    command.add(System.getenv("ProgramFiles(x86)") + "\\mydir\\custom.exe"; 

    String line; 
    ProcessBuilder pb = new ProcessBuilder(command); 
    pb.redirectErrorStream(true); 
    Process p = pb.start(); 
    BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    while ((line = input.readLine()) != null) { 
    System.out.println(line); 
    } 

을 그리고 그것은 같이 작동 뜨거운 빌어 먹을. :)

+1

cmd/c로 무엇을 달성하려고합니까? – Bringer128

+0

"custom.exe"만 명령에 넣으려고 했습니까? Java가 자동으로 자식 프로세스의 stdin, stdout 및 stderr에 대한 스트림을 열 때 "cmd/c"가 필요하지 않습니다. – Bringer128

+0

dir 명령에 "cmd/c"를 사용했는데 (예제에서 보았 듯이) 작동했습니다. "custom.exe"명령을 사용하거나 사용하지 않으려 고 시도했습니다. 어느 쪽도 효과가 없었다. – rtfminc

답변

2

당신은 라인 만 배치 파일에 필요한 것

command.add("cmd"); 
command.add("/c"); 

필요하지 않습니다. 차라리 실행 파일의 전체 경로를 지정합니다.

아마도 출력이 stderr에 있습니까? p.getInputStream()p.getErrorStream()으로 바꾸어보세요.

+0

고마워요 ... 진행 중 ... 두 줄 추가 : ProcessBuilder pb = 새 ProcessBuilder (명령); pb.redirectErrorStream (true); - 오류 메시지가 나타나는 ... 진행은 입니다! – rtfminc

+0

오류 스트림을 얻는 힌트가 트릭을 만들었습니다. 감사합니다. – rtfminc