Problem mit DOS-Pipe



  • Hallo zusammen, nachdem man mir hier schon mal gut geholfen hat, muss ich nochmals um hielfe bitten.
    Ich habe hier was gefunden, dieser source funktioniert ohne probleme auf 98,me,2000 unter XP funktioniert dieser Abschnitt nicht.
    Das Programm hängt sich ohne Fehlermeldung auf.

    AnsiString GetDOSPipe(AnsiString strDOSCommand) 
    { 
    
        PROCESS_INFORMATION pi; 
        STARTUPINFO si; 
        SECURITY_ATTRIBUTES sa; 
        HANDLE hReadPipe, hWritePipe; 
        char Buffer[4000]; 
        DWORD dwRead; 
    
        sa.nLength = sizeof (SECURITY_ATTRIBUTES); 
        sa.lpSecurityDescriptor = NULL; 
        sa.bInheritHandle = true; 
    
        CreatePipe(&hReadPipe, &hWritePipe, &sa, 2500000); 
    
        memset(&si, 0, sizeof(STARTUPINFO)); 
        si.cb = sizeof (STARTUPINFO); 
        si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; 
        si.wShowWindow = SW_HIDE; 
        si.hStdOutput = hWritePipe; 
    
        CreateProcess(NULL, strDOSCommand.c_str(), NULL, NULL, true, NULL, NULL, "C:\\", &si, &pi); 
    
        CloseHandle(pi.hThread); 
        WaitForSingleObject(pi.hProcess, 30000); 
    
        memset(Buffer, 0, 4000); 
        ReadFile(hReadPipe,&Buffer,sizeof(Buffer), &dwRead, NULL); 
        int i=0; 
        AnsiString strOut=""; 
        while (Buffer[i]) { 
            strOut=strOut+Buffer[i++]; 
        } 
        return strOut; 
    }
    

    Kann mir jemand helfen?



  • Wäre kewl, wenn dies einer wüste, es interessiert mich auch.
    Bzw. Kann mir einer Sagen wie ich die Ausagebe eines Compilers in ein Momo-Feld umleite ?



  • Dafür benutzt man genau so ein PIPE-Konstrukt.

    Zum Problem:
    a) stelle fest, an welcher Stelle genau sich das Programm aufhängt (ich tippe auf ReadFile)
    b) vielleicht solltest du mal kontrollieren, ob dein CreateProcess überhaupt erfolgreich war, und warum ggf. nicht


Anmelden zum Antworten