Kann mir hier jemand helfen, Probleme mit Pipe???
-
hallo, hatte es erst in der MFC abteilung versucht, allerdings ohne Erfolg.
'Ich hatte folgendes in der Suche gefunden:#define BUFFSIZE 4096 char cPipeResult[BUFFSIZE]; memset(cPipeResult,0,BUFFSIZE); DWORD dwBytes =0; PROCESS_INFORMATION PROCCINFO; LPSECURITY_ATTRIBUTES lpPipeAttributes = NULL; HANDLE hReadPipe; HANDLE hWritePipe; SECURITY_ATTRIBUTES SecAttribs; SecAttribs.lpSecurityDescriptor = NULL; SecAttribs.bInheritHandle = TRUE; SecAttribs.nLength = sizeof(SecAttribs); if( ! CreatePipe( &hReadPipe, &hWritePipe, &SecAttribs, 0)) { AfxMessageBox("Konnte Pipe nicht erstellen"); } else // Ok Prozess vorbereiten { STARTUPINFO INFO; INFO.cb=sizeof(STARTUPINFO); INFO.lpReserved=NULL; INFO.lpDesktop= NULL; INFO.lpTitle=NULL; INFO.dwX=0; INFO.dwY=0; INFO.dwXSize=100; INFO.dwYSize=100; INFO.dwXCountChars=0; INFO.dwYCountChars=0; INFO.dwFillAttribute=NULL; INFO.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW|STARTF_USEPOSITION; INFO.wShowWindow= SW_SHOWDEFAULT; INFO.cbReserved2=0; INFO.lpReserved2=NULL; INFO.hStdInput = GetStdHandle(STD_INPUT_HANDLE); INFO.hStdOutput= hWritePipe; INFO.hStdError= GetStdHandle(STD_ERROR_HANDLE); CreateProcess( m_PfadDerExe,NULL, NULL, NULL, TRUE, CREATE_DEFAULT_ERROR_MODE| NORMAL_PRIORITY_CLASS, NULL, NULL, &INFO, &PROCCINFO); WaitForSingleObject(PROCCINFO.hProcess, 5000); ReadFile(hReadPipe, cPipeResult, sizeof(cPipeResult), &dwBytes,NULL); AfxMessageBox(cPipeResult); }das funktioniert ja wunderbar, allerdings gibt er mir in der Messagebox die kompletten Ausgaben der Konsole an, ich hätte allerdings gerne eine Möglichkeit die einzelnen Ausgaben der Konsole abzufangen und in meinem Programm zu beantworten...
kann mir jemand dabei helfen???

-
Einfach nicht auf das Beenden des Prozesses warten - sondern gleich ReadFile. ReadFile blockt solange bis Daten über die Pipe kommen.
-
kannste mir das bitte genauer erklären, wenn ich wait rausstreiche kommt doch nix mehr an, oder
-
ma ne ganz doofe Frage

muss ich denn in die Konsolenanwendung auch was schreiben?
Oder weiss mein Programm selber welche Pipe für die In´s and Out´s sind?
-
Hab es mir nich genau angeschaut, aber evtl. hilft dir das hier weiter?!
-
danke Flenders, das habe ich mir schon ein paar mal angesehen, leider verstehe ich nicht, wie ich es in mein mfc gerüst einbauen soll...
Deswegen hofft ich hier ne Hilfe zu finden
-
Pipe schrieb:
danke Flenders, das habe ich mir schon ein paar mal angesehen, leider verstehe ich nicht, wie ich es in mein mfc gerüst einbauen soll...
Deswegen hofft ich hier ne Hilfe zu findenalso wenn du MFC verwendest ist dieser Teil deines Codes falsch
INFO.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
INFO.hStdOutput= hWritePipe;
INFO.hStdError= GetStdHandle(STD_ERROR_HANDLE);STD_INPUT_HANDLE und STD_ERROR_HANDLE exitieren in deiner MFC Anwendung normalerweise nicht. Auser deine Anwendung wird selber von einer erzeugt, die diese Pipes vererbt (z.B. cmd.exe).
Du brauchst dann bei dir, wenn du mit CreatePipe arbeitest, 2 Pipes.Wenn du dein Programm debuggst sollte ReadFile blocken, bis Daten gelesen werden oder des Programm sich beenden, was dann zu einem Fehler führt.