J'ai une application console triviale dans .NET. C'est juste une partie test d'une application plus large. Je voudrais spécifier le "code de sortie" de mon application console. Comment puis-je faire cela?
J'ai une application console triviale dans .NET. C'est juste une partie test d'une application plus large. Je voudrais spécifier le "code de sortie" de mon application console. Comment puis-je faire cela?
Réponses:
3 options:
Main
si vous déclarez votre Main
méthode à renvoyer int
.Environment.Exit(code)
.Environment.ExitCode = -1;
. Cela sera utilisé si rien d'autre ne définit le code retour ou n'utilise l'une des autres options ci-dessus).Selon votre application (console, service, application web, etc.), différentes méthodes peuvent être utilisées.
0
signifie succès et non nul signifie échec. return;
indique la réussite via le code de sortie 0
et return -1;
indique l'échec.
En plus des réponses couvrant les retours int ... un plaidoyer pour la raison. Veuillez définir vos codes de sortie dans une énumération, avec des drapeaux, le cas échéant. Cela facilite 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;
}
0 = Success
vient du fait qu'il n'y a qu'un seul code de réussite nécessaire, mais de nombreux codes d'erreur, tels que 0, comme n'ayant pas de + ou - dans les entiers informatiques, peuvent être utilisés pour identifier de manière unique le succès
Il existe trois méthodes que vous pouvez utiliser pour renvoyer un code de sortie à partir d'une application console.
Main
méthode dans votre application afin qu'elle renvoie un int
au lieu de void
(une fonction qui renvoie un Integer
au lieu de Sub
dans VB.Net), puis renvoyez le code de sortie de cette méthode.Main
méthode renvoie autre chose que void
(est un Sub
dans VB.Net) alors la valeur de cette propriété sera ignorée.Une norme importante à observer est celle qui 0
représente le «succès».
Sur un sujet connexe, envisagez d'utiliser une énumération pour définir les codes de sortie que votre application va renvoyer. Le FlagsAttribute vous permettra de renvoyer une combinaison de codes.
Assurez-vous également que votre application est compilée en tant qu '«application console».
Environment.ExitCode
ne ferme pas le programme immédiatement mais la Environment.Exit
méthode ferme le programme immédiatement
Process
objet, vous pouvez demander à l'objet de WaitForExit()
, puis lui demander le code de sortie.
Si vous allez utiliser la méthode suggérée par David, vous devriez également jeter un œil à l'attribut [Flags].
Cela vous permet d'effectuer des opérations peu judicieuses sur les é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 );
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx
Renvoyez simplement le code approprié de main.
int main(string[] args)
{
return 0; //or exit code of your choice
}
static void Main(string[] args);
Utilisez ExitCode si votre main a une signature de retour nulle, sinon vous devez la "définir" en fonction de la valeur que vous retournez.
Environment.ExitCode, propriété
Si la méthode Main renvoie void, vous pouvez utiliser cette propriété pour définir le code de sortie qui sera renvoyé à l'environnement appelant. Si Main ne retourne pas void, cette propriété est ignorée. La valeur initiale de cette propriété est zéro.
En guise de mise à jour de la réponse de Scott Munro :
Main
n'a aucun effet.main
point d'entrée est respectée.Main()
n'a pas défini le Process.ExitCode
comme vu par l'application appelante.
int Main
qu'il peut toujours être utilisé comme alternative à Environment.ExitCode. lien
L'option d'énumération 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'ajout des numéros d'erreur spécifiques ensemble vous donnera un numéro unique qui représentera la combinaison des erreurs détectées.
Par exemple, un niveau d'erreur de 6 ne peut se composer que des erreurs 4 et 2, 12 ne peut se composer que des erreurs 4 et 8, 14 ne peut se composer que de 2, 4 et 8, etc.
Mes 2 cents:
Vous pouvez trouver les codes d'erreur système ici: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx
Vous trouverez les codes typiques comme 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 découvrir ce que cela signifie:
net helpmsg decimal_code
par exemple
net helpmsg 1
Retour
Fonction incorrecte
Utilisez ce code
Environment.Exit(0);
utilisez 0 comme int si vous ne voulez rien retourner.