Eu tenho um aplicativo de console trivial no .NET. É apenas uma parte de teste de um aplicativo maior. Gostaria de especificar o "código de saída" do meu aplicativo de console. Como eu faço isso?
Eu tenho um aplicativo de console trivial no .NET. É apenas uma parte de teste de um aplicativo maior. Gostaria de especificar o "código de saída" do meu aplicativo de console. Como eu faço isso?
Respostas:
3 opções:
Main
se declarar seu Main
método para retornar int
.Environment.Exit(code)
.Environment.ExitCode = -1;
. Isso será usado se nada mais definir o código de retorno ou usar uma das outras opções acima).Dependendo do seu aplicativo (console, serviço, aplicativo da web etc.), diferentes métodos podem ser usados.
0
significa sucesso e diferente de zero significa falha. return;
indica sucesso através do código de saída 0
e return -1;
indica falha.
Além das respostas que cobrem as int retorno ... um pedido de sanidade. Por favor, defina seus códigos de saída em uma enumeração, com Bandeiras, se apropriado. Isso facilita muito a depuração e a manutenção (e, como bônus, você pode imprimir facilmente os códigos de saída na tela de ajuda - você possui um desses, certo?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
0 = Success
vem do fato de haver apenas um código de sucesso necessário, mas muitos códigos de erro, como 0, como não tendo + ou - em números inteiros de computador, podem ser usados para identificar exclusivamente o sucesso
Existem três métodos que você pode usar para retornar um código de saída de um aplicativo de console.
Main
método no seu aplicativo para que ele retorne um em int
vez de void
(uma função que retorna um em Integer
vez de Sub
no VB.Net) e, em seguida, retorne o código de saída desse método.Main
método retornar algo diferente de void
(é um Sub
no VB.Net), o valor dessa propriedade será ignorado.Um padrão importante que deve ser observado é o que 0
representa 'Sucesso'.
Em um tópico relacionado, considere usar uma enumeração para definir os códigos de saída que seu aplicativo retornará. O FlagsAttribute permitirá que você retorne uma combinação de códigos.
Além disso, verifique se seu aplicativo é compilado como um 'Aplicativo de console'.
Environment.ExitCode
não fechar o programa imediatamente, mas Environment.Exit
método fecha o programa imediatamente
Process
objeto, você poderá solicitar o objeto WaitForExit()
e solicitar o código de saída.
Se você vai usar o método sugerido por David, também deve dar uma olhada no atributo [Flags].
Isso permite que você faça operações inteligentes em enumerações.
[Flags]
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Então
(ExitCodes.SignFailed | ExitCodes.UnknownError)
seria 16 + 32. :)
int code = 2;
Environment.Exit( code );
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx
Basta retornar o código apropriado de main.
int main(string[] args)
{
return 0; //or exit code of your choice
}
static void Main(string[] args);
Use ExitCode se o seu principal tiver uma assinatura de retorno nula; caso contrário, você precisará "configurá-la" pelo valor retornado.
Propriedade Environment.ExitCode
Se o método Main retornar nulo, você poderá usar esta propriedade para definir o código de saída que será retornado ao ambiente de chamada. Se Main não retornar nulo, essa propriedade será ignorada. O valor inicial desta propriedade é zero.
Como atualização da resposta de Scott Munro :
Main
não tem efeito.main
ponto de entrada é respeitado.Main()
não definiu o Process.ExitCode
visto pelo aplicativo de chamada.
int Main
ainda pode ser usado como uma alternativa ao Environment.ExitCode. link
A opção de enumeração é excelente, mas pode ser aprimorada multiplicando os 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, a adição de números de erros específicos fornecerá um número único que representará a combinação dos erros detectados.
Por exemplo, um nível de erro 6 pode consistir apenas nos erros 4 e 2, 12 pode consistir apenas nos erros 4 e 8, 14 só pode consistir em 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/windows/desktop/ms681382(v=vs.85).aspx
Você encontrará os códigos típicos como 2 para "arquivo não encontrado" ou 5 para "acesso negado".
E quando você encontra um código desconhecido, pode usar este comando para descobrir o que significa:
net helpmsg decimal_code
por exemplo
net helpmsg 1
retorna
Função incorreta
Use este código
Environment.Exit(0);
use 0 como int se você não quiser retornar nada.