Como faço para especificar o código de saída de um aplicativo de console no .NET?

StackOverflow https://stackoverflow.com/questions/155610

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu tenho um aplicativo de console trivial em .NET. É apenas uma parte do teste de uma aplicação maior. Eu gostaria de especificar o "código de saída" do meu aplicativo de console. Como posso fazer isso?

Foi útil?

Solução

3 opções:

  • Você pode devolvê-lo a partir Main se você declarar seu método Main para int retorno.
  • Você pode chamar Environment.Exit(code) .
  • Você pode definir o código de saída usando propriedades: Environment.ExitCode = -1;. Isso será usado se nada mais define o código de retorno ou usa uma das outras opções acima).

Dependendo da sua aplicação (console, serviço, web app, etc) diferentes métodos podem ser usados.

Outras dicas

Além das respostas que cobrem do int retorno ... um apelo à sanidade. Por favor, por favor, defina seus códigos de saída em um ENUM, com bandeiras se apropriado. Ele torna a depuração e manutenção muito mais fácil (e, como um bônus, você pode facilmente imprimir os códigos de saída na tela ajuda? - você tem um desses, direita).

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

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

Existem três métodos que você pode usar para retornar um código de saída de um aplicativo de console.

  1. Modificar o método Main em seu aplicativo para que ele retorna um int vez de void (uma função que retorna um Integer vez de Sub em VB.Net) e depois retornar o código de saída a partir desse método.
  2. Defina o href="http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx"> Environment.ExitCode propriedade para o código de saída. Note-se que o método 1. tem precedência -. Se o Main método retorna outra coisa senão void (é um Sub em VB.Net), então o valor desta propriedade serão ignorados
  3. Passe o código de saída ao href="http://msdn.microsoft.com/en-us/library/system.environment.exit"> Environment.Exit método . Isto irá terminar o processo imediatamente em oposição aos outros dois métodos.

Um padrão importante que deve ser observado é que 0 representa 'Sucesso'.

Em um tópico relacionado, considere usar uma enumeração para definir os códigos de saída que sua aplicação vai voltar. A FlagsAttribute lhe permitirá retornar uma combinação de códigos.

Além disso, garantir que seu aplicativo é compilado como um 'Console Application'.

Se você estiver indo para usar o método sugerido por David, você também deve ter um olhar para o atributo [Flags].

Isto permite-lhe fazer operações bit sábias sobre enums.

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

Em seguida

(ExitCodes.SignFailed | ExitCodes.UnknownError)

seria 16 + 32.:)

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

Apenas devolver o código adequado da principal.

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

Use ExitCode se o seu principal tem uma assinatura de retorno void, caso contrário, você precisa "set" pelo valor que você voltar.

Environment.ExitCode Propriedade

Se o principal método retorna void, você pode usar essa propriedade para definir o código de saída que será devolvido para o ambiente de chamada. Se Principal não volta vazia, essa propriedade é ignorada. O valor inicial dessa propriedade é zero.

Como uma atualização para Scott Munro de resposta :

  • A C # 6.0 e VB.NET 14,0 (VS 2015), Environment.ExitCode ou Environment.Exit (exitCode) é necessária para retornar um código diferente de zero a partir de um aplicativo de console. Alterar o tipo de retorno de Main não tem efeito.
  • Em F # 4.0 (VS 2015), o valor de retorno do ponto de entrada main é respeitado.

A opção de enumeração é excelente, porém, pode ser melhorado através da multiplicação dos números como em:

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

No caso de vários erros, adicionando os números de erro específico juntos vai dar-lhe um número único que irá representar a combinação de erros detectados.

Por exemplo, um nível de erro de 6 pode consistir apenas de erros 4 e 2, 12 só pode consistir de erros 4 e 8, 14 só pode consistir de 2, 4 e 8, etc

Meus 2 centavos:

Você pode encontrar os códigos de erro do sistema aqui: https://msdn.microsoft. com / en-us / library / janelas / desktop / ms681382 (v = VS.85) .aspx

Você vai encontrar os códigos típicos como 2 para "arquivo não encontrado" ou 5 para "acesso negado".

E quando você tropeçar em um código desconhecido, você pode usar este comando para descobrir o que isso significa:

net helpmsg decimal_code

por exemplo.

net helpmsg 1

volta

Função incorreta

Use este código

Environment.Exit(0);

uso 0 como o int se você não quiser retornar nada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top