[CreateProcess] Ermitteln wann Process beendet wurde.



  • Hallo,

    ICh starte eine Process:

    STARTUPINFO si;
          memset(&si, 0, sizeof(si));
          si.cb = sizeof(si);
          si.wShowWindow = SW_SHOWNORMAL;
    
          PROCESS_INFORMATION pi;
    
          CreateProcess( sDIR1.c_str(),
                         NULL,
                         NULL,
                         NULL,
                         TRUE,
                         0,
                         NULL,
                         NULL,
                         &si,
                         &pi);
    

    Ich möchte nun einfach das wenn ich einen Process (z.b C:\\WINDOWS\\Notepad.EXE) öffnet, es nicht weiter geht bevor ich es nicht schließe. Ich muss ja ein Handle auf den Process setzen. Das mache ich ja auch in dem ich BOOL bInheritHandles, auf TRUE setze , oder !? Aber wie kann ich das dann Überprüfen !?

    Würde mich über ein Paar Tipps freuen.

    Gruß

    cube23



  • Ich möchte nun einfach das wenn ich einen Process (z.b C:\\WINDOWS\\Notepad.EXE) öffnet, es nicht weiter geht bevor ich es nicht schließe.

    Ich gehe mal davon aus, dass da ein "nicht" zu viel ist und die warten willst, bis der Prozess beendet ist!?

    BOOL bRet = CreateProcess("c:\\windows\\system32\\notepad.exe",NULL,NULL,NULL,TRUE,0,NULL,NULL,&sinfo,&pinfo);
    
    if (!bRet) {
        std::cout << "Fehler: " << GetLastError();
    }
    
    WaitForSingleObject(pinfo.hProcess,INFINITE);
    


  • masterofx32 schrieb:

    Ich möchte nun einfach das wenn ich einen Process (z.b C:\\WINDOWS\\Notepad.EXE) öffnet, es nicht weiter geht bevor ich es nicht schließe.

    Ich gehe mal davon aus, dass da ein "nicht" zu viel ist und die warten willst, bis der Prozess beendet ist!?

    BOOL bRet = CreateProcess("c:\\windows\\system32\\notepad.exe",NULL,NULL,NULL,TRUE,0,NULL,NULL,&sinfo,&pinfo);
    	
    if (!bRet) {
        std::cout << "Fehler: " << GetLastError();
    }
    
    WaitForSingleObject(pinfo.hProcess,INFINITE);
    

    Hmm irgend wie will das bei mir nicht:

    while(sDIR1 != "ERROR")
       {
    /*
    .
    .
    .
    .
    .
    .*/
    
          bool bRet = CreateProcess( sDIR1.c_str(),
                         NULL,
                         NULL,
                         NULL,
                         TRUE,
                         0,
                         NULL,
                         NULL,
                         &si,
                         &pi);
          if(!bRet)
          {
          i++;
          }
    
       }
    

    Er geht in die while Schleife rein öffnet und dann kommt er zur if abfrage aber da geht er sofort rein und wartet nicht bist der Process beendet wurde.

    jemand ne idee !?



  • Auf das WaitForSingleObject kommt es an 😉


Anmelden zum Antworten