2013-06-30 4 views
1

C++로 작성된 실행 파일을 실행하고 실행 파일이 cmd의 일부 행을 인쇄하기 때문에 전경에서 연관된 cmd promt를보고 싶습니다.전경에서 프로세스를 실행중인 ProcessBuilder

다음 코드를 작성했지만 모든 프로세스가 만들어지고 백그라운드에서 실행됩니다.이 코드에서는 프로세스가 아니라 더미 cmd.exe 프로세스가 열립니다.

Process p = new ProcessBuilder("C:\\Windows\\System32\\cmd.exe").start(); 

전경 프로세스 실행을 어떻게 할 수 있습니까?

감사합니다.

답변

3

프로세스가 전경 또는 배경인지 여부는 문제가 아닙니다. Java를 사용하여 프로세스를 시작하면 Java를 사용하여 해당 프로세스의 라이프 사이클을 제어해야합니다. Java API는 프로세스의 다양한 속성에 대한 액세스를 제공합니다. 여기에 관심있는 부분은 프로세스의 결과입니다. 이는 'InputStream'프로세스에 의해 표현됩니다. 반 직관적 인 것처럼 보이지만 Java 프로그램의 관점에서 프로세스의 출력은 프로그램의 입력이기 때문에 의미가 있습니다. 반대로 프로세스에 데이터를 보내야하는 경우 'OutputStream'프로세스에 기록합니다.

프로세스 'InputStream 및 인쇄 액세스 정리해 것을 명령 줄에 : 프로세스가 어떤 입력을 기다리는되지 않도록

Process process = new ProcessBuilder("C:\\Path\\To\\My\\Application.exe").start(); 

BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); 

StringBuilder output = new StringBuilder(); 
String line; 
while ((line = reader.readLine()) != null) { 
    output.append(line); 
} 

System.out.println(line); 

이 코드는 물론, 가정, 즉, 그것을 대화식이 아닙니다.

+0

Application.exe 뒤에 '&'를 추가하여 백그라운드에서이 명령을 실행하면; 명령 실행 결과를 얻을 수 있습니까? –

0

Vivin Paliath의 대답은 정말로 가고 있습니다. 그러면 원하는대로 출력하고, 대화 상자에 표시하고, 기록하고, 해석하고, 오류가 있는지 확인하십시오.

그러나 실제로는 명령 창을 표시하려는 경우에 대비하십시오. cmd.exe를 실행하고 'OutputStream'프로세스를 가져 와서 새로운 행으로 끝나는 명령 (application.exe)을 작성하십시오. 의 라인을 따라

뭔가 :

Process p = new ProcessBuilder("C:\\Windows\\System32\\cmd.exe").start(); 
out = p.getOutputStream(); 
out.write("path\\application.exe\r\n".getBytes()); 
out.flush(); 

은 일반적으로 너무하지만 어쨌든 입력 스트림을 배출해야한다.

관련 문제