Exit(1); abfangen ?

MFC openGL

Erfahrenes Mitglied
Hallo,

ich habe mit
Code:
 STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);
    ZeroMemory( &pi, sizeof(pi) );
 char* path = new char[1000000];
 strcpy(path, curpath);
 strcat(path, "programm.exe");
  
    // Start the child process. 
    if( !CreateProcess( NULL,   // No module name (use command line). 
        TEXT(path), // Command line. 
        NULL,             // Process handle not inheritable. 
        NULL,             // Thread handle not inheritable. 
        FALSE,            // Set handle inheritance to FALSE. 
        0,                // No creation flags. 
        NULL,             // Use parent's environment block. 
        NULL,             // Use parent's starting directory. 
        &si,              // Pointer to STARTUPINFO structure.
        &pi )             // Pointer to PROCESS_INFORMATION structure.
    ) 
    {
  CString buffer = path;
        CTestDialernePreStarterDlg::SetDlgItemText(IDC_STATIC, "FEHLER, TestDialer ("+ buffer +") konnte nicht gestartet werden. Programm wird beendet");
  Sleep(4000);
        exit(1);
    }
    // Wait until child process exits.
    WaitForSingleObject( pi.hProcess, INFINITE );
    // Close process and thread handles. 
    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );

die Programm.exe gestartet, muss aber jetzt den Rückgabewert wissen. Also wie erfahre ich, ob die exe ein "exit(1)" abgeworfen hat ?

Danke

MFC OpenGL
 
mit
Code:
BOOL GetExitCodeProcess(HANDLE hProcess, LPDWORD lpExitCode);
kannst Du den Rückgabewert eines Prozesses abfragen
 
Habe das gestern noch ausprobiert, bekomme auch mein Exit abgefangen und habe jetzt in der MSDN gesucht wie ich nun Unterscheiden kann welches Exit (ich will nur das exit(1) abfangen) geworfen wurde. Habe aber nichts gefunden woraus ich schlau wurde.

Code:
if(GetExitCodeProcess(&pi, lpExitCode) == 0)

Aber wie differenziere ich jetzt das lpExitCode auf exit(1) ?

Kannst du mir ein Beispiel geben ?

Danke und Gruß

MFC OpenGL
 
Das lpExitCode ist ein Pointer auf ein DWORD. In dem DWORD wird dann der Rückgabewert (der in Exit übergeben wurde) eingesetzt. lpExitCode zeigt also hoffentlich auf ein gültiges DWORD.

Du kannst übrigens nicht unterscheiden, ob der ExitCode von einem Aufruf an exit oder normal über return von der main/WinMain aus zurückgegeben worden ist.
 
Hi,

mir ist das ja auch vollkommen egal, ob nun return oder exit verwendet wurde...

Ich will nur wissen ob das Programm welches ist gestartet habe mit exit(0) oder mit exit(1) beendet wurde, das ist alles.

Was steht denn dann im DWORD drin, wenns exit(0) war, und was wenns exit(1) war ? Kann ich das nicht abfangen ?

Gruß

MFC OpenGL
 
Habe jetzt mal das DWORD ExitCode angeschaut, da steht IMMER 6 drin, egal ob nun mit Exit 1 oder Exit 0 oder Exit 324324235 beendet wurde.

Jemand ne andere Idee ?
 
Hi.

Kann das sein das du da vergessen hast die Adresse der DWORD Variablen zu übergeben?

Code:
DWORD exit_code;
if (GetExitCodeProcess(pi.hProcess, &exit_code)) {
   cout << "Exit code: " << exit_code << endl;
}

Gruß
 
Zurück