Как мне указать код выхода консольного приложения в .NET?

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

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть тривиальное консольное приложение в .NET.Это всего лишь тестовая часть более крупного приложения.Я хотел бы указать "код выхода" моего консольного приложения.Как мне это сделать?

Это было полезно?

Решение

3 варианта:

  • Вы можете вернуть его из Main если вы заявите о своем Main способ возврата int.
  • Ты можешь позвонить Environment.Exit(code).
  • Вы можете задать код выхода, используя свойства: Environment.ExitCode = -1;.Это будет использовано, если ничто другое не задает код возврата или используется один из других вариантов, приведенных выше).

В зависимости от вашего приложения (консоль, сервис, веб-приложение и т.д.) Могут использоваться различные методы.

Другие советы

В дополнение к ответам, охватывающим возвращаемые значения int...мольба о здравомыслии.Пожалуйста, укажите ваши коды выхода в перечислении, с флагами, если это необходимо.Это значительно упрощает отладку и обслуживание (и, в качестве бонуса, вы можете легко распечатать коды выхода на экране справки - у вас ведь есть один из них, верно?).

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

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

Существует три метода, которые вы можете использовать для возврата кода выхода из консольного приложения.

  1. Изменить Main метод в вашем приложении, чтобы он возвращал int вместо того, чтобы void (функция, которая возвращает Integer вместо того, чтобы Sub в VB.Net), а затем верните код выхода из этого метода.
  2. Установите Среда.Код выхода свойство для кода выхода.Обратите внимание, что метод 1.имеет приоритет - если Main метод возвращает все, что угодно, кроме void (является Sub в VB.Net) тогда значение этого свойства будет проигнорировано.
  3. Передайте код выхода в Окружающая среда.Выход способ.Это приведет к немедленному завершению процесса, в отличие от двух других методов.

Важным стандартом, который следует соблюдать, является то, что 0 олицетворяет "Успех".

В смежной теме рассмотрите возможность использования перечисления для определения кодов выхода, которые будет возвращать ваше приложение.Тот Самый Атрибут FlagsAttribute ( Флаги ) позволит вам вернуть комбинацию кодов.

Кроме того, убедитесь, что ваше приложение скомпилировано как "Консольное приложение".

Если вы собираетесь использовать метод, предложенный Дэвидом, вам также следует взглянуть на атрибут [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 );

Просто верните соответствующий код из main.

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

Используйте ExitCode, если ваш main имеет подпись возврата void, в противном случае вам нужно "установить" ее по возвращаемому вами значению.

Свойство Environment.ExitCode

Если основной метод возвращает void, вы можете использовать это свойство, чтобы задать код выхода, который будет возвращен в вызывающую среду.Если Main не возвращает void , это свойство игнорируется.Начальное значение этого свойства равно нулю.

В качестве дополнения к книге Скотта Манро ответ:

  • В C # 6.0 и VB.NET 14.0 (ПО СРАВНЕНИЮ С 2015 годом) либо Среда.Код выхода или Environment.Exit(Код выхода) требуется для возврата ненулевого кода из консольного приложения.Изменение возвращаемого типа Main не имеет никакого эффекта.
  • В F # 4.0 (ПО СРАВНЕНИЮ С 2015 годом) возвращаемое значение main точка входа соблюдается.

Опция перечисления превосходна, однако может быть улучшена путем умножения чисел, как в:

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=против 85).aspx

Вы найдете типичные коды, такие как 2 для "файл не найден" или 5 для "доступ запрещен".

И когда вы натыкаетесь на неизвестный код, вы можете использовать эту команду, чтобы узнать, что это значит:

net helpmsg decimal_code

например ,

чистая помощь msg 1

ВОЗВРАТ

Неправильная функция

Используйте этот код

Environment.Exit(0);

используйте 0 в качестве значения int, если вы не хотите ничего возвращать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top