Dos-Pipe Funktion stürzt bei Nicht-Dosbefehl und Dosbefehl "dir" ab
-
Hallo Zusammen,
ich hab in einem anderen Forum den Source für eine Dos-Pipe gefunden, der Quelltext sieht so aus ( bitte nicht erschrecken auch wenn er etwas lang aussieht _)
void ExecuteSE (char* szCommand, char *szDestination, int nSize, int nTimeOut) { STARTUPINFO si; PROCESS_INFORMATION pi; SECURITY_ATTRIBUTES sa; HANDLE hPipeRead,hPipeWrite; DWORD dwBytes; // // Erstellen der Pipe sa.nLength=sizeof(sa); sa.bInheritHandle=TRUE; sa.lpSecurityDescriptor=NULL; CreatePipe(&hPipeRead,&hPipeWrite, &sa, 0); // // Erstellen des Prozesses si.cb=sizeof(STARTUPINFO); si.lpReserved=NULL; si.lpDesktop=NULL; si.lpTitle=NULL; si.dwX=0; si.dwY=0; si.dwXSize=640; si.dwYSize=400; si.dwXCountChars=0; si.dwYCountChars=0; si.dwFillAttribute=FOREGROUND_BLUE; si.dwFlags=STARTF_USESTDHANDLES|STARTF_USESHOWWINDOW; si.wShowWindow=SW_HIDE; si.cbReserved2=0; si.lpReserved2=NULL; si.hStdInput=0; si.hStdOutput=hPipeWrite; si.hStdError=0; CreateProcess(NULL, szCommand, NULL, NULL, TRUE, CREATE_DEFAULT_ERROR_MODE|NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi); CloseHandle (pi.hThread); WaitForSingleObject(pi.hProcess, nTimeOut); memset(szDestination, 0, nSize); ReadFile(hPipeRead,szDestination, nSize,&dwBytes,NULL); return; }Ich hab den Code in eine Funktion gepackt, es funktioniert auch alles einwandfrei, also ich kann im char*szCommand-Argument einen Dosbefehl angeben und bekomme dann die Ausgabe in den String, den ich dem char*szDestination-Argument übergebeben habe. Nur...=) leider bleibt die Funktion hängen wenn es sich nicht um einen Dos-Befehl handelt.Und wenn ich den "dir" Befehl von Dos verwende, so kehrt die Funktion auch nicht mehr zurück. Nur warum ??
Sry aber ich verstehs nicht-vielleicht bin ich auch einfach zu müde *grins* -ich verbringe jetzt schon 4 Stunden (is kein Witz )damit den Source wieder und wieder anzusehen und ich finde einfach den Fehler nicht. _Wäre echt suuuuuuuuuuupernett wenn ihr mir da helfen könntet
Schönen Gruß
Christoph aka. Xzibit