Frage zu ExitCode



  • Ich habe eine Funktion geschrieben mit der ich, aus meinem Program heraus, andere Programme aufrufen kann. Das Ganze ist mehr oder minder nur eine Kombination auf CreateProcess(), WaitForSingleObject() und GetExitCodeProcess() und funktioniert ohne Probleme.

    Jetzt ist mir aber aufgefallen dass bei der Funktion GetExitCodeProcess() der ExitCode vom Typ DWORD ist, was ich als sehr groß empfinde. Ich kenne Programme die als Exitcode nur 0 oder 1 zurückgeben.

    Es würde mich interressieren warum der Exitcode potenziell so groß ist, bzw. ob jemand Programme kennt welche Exitcodes > 0x80000000 zurückgibt. Gibt es vielleicht Programme welche codierte Exitcodes wie beispielsweise HRESULT zurückgeben ? 😕



  • MEIN Programm gibt Werte > 0x80000000 zurück!

    int main()
    {
      return -1;
    }
    


  • 🙂 Das ist mir auch bewusst.

    Bloß ich habe bei einem Freund folgendes gesehen.

    int DoSomething() // Rückgabewert ist Fehlercode
    {
      ...
      if (!CreateProcess(NULL, Cmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) 
        return -1;
      WaitForSingleObject(pi.hProcess, INFINITE);
      Success = GetExitCodeProcess(pi.hProcess, &ExitCode);
      ...
      return ExitCode;
      ...
    }
    

    Er ist davon ausgegangen dass Exit Codes generell positiv und kleiner als 0x80000000 sind und er deswegen die Exit Codes um seine eigenen Codes erweitern kann. Ich möchte ihn aber nun überreden dass das Ganze in gewissen Fällen schief geht und da wäre ein Kommandozeilen-Programm wie perl, python oder subst mit negativen Exit Code schön.



  • cmd /c "exit -1"
    


  • Danke für die Idee. 👍

    Ich glaube ich kann folgendermaßen argumentieren. Wenn ich ein Python-Skript aufrufe, wäre es durchaus denkbar dass das Skript selbst negative Rückgabewerte ausgibt, um nicht mit den Error Codes von Python (und zukünftigen Versionen) selbst zu kollidieren. Wenn ich also DoSomething() aufrufe, kann es dadurch zu einer Kollision der Exit Codes kommen. :p


Anmelden zum Antworten