У мене є тривіальна консольна програма у .NET. Це просто тестова частина більшого додатка. Я хотів би вказати "код виходу" моєї консольної програми. Як це зробити?
У мене є тривіальна консольна програма у .NET. Це просто тестова частина більшого додатка. Я хотів би вказати "код виходу" моєї консольної програми. Як це зробити?
Відповіді:
3 варіанти:
Mainякщо ви оголосите свій Mainметод повернення int.Environment.Exit(code).Environment.ExitCode = -1;. Це буде використано, якщо інше не встановлює код повернення або використовує один із інших параметрів, описаних вище).Залежно від вашої програми (консоль, сервіс, веб-додаток тощо) можна використовувати різні методи.
0означає успіх, а ненульовий - означає збій. return;вказує на успіх через код виходу 0та return -1;вказує на невдачу.
На додаток до відповідей, що стосуються повернення закордонного ... прохання про розумність. Будь-ласка, будь-ласка, визначте свої вихідні коди в перерахунку, якщо вони потрібні. Це налагоджує налагодження та обслуговування набагато простіше (і, як бонус, ви можете легко роздрукувати вихідні коди на екрані довідки - у вас є один із них, правда?).
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замість SubVB.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, якщо ваш основний має недійсний зворотний підпис, інакше вам потрібно «встановити» його за значенням, яке ви повернете.
Властивість Environment.ExitCode
Якщо метод Main повернеться недійсним, ви можете використовувати це властивість для встановлення коду виходу, який буде повернуто в середовище виклику. Якщо Main не повертає недійсних, це властивість ігнорується. Початкове значення цього властивості дорівнює нулю.
В якості оновлення для Скотта Манро відповіді :
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
напр
чиста довідка1
повертає
Неправильна функція
Використовуйте цей код
Environment.Exit(0);
використовувати 0 як int, якщо ви нічого не хочете повернути.