У меня есть тривиальное консольное приложение в .NET. Это всего лишь тестовая часть более крупного приложения. Я хотел бы указать «код выхода» моего консольного приложения. Как мне это сделать?
У меня есть тривиальное консольное приложение в .NET. Это всего лишь тестовая часть более крупного приложения. Я хотел бы указать «код выхода» моего консольного приложения. Как мне это сделать?
Ответы:
3 варианта:
Main
если объявите свой Main
метод возврата int
.Environment.Exit(code)
.Environment.ExitCode = -1;
. Это будет использоваться, если ничто другое не устанавливает код возврата или использует одну из других опций выше).В зависимости от вашего приложения (консоли, службы, веб-приложения и т. Д.) Могут использоваться разные методы.
0
означает успех, а ненулевой означает сбой. return;
указывает на успех через код завершения 0
и return -1;
указывает на ошибку.
В дополнение к ответам, охватывающим возвращение int's ... призыв к здравомыслию. Пожалуйста, укажите ваши коды выхода в перечислении, с флагами, если это необходимо. Это значительно упрощает отладку и обслуживание (и в качестве бонуса вы можете легко распечатать коды выхода на экране справки - у вас есть один из них, верно?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
0 = Success
исходит из того факта, что нужен только один код успеха, но многие коды ошибок, такие, что 0, не имеющие + или - в целых числах компьютера, могут быть использованы для уникальной идентификации успеха
Есть три метода, которые вы можете использовать для возврата кода завершения из консольного приложения.
Main
метод в своем приложении так, чтобы он возвращал int
вместо void
(функция, которая возвращает Integer
вместо вместо Sub
в VB.Net), а затем возвращал код выхода из этого метода.Main
метод возвращает что-либо кроме void
(находится Sub
в VB.Net), тогда значение этого свойства будет игнорироваться.Важный стандарт, который следует соблюдать, - это 0
«Успех».
В связанной теме рассмотрите возможность использования перечисления для определения кодов выхода, которые ваше приложение собирается вернуть. FlagsAttribute позволит вернуть комбинацию кодов.
Также убедитесь, что ваше приложение скомпилировано как «Консольное приложение».
Environment.ExitCode
не закрывает программу сразу, но Environment.Exit
метод закрывает программу немедленно
Process
объект, вы можете запросить объект WaitForExit()
, а затем запросить у него код выхода.
Если вы собираетесь использовать метод, предложенный Дэвидом, вам также следует взглянуть на атрибут [Flags].
Это позволяет вам делать побитовые операции над перечислениями.
[Flags]
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
затем
(ExitCodes.SignFailed | ExitCodes.UnknownError)
будет 16 + 32. :)
int code = 2;
Environment.Exit( code );
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx
Просто верните соответствующий код с основного.
int main(string[] args)
{
return 0; //or exit code of your choice
}
static void Main(string[] args);
Используйте ExitCode, если ваш main имеет подпись возврата void, в противном случае вам нужно «установить» его на возвращаемое вами значение.
Если метод Main возвращает void, вы можете использовать это свойство для установки кода выхода, который будет возвращен вызывающей среде. Если Main не возвращает void, это свойство игнорируется. Начальное значение этого свойства равно нулю.
Как обновление ответа Скотта Мунро :
Main
имеет никакого эффекта.main
точки входа соблюдается.Main()
не установило то, Process.ExitCode
что было видно вызывающим приложением.
int Main
что все еще может использоваться в качестве альтернативы Environment.ExitCode. ссылка
Опция перечисления превосходна, но может быть улучшена путем умножения чисел как в:
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
В случае нескольких ошибок, добавление определенных номеров ошибок вместе даст вам уникальный номер, который будет представлять комбинацию обнаруженных ошибок.
Например, уровень ошибки 6 может состоять только из ошибок 4 и 2, 12 может состоять только из ошибок 4 и 8, 14 может состоять только из 2, 4 и 8 и т. Д.
Мои 2 цента:
Вы можете найти коды системных ошибок здесь: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx
Вы найдете типичные коды, такие как 2 для «файл не найден» или 5 для «доступ запрещен».
И когда вы наткнетесь на неизвестный код, вы можете использовать эту команду, чтобы выяснить, что это значит:
net helpmsg decimal_code
например
net helpmsg 1
возвращается
Неправильная функция
Используйте этот код
Environment.Exit(0);
используйте 0 как int, если вы не хотите ничего возвращать.