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:
Mainse dichiari Maindi 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.
0significa successo e un valore diverso da zero significa fallimento. return;indica il successo tramite il codice di uscita 0e 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 = Successprovenga 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.
Mainmetodo nell'applicazione in modo che restituisca un intinvece di void(una funzione che restituisce un Integerinvece di Subin VB.Net) e quindi restituire il codice di uscita da quel metodo.Mainmetodo restituisce qualcosa di diverso da void(è a Subin VB.Net), il valore di questa proprietà verrà ignorato.Uno standard importante da osservare è che 0rappresenta 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.ExitCodenon chiude immediatamente il programma ma il Environment.Exitmetodo chiude immediatamente il programma
Processoggetto, è 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 :
Mainnon ha alcun effetto.mainpunto di ingresso è rispettato.Main()non impostato Process.ExitCodecome 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.