2010-04-20 18 views
6

Tôi đang sử dụng CreateProcess() để chạy ứng dụng bảng điều khiển bên ngoài trong Windows từ ứng dụng GUI của tôi. Tôi muốn bằng cách nào đó thu thập đầu ra để biết liệu có lỗi hay không. Bây giờ tôi biết tôi phải làm điều gì đó với hStdOutput, nhưng tôi không hiểu điều gì. Tôi mới vào c + + và một lập trình viên thiếu kinh nghiệm và tôi thực sự không biết phải làm gì với một tay cầm hoặc làm thế nào để thắp sáng một đường ống.Sử dụng tay cầm để thu thập đầu ra từ CreateProcess()

Làm cách nào để nhận kết quả đầu ra cho một số loại biến (hoặc tệp)?

Đây là những gì tôi có một thời điểm:

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); 
} 

Mã này có thể làm cho bất kỳ lập trình viên tiếng hét đàng hoàng, nhưng (tôi thậm chí không nên nói nó :) Nó hoạt động ;-)

Các Câu hỏi: Làm thế nào để sử dụng hStdOutput để đọc đầu ra cho một tập tin (ví dụ)?

+0

liên quan: [? Khởi động một exe/quá trình với stdin stdout và stderr] (http://stackoverflow.com/questions/5485923/launch-an-exe-process-with-stdin -stdout-and-stderr/39648986). Ngoài ra, xem [tiny-process-library] (https://github.com/eidheim/tiny-process-library) rất thuận tiện. – Delgan

Trả lời

-2

BOOL WINAPI GetExitCodeProcess ( __in XỬ LÝ hProcess, __out LPDWORD lpExitCode );

Vượt qua processInfo.hProcess để lấy mã thoát của quy trình.

+0

Anh ta muốn lấy kết quả đầu ra, chứ không phải mã thoát. – fleed

3

Microsoft có một ví dụ trong cơ sở kiến ​​thức thể hiện cách nắm bắt đầu ra của quy trình bảng điều khiển dành cho trẻ em. Nguyên tắc cơ bản là quá trình cha tạo ra các đường ống (một cho mỗi xử lý tiêu chuẩn để chuyển hướng) và chuyển các xử lý đến CreateProcess.

Quy trình con không cần phải sửa đổi để làm việc này, điều quan trọng nếu bạn không có quyền kiểm soát nguồn của đứa trẻ.

Thông tin thêm: How to spawn console processes with redirected standard handles

Các vấn đề liên quan