Ho un'applicazione console banale in .NET. È solo una parte di prova di un'applicazione più grande. Vorrei specificare il "codice di uscita" della mia applicazione console. Come faccio a fare questo?
Ho un'applicazione console banale in .NET. È solo una parte di prova di un'applicazione più grande. Vorrei specificare il "codice di uscita" della mia applicazione console. Come faccio a fare questo?
Risposte:
3 opzioni:
Main
se dichiari Main
di restituire il tuo metodo int
.Environment.Exit(code)
.Environment.ExitCode = -1;
. Questo verrà utilizzato se nient'altro imposta il codice di ritorno o utilizza una delle altre opzioni sopra).A seconda dell'applicazione (console, servizio, app Web, ecc.) È possibile utilizzare diversi metodi.
0
significa successo e un valore diverso da zero significa fallimento. return;
indica il successo tramite il codice di uscita 0
e return -1;
indica il fallimento.
Oltre alle risposte che riguardano il ritorno int ... un appello alla sanità mentale. Per favore, definisci i tuoi codici di uscita in un enum, con le Bandiere se appropriato. Rende il debug e la manutenzione molto più semplici (e, come bonus, puoi facilmente stampare i codici di uscita nella schermata di aiuto - ne hai uno, giusto?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
0 = Success
provenga dal fatto che è necessario un solo codice di successo, ma molti codici di errore, come 0, come non avere + o - in numeri interi di Computer, possono essere utilizzati per identificare in modo univoco il successo
Esistono tre metodi che è possibile utilizzare per restituire un codice di uscita da un'applicazione console.
Main
metodo nell'applicazione in modo che restituisca un int
invece di void
(una funzione che restituisce un Integer
invece di Sub
in VB.Net) e quindi restituire il codice di uscita da quel metodo.Main
metodo restituisce qualcosa di diverso da void
(è a Sub
in VB.Net), il valore di questa proprietà verrà ignorato.Uno standard importante da osservare è che 0
rappresenta il "successo".
Su un argomento correlato, considerare l'utilizzo di un'enumerazione per definire i codici di uscita che l'applicazione restituirà. Il FlagsAttribute vi permetterà di restituire una combinazione di codici.
Inoltre, assicurarsi che l'applicazione sia compilata come "Applicazione console".
Environment.ExitCode
non chiude immediatamente il programma ma il Environment.Exit
metodo chiude immediatamente il programma
Process
oggetto, è possibile chiedere l'oggetto a WaitForExit()
, quindi richiedere il codice di uscita da esso.
Se stai per utilizzare il metodo suggerito da David, dovresti anche dare un'occhiata all'attributo [Flags].
Questo ti permette di fare operazioni un po 'sagge sugli enum.
[Flags]
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Poi
(ExitCodes.SignFailed | ExitCodes.UnknownError)
sarebbe 16 + 32. :)
int code = 2;
Environment.Exit( code );
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx
Restituisci semplicemente il codice appropriato da main.
int main(string[] args)
{
return 0; //or exit code of your choice
}
static void Main(string[] args);
Usa ExitCode se il tuo main ha una firma di ritorno vuota, altrimenti devi "impostarla" in base al valore che restituisci.
Proprietà Environment.ExitCode
Se il metodo Main restituisce null, è possibile utilizzare questa proprietà per impostare il codice di uscita che verrà restituito all'ambiente chiamante. Se Main non restituisce nulla, questa proprietà viene ignorata. Il valore iniziale di questa proprietà è zero.
Come aggiornamento alla risposta di Scott Munro :
Main
non ha alcun effetto.main
punto di ingresso è rispettato.Main()
non impostato Process.ExitCode
come visto dall'applicazione chiamante.
int Main
è ancora possibile utilizzare un'alternativa a Environment.ExitCode. link
L'opzione di enumerazione è eccellente, ma può essere migliorata moltiplicando i numeri come in:
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Nel caso di più errori, sommando i numeri di errore specifici si otterrà un numero univoco che rappresenterà la combinazione di errori rilevati.
Ad esempio, un livello di errore di 6 può consistere solo in errori 4 e 2, 12 può consistere solo in errori 4 e 8, 14 può consistere solo in 2, 4 e 8 ecc.
I miei 2 centesimi:
Puoi trovare i codici di errore di sistema qui: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx
Troverai i codici tipici come 2 per "file non trovato" o 5 per "accesso negato".
E quando ti imbatti in un codice sconosciuto, puoi usare questo comando per scoprire cosa significa:
net helpmsg decimal_code
per esempio
net helpmsg 1
ritorna
Funzione errata
Usa questo codice
Environment.Exit(0);
usa 0 come int se non vuoi restituire nulla.