it-swarm.com.de

Wie gebe ich den Exit-Code einer Konsolenanwendung in .NET an?

Ich habe eine einfache Konsolenanwendung in .NET. Es ist nur ein Testteil einer größeren Anwendung. Ich möchte den "Beendigungscode" meiner Konsolenanwendung angeben. Wie mache ich das?

449
MrDatabase

3 Möglichkeiten:

  • Sie können es von Main zurückgeben, wenn Sie Ihre Main -Methode deklarieren, um int zurückzugeben.
  • Sie können Environment.Exit(code) aufrufen.
  • Sie können den Exit-Code über die Eigenschaften festlegen: 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.

569
TheSoftwareJedi

Zusätzlich zu den Antworten, die sich auf die Rückkehr beziehen, ... ein Plädoyer für Vernunft. Bitte definieren Sie Ihre Exit-Codes in einer Enumeration, gegebenenfalls mit Flags. Das macht das Debuggen und die Wartung so viel einfacher (und als Bonus können Sie die Beendigungscodes ganz einfach auf Ihrem Hilfebildschirm ausdrucken - Sie haben eine davon, oder?).

enum ExitCode : int {
  Success = 0,
  InvalidLogin = 1,
  InvalidFilename = 2,
  UnknownError = 10
}

int Main(string[] args) {
   return (int)ExitCode.Success;
}
257
Mark Brackett

Es gibt drei Methoden, mit denen Sie einen Beendigungscode aus einer Konsolenanwendung zurückgeben können.

  1. Ändern Sie die Methode Main in Ihrer Anwendung so, dass sie anstelle von int eine void zurückgibt (eine Funktion, die anstelle von Integer eine Sub zurückgibt ] in VB.Net) und geben Sie den Exit-Code dieser Methode zurück.
  2. Setzen Sie die Eigenschaft Environment.ExitCode auf den Exit-Code. Beachten Sie, dass Methode 1. Vorrang hat. Wenn die Methode Main etwas anderes als void zurückgibt (in VB.Net ist dies ein Sub), wird der Wert dieser Eigenschaft ignoriert .
  3. Übergeben Sie den Exit-Code an die Environment.Exit -Methode. Dadurch wird der Vorgang im Gegensatz zu den beiden anderen Methoden sofort abgebrochen.

Ein wichtiger Standard, der beachtet werden sollte, ist, dass 0 steht für 'Erfolg'.

Ziehen Sie in einem verwandten Thema die Verwendung einer Enumeration in Betracht, um die Beendigungscodes zu definieren, die Ihre Anwendung zurückgeben wird. Mit FlagsAttribute können Sie eine Kombination von Codes zurückgeben.

Stellen Sie außerdem sicher, dass Ihre Anwendung als "Konsolenanwendung" kompiliert wurde.

46
Scott Munro

Wenn Sie die von David vorgeschlagene Methode verwenden möchten, sollten Sie sich auch das Attribut [Flags] ansehen.

Auf diese Weise können Sie mit Aufzählungen bitweise Operationen durchfü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. :)

43
Aron Tsang
25
albertein
int code = 2;
Environment.Exit( code );
24
palehorse

Geben Sie einfach den entsprechenden Code von main zurück.

int main(string[] args)
{
      return 0; //or exit code of your choice
}
11
Esteban Araya

Verwenden Sie ExitCode, wenn Ihr Main über eine ungültige Rückgabesignatur verfügt, andernfalls müssen Sie sie anhand des von Ihnen zurückgegebenen Werts "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.

11
crashmstr

Als Update zu Scott Munros Antwort :

  • In C # 6.0 und VB.NET 14.0 (VS 2015) ist entweder Environment.ExitCode oder Environment.Exit (exitCode) erforderlich, um einen Code ungleich Null von einer Konsole zurückzugeben Anwendung. Das Ändern des Rückgabetyps von Main hat keine Auswirkungen.
  • In F # 4.0 (VS 2015) wird der Rückgabewert des Einstiegspunkts main berücksichtigt.
8
Vern DeHaven

Die Aufzählungsoption ist ausgezeichnet, kann jedoch verbessert werden, indem die Zahlen wie folgt multipliziert werden:

enum ExitCodes : int
{
  Success = 0,
  SignToolNotInPath = 1,
  AssemblyDirectoryBad = 2,
  PFXFilePathBad = 4,
  PasswordMissing = 8,
  SignFailed = 16,
  UnknownError = 32
}

Wenn Sie bei mehreren Fehlern die einzelnen Fehlernummern addieren, erhalten Sie eine eindeutige Nummer, die die Kombination der erkannten Fehler darstellt.

Beispielsweise kann eine Fehlerebene von 6 nur aus Fehlern 4 und 2 bestehen. 12 kann nur aus Fehlern 4 und 8 bestehen. 14 kann nur aus 2, 4 und 8 usw. bestehen.

7
David

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

3
Fred Mauroy

Verwenden Sie diesen Code

Environment.Exit(0);

verwenden Sie 0 als int, wenn Sie nichts zurückgeben möchten.