2010-04-20 4 views
6

CreateProcess()를 사용하여 Windows에서 GUI 응용 프로그램으로 외부 콘솔 응용 프로그램을 실행하고 있습니다. 오류가 있는지 여부를 알기 위해 어떻게 든 출력을 수집하고 싶습니다. 이제 hStdOutput으로 뭔가를해야한다는 것을 알았지 만, 나는 무엇을 이해하지 못한다. 나는 C++과 경험이없는 프로그래머를 처음 접했고 실제로 핸들을 사용하거나 파이프를 밝게하는 방법을 모릅니다.핸들을 사용하여 CreateProcess()에서 출력 수집

어떤 종류의 변수 (또는 파일)로 출력을 얻으려면 어떻게해야합니까? (나는 심지어 그것은 ;-)

작동 :) 말을 안

void email::run(string path,string cmd){ 


    WCHAR * ppath=new(nothrow) WCHAR[path.length()*2]; 
    memset(ppath,' ',path.length()*2); 
    WCHAR * pcmd= new(nothrow) WCHAR[cmd.length()*2]; 
    memset(pcmd,' ',cmd.length()*2); 

    string tempstr; 


    ToWCHAR(path,ppath); //creates WCHAR from my std::string 
    ToWCHAR(cmd,pcmd); 

    STARTUPINFO info={sizeof(info)}; 
    info.dwFlags = STARTF_USESHOWWINDOW; //hide process 

    PROCESS_INFORMATION processInfo; 

    if (CreateProcess(ppath,pcmd, NULL, NULL, FALSE, 0, NULL, NULL, &info, &processInfo)) 
     { 
     ::WaitForSingleObject(processInfo.hProcess, INFINITE); 

     CloseHandle(processInfo.hProcess); 
     CloseHandle(processInfo.hThread); 
     } 

    delete[](ppath); 
    delete[](pcmd); 
} 

이 코드는 아마 어떤 점잖은 프로그래머 비명을 만들지 만 :

내가 순간을 것입니다 질문 : hStdOutput을 사용하여 출력을 파일 (예 :)로 읽으려면 어떻게해야합니까?

+0

관련 : [? 열려진 표준 입력 표준 출력과 EXE/프로세스를 시작하고 (http://stackoverflow.com/questions/5485923/launch-an-exe-process-with-stdin -stdout-and-stderr/39648986). 또한 [tiny-process-library] (https://github.com/eidheim/tiny-process-library)를 보면 매우 편리합니다. – Delgan

답변

-2

BOOL WINAPI GetExitCodeProcess ( LPDWORD lpExitCode __out hProcess, 을 처리 __in을);

전달 processInfo.hProcess 프로세스의 종료 코드를 가져옵니다.

+0

그는 퇴장 코드가 아니라 출력을 받고 싶어합니다. – fleed

3

Microsoft는 해당 기술 자료에서 자식 콘솔 프로세스의 출력을 캡처하는 방법을 보여주는 예제를 제공합니다. 기본 원칙은 부모 프로세스가 파이프 (표준 핸들 당 하나씩 리디렉션)를 만들고 핸들을 CreateProcess에 전달한다는 것입니다.

자식 프로세스를 작동시키기 위해 자식 프로세스를 수정할 필요가 없습니다. 자식 프로세스를 제어 할 수없는 경우 중요합니다.

더 많은 정보 : How to spawn console processes with redirected standard handles

관련 문제