Domanda

Ho una banale applicazione console in .NET. È solo una parte di prova di un'applicazione più grande. Vorrei specificare il " codice di uscita " della mia applicazione console. Come posso farlo?

È stato utile?

Soluzione

3 opzioni:

  • Puoi restituirlo da Main se dichiari il tuo Main per restituire int .
  • Puoi chiamare Environment.Exit (code) .
  • È possibile impostare il codice di uscita utilizzando le proprietà: Environment.ExitCode = -1; . Questo verrà usato 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 metodi diversi.

Altri suggerimenti

Oltre alle risposte che riguardano il ritorno int's ... un appello per 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;
}

Esistono tre metodi che è possibile utilizzare per restituire un codice di uscita da un'applicazione console.

  1. Modifica il metodo Main nella tua applicazione in modo che restituisca un int invece di void (una funzione che restituisce un intero anziché Sub in VB.Net) e quindi restituire il codice di uscita da quel metodo.
  2. Imposta la proprietà Environment.ExitCode sul codice di uscita. Nota che il metodo 1. ha la precedenza - se il metodo Main restituisce qualcosa di diverso da void (è un Sub in VB.Net), allora il valore di questa proprietà verrà ignorata.
  3. Passa il codice di uscita al metodo Environment.Exit . Ciò interromperà immediatamente il processo rispetto agli altri due metodi.

Uno standard importante da osservare è che 0 rappresenta 'Success'.

Su un argomento correlato, considerare l'utilizzo di un'enumerazione per definire i codici di uscita che l'applicazione restituirà. Il FlagsAttribute ti consentirà di restituire una combinazione di codici.

Inoltre, assicurarsi che l'applicazione sia compilata come "Applicazione console".

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 );

Restituisce semplicemente il codice appropriato da main.

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

Usa ExitCode se il tuo principale ha una firma di ritorno nulla, altrimenti devi " impostare " dal 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 di rispondere :

  • In C # 6.0 e VB.NET 14.0 (VS 2015), Environment.ExitCode o Environment.Exit (exitCode) è necessario per restituire un codice diverso da zero da un'applicazione console. La modifica del tipo restituito di Main non ha alcun effetto.
  • In F # 4.0 (VS 2015), il valore di ritorno del punto di ingresso main è rispettato.

L'opzione di enumerazione è eccellente, tuttavia 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 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 / it-it / 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

es.

  

net helpmsg 1

ritorna

  

Funzione errata

Usa questo codice

Environment.Exit(0);

usa 0 come int se non vuoi restituire nulla.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top