Question

J'ai une application console triviale dans .NET. C'est juste une partie de test d'une application plus grande. J'aimerais spécifier le " code de sortie " de mon application console. Comment je fais ça?

Était-ce utile?

La solution

3 options:

  • Vous pouvez le renvoyer depuis Main si vous déclarez que votre méthode Main renvoie int .
  • Vous pouvez appeler Environment.Exit (code) .
  • Vous pouvez définir le code de sortie à l'aide des propriétés: Environment.ExitCode = -1; . Ceci sera utilisé si rien d'autre ne définit le code de retour ou n'utilise l'une des autres options ci-dessus).

En fonction de votre application (console, service, application Web, etc.), différentes méthodes peuvent être utilisées.

Autres conseils

En plus des réponses concernant le retour des internautes ... un plaidoyer pour la santé mentale. Veuillez définir vos codes de sortie dans un enum, avec des drapeaux si nécessaire. Cela facilite beaucoup le débogage et la maintenance (et, en prime, vous pouvez facilement imprimer les codes de sortie sur votre écran d’aide - vous en avez un, non?).

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

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

Il existe trois méthodes que vous pouvez utiliser pour renvoyer un code de sortie d'une application console.

  1. Modifiez la méthode Main dans votre application afin qu'elle renvoie un int au lieu de void (une fonction renvoyant un entier au lieu de Sub dans VB.Net), puis renvoyez le code de sortie de cette méthode.
  2. Définissez la propriété Environment.ExitCode sur le code de sortie. Notez que la méthode 1. est prioritaire - si la méthode Main renvoie autre chose que void (correspond à un Sub dans VB.Net), la valeur de cette propriété sera ignoré.
  3. Transmettez le code de sortie à la méthode Environment.Exit . Cela mettra immédiatement fin au processus, contrairement aux deux autres méthodes.

Une norme importante à respecter est que 0 représente un "succès".

Sur un sujet connexe, envisagez d'utiliser une énumération pour définir les codes de sortie que votre application va renvoyer. Les FlagsAttribute vous permettront de renvoyer une combinaison de codes.

Assurez-vous également que votre application est compilée en tant qu '"application console".

Si vous allez utiliser la méthode suggérée par David, vous devriez également jeter un coup d'oeil à l'attribut [Flags].

Ceci vous permet de faire des opérations peu sages sur des énumérations.

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

Alors

(ExitCodes.SignFailed | ExitCodes.UnknownError)

serait 16 + 32.:)

int code = 2;
Environment.Exit( code );

Il suffit de renvoyer le code approprié à partir du répertoire principal.

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

Utilisez ExitCode si votre principal a une signature avec retour nul, sinon vous devez "définir". par la valeur que vous retournez.

propriété Environment.ExitCode

  

Si la méthode Main retourne void, vous pouvez utiliser cette propriété pour définir le code de sortie qui sera renvoyé à l'environnement appelant. Si Main ne renvoie pas vide, cette propriété est ignorée. La valeur initiale de cette propriété est zéro.

Comme mise à jour de Scott Munro réponse :

  • Dans C # 6.0 et VB.NET 14.0 (VS 2015), Environment.ExitCode ou Environment.Exit (exitCode) est requis pour renvoyer un code différent de zéro à partir d'une application console. La modification du type de retour de Main n'a aucun effet.
  • En F # 4.0 (VS 2015), la valeur de retour du point d'entrée principal est respectée.

L'option de dénombrement est excellente, mais peut être améliorée en multipliant les nombres comme dans:

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

Dans le cas d’erreurs multiples, l’addition des numéros d’erreurs spécifiques vous donnera un numéro unique représentant la combinaison des erreurs détectées.

Par exemple, un niveau d'erreur de 6 ne peut contenir que des erreurs 4 et 2, 12 ne peut contenir que des erreurs 4 et 8, 14 ne peut contenir que 2, 4 et 8, etc.

Mes 2 centimes:

Vous pouvez trouver les codes d'erreur du système ici: https://msdn.microsoft. com / fr-fr / bibliothèque / windows / desktop / ms681382 (v = vs.85) .aspx

Vous trouverez les codes typiques, tels que 2 pour "Fichier non trouvé". ou 5 pour "accès refusé".

Et lorsque vous tombez sur un code inconnu, vous pouvez utiliser cette commande pour savoir ce que cela signifie:

net helpmsg decimal_code

par exemple.

  

net helpmsg 1

retourne

  

Fonction incorrecte

Utilisez ce code

Environment.Exit(0);

utilisez 0 comme int si vous ne voulez rien retourner.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top