Ich habe eine einfache Konsolenanwendung in .NET. Es ist nur ein Testteil einer größeren Anwendung. Ich möchte den "Exit-Code" meiner Konsolenanwendung angeben. Wie mache ich das?
Ich habe eine einfache Konsolenanwendung in .NET. Es ist nur ein Testteil einer größeren Anwendung. Ich möchte den "Exit-Code" meiner Konsolenanwendung angeben. Wie mache ich das?
Antworten:
3 Optionen:
Main
wenn Sie Ihre Main
Methode für die Rückgabe deklarieren int
.Environment.Exit(code)
.Environment.ExitCode = -1;
. Dies wird verwendet, wenn nichts anderes den Rückkehrcode festlegt oder eine der anderen oben genannten Optionen verwendet.Abhängig von Ihrer Anwendung (Konsole, Dienst, Webanwendung usw.) können verschiedene Methoden verwendet werden.
0
Erfolg, und ein Wert ungleich Null bedeutet Misserfolg. return;
Zeigt Erfolg durch Exit-Code 0
an und return -1;
zeigt Fehler an.
Zusätzlich zu den Antworten auf die Rückgabe ... ein Plädoyer für geistige Gesundheit. Bitte definieren Sie Ihre Exit-Codes in einer Aufzählung, gegebenenfalls mit Flags. Dies erleichtert das Debuggen und die Wartung erheblich (und als Bonus können Sie die Exit-Codes einfach auf Ihrem Hilfebildschirm ausdrucken - Sie haben einen davon, oder?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
0 = Success
kommt von der Tatsache, dass nur ein Erfolgscode benötigt wird, aber viele Fehlercodes, so dass 0, ohne + oder - in Computer-Ganzzahlen, verwendet werden kann, um den Erfolg eindeutig zu identifizieren
Es gibt drei Methoden, mit denen Sie einen Exit-Code aus einer Konsolenanwendung zurückgeben können.
Main
Methode in Ihrer Anwendung so, dass sie ein int
anstelle von void
(eine Funktion, die ein Integer
statt in Sub
in VB.Net zurückgibt) zurückgibt, und geben Sie dann den Exit-Code dieser Methode zurück.Main
Methode etwas anderes als void
( Sub
in VB.Net) zurückgibt, wird der Wert dieser Eigenschaft ignoriert.Ein wichtiger Standard, der beachtet werden sollte, ist 0
der „Erfolg“.
Verwenden Sie zu einem verwandten Thema eine Aufzählung, um die Exit-Codes zu definieren, die Ihre Anwendung zurückgeben wird. Mit dem FlagsAttribute können Sie eine Kombination von Codes zurückgeben.
Stellen Sie außerdem sicher, dass Ihre Anwendung als "Konsolenanwendung" kompiliert ist.
Environment.ExitCode
schließt das Programm nicht sofort, aber die Environment.Exit
Methode schließt das Programm sofort
Process
Objekt gestartet werden soll, können Sie das Objekt dazu WaitForExit()
auffordern und dann den Exit-Code von ihm anfordern.
Wenn Sie die von David vorgeschlagene Methode verwenden möchten, sollten Sie sich auch das Attribut [Flags] ansehen.
Auf diese Weise können Sie bitweise Operationen an Aufzählungen ausführen.
[Flags]
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Dann
(ExitCodes.SignFailed | ExitCodes.UnknownError)
wäre 16 + 32. :)
int code = 2;
Environment.Exit( code );
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx
Geben Sie einfach den entsprechenden Code von main zurück.
int main(string[] args)
{
return 0; //or exit code of your choice
}
static void Main(string[] args);
Verwenden Sie ExitCode, wenn Ihr Main eine ungültige Rückgabesignatur hat, andernfalls müssen Sie diese auf den von Ihnen zurückgegebenen Wert "setzen".
Environment.ExitCode-Eigenschaft
Wenn die Main-Methode void zurückgibt, können Sie mit dieser Eigenschaft den Exit-Code festlegen, der an die aufrufende Umgebung zurückgegeben wird. Wenn Main nicht void zurückgibt, wird diese Eigenschaft ignoriert. Der Anfangswert dieser Eigenschaft ist Null.
Als Update zu Scott Munros Antwort :
Main
hat keine Auswirkung.main
Einstiegspunkts berücksichtigt.Main()
nicht das festgelegt wurde, Process.ExitCode
was von der aufrufenden Anwendung gesehen wurde.
int Main
können weiterhin als Alternative zu Environment.ExitCode verwendet werden. Link
Die Aufzählungsoption ist ausgezeichnet, kann jedoch durch Multiplizieren der Zahlen wie folgt verbessert werden:
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Bei mehreren Fehlern erhalten Sie durch Addition der spezifischen Fehlernummern eine eindeutige Nummer, die die Kombination der erkannten Fehler darstellt.
Beispielsweise kann eine Fehlerstufe von 6 nur aus den Fehlern 4 und 2 bestehen, 12 kann nur aus den Fehlern 4 und 8 bestehen, 14 kann nur aus 2, 4 und 8 bestehen usw.
Meine 2 Cent:
Die Systemfehlercodes finden Sie hier: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx
Sie finden die typischen Codes wie 2 für "Datei nicht gefunden" oder 5 für "Zugriff verweigert".
Und wenn Sie auf einen unbekannten Code stoßen, können Sie mit diesem Befehl herausfinden, was er bedeutet:
net helpmsg decimal_code
z.B
net helpmsg 1
kehrt zurück
Falsche Funktion
Verwenden Sie diesen Code
Environment.Exit(0);
Verwenden Sie 0 als int, wenn Sie nichts zurückgeben möchten.