Use ExitCode if your main has a void return signature, otherwise you need to "set" it by the value you return.
If the Main method returns void, you can use this property to set the exit code that will be returned to the calling environment. If Main does not return void, this property is ignored. The initial value of this property is zero.
There are three methods that you can use to return an exit code from a console application.
Main
method in your application so that it returns an int
instead of void
(a function that returns an Integer
instead of Sub
in VB.Net) and then return the exit code from that method.Main
method returns anything other than void
(is a Sub
in VB.Net) then the value of this property will be ignored.An important standard that should be observed is that 0
represents 'Success'.
On a related topic, consider using an enumeration to define the exit codes that your application is going to return. The FlagsAttribute will allow you to return a combination of codes.
Also, ensure that your application is compiled as a 'Console Application'.
System.Environment.ExitCode
http://msdn.microsoft.com/en-us/library/system.environment.exitcode.aspx
Just return the appropiate code from main.
int Main(string[] args)
{
return 0; //or exit code of your choice
}
Use this code
Environment.Exit(0);
use 0 as the int if you don't want to return anything.
If you are going to use the method suggested by David, you should also take a look at the [Flags] Attribute.
This allows you to do bit wise operations on enums.
[Flags]
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
Then
(ExitCodes.SignFailed | ExitCodes.UnknownError)
would be 16 + 32. :)
My 2 cents:
You can find the system error codes here: https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx
You will find the typical codes like 2 for "file not found" or 5 for "access denied".
And when you stumble on an unknown code, you can use this command to find out what it means:
net helpmsg decimal_code
e.g.
net helpmsg 1
returns
Incorrect function
int code = 2;
Environment.Exit( code );
Just an another way:
public static class ApplicationExitCodes
{
public static readonly int Failure = 1;
public static readonly int Success = 0;
}
As an update to Scott Munro's answer:
Main
has no effect.main
entry point is respected.The enumeration option is excellent however can be improved upon by multiplying the numbers as in:
enum ExitCodes : int
{
Success = 0,
SignToolNotInPath = 1,
AssemblyDirectoryBad = 2,
PFXFilePathBad = 4,
PasswordMissing = 8,
SignFailed = 16,
UnknownError = 32
}
In the case of multiple errors, adding the specific error numbers together will give you a unique number that will represent the combination of detected errors.
For example, an errorlevel of 6 can only consist of errors 4 and 2, 12 can only consist of errors 4 and 8, 14 can only consist of 2, 4 and 8 etc.
In addition to the answers covering the return int's... a plea for sanity. Please, please define your exit codes in an enum, with Flags if appropriate. It makes debugging and maintenance so much easier (and, as a bonus, you can easily print out the exit codes on your help screen - you do have one of those, right?).
enum ExitCode : int {
Success = 0,
InvalidLogin = 1,
InvalidFilename = 2,
UnknownError = 10
}
int Main(string[] args) {
return (int)ExitCode.Success;
}
Source: Stackoverflow.com