jokey2
Erfahrenes Mitglied
Hallo Leute!
ich möchte in einer Funktion einen Prozess starten und dessen Ausgaben in einem Fenster ausgeben. Nach meinem Wissen sollte das eigentlich so funktionieren:
Das Dumme ist: es funktioniert nicht. Der Prozess wird zwar gestartet, aber der ReadFile - Aufruf kommt nicht mehr zurück, auch nicht dann, wenn der Prozess beendet ist. Eigentlich sollte die Funktion zurückkehren, wenn ein Zeichen gelesen ist oder der Prozess beendet ist. Vielleicht kann mir einer sagen, was ich da falsch mache.
Danke und Grüße,
jokey2
ich möchte in einer Funktion einen Prozess starten und dessen Ausgaben in einem Fenster ausgeben. Nach meinem Wissen sollte das eigentlich so funktionieren:
Code:
BOOL CLeftView::ProcessCommandLine(CString cstrCommandLine)
{
BOOL bOK = TRUE;
STARTUPINFO si;
PROCESS_INFORMATION pi;
SECURITY_ATTRIBUTES sa;
HANDLE hReadPipe, hWritePipe;
char * pcCommandLine;
DWORD dwWaitResult = WAIT_TIMEOUT, dwBytesRead, dwExitCode;
char cReadLine[MAX_LINE_LENGTH];
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
//Pipes erzeugen
sa.nLength=sizeof(sa);
sa.bInheritHandle=TRUE;
sa.lpSecurityDescriptor=NULL;
bOK = CreatePipe(&hReadPipe, &hWritePipe, &sa, 0);
if(!bOK)
{
//FEHLER
return FALSE;
}
//Pipes eintragen
si.dwFlags = STARTF_USESTDHANDLES;
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
si.hStdOutput = hWritePipe;
si.hStdError = hWritePipe;
//Prozess starten
pcCommandLine = (char*)(LPCTSTR)cstrCommandLine;
bOK = CreateProcess(NULL,
pcCommandLine,
NULL,
NULL,
TRUE,
CREATE_NEW_CONSOLE,
NULL,
NULL,
&si,
&pi);
if(!bOK)
{
//FEHLER
return FALSE;
}
//Auf Ende warten und Messages lesen
while(dwWaitResult != WAIT_OBJECT_0)
{
ZeroMemory(cReadLine, MAX_LINE_LENGTH);
if(ReadFile(hReadPipe, cReadLine, 1, &dwBytesRead, NULL))
{
m_pBottomView->LogMessage(CString(cReadLine));
}
dwWaitResult = WaitForSingleObject(pi.hProcess, 1);
}
bOK = GetExitCodeProcess(pi.hProcess, &dwExitCode);
//Close handles
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
CloseHandle(hWritePipe);
CloseHandle(hReadPipe);
return bOK;
}
Danke und Grüße,
jokey2