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


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

11 410

11 ответов:

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 in VB.Net) и затем верните код выхода из этого метода.
  2. установить окружающая среда.ExitCode свойство для кода выхода. Обратите внимание, что метод 1. имеет приоритет - если Main способ возвращает все, кроме void (это Sub in 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, в противном случае вам нужно "установить" его по возвращаемому значению.

окружающая среда.Свойство ExitCode

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

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

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

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

как обновление для Скотта Мунро ответ:

  • в C# 6.0 и VB.NET 14.0 (VS 2015), либо окружающая среда.ExitCode или окружающая среда.Exit (exitCode) требуется для возврата ненулевого кода из консольного приложения. Изменение типа возврата Main не имеет никакого эффекта.
  • в F# 4.0 (VS 2015), возвращаемое значение main точка входа уважают.

мои 2 цента:

здесь вы можете найти коды ошибок системы : https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs. 85).aspx

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

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

net helpmsg decimal_code

например

net helpmsg 1

возвращает

неверная функция