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


Anmelden zum Antworten