У меня есть тривиальное консольное приложение в .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, если вы не хотите ничего возвращать.