Environment.ExitCode 属性
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
获取或设置进程的退出代码。
public:
static property int ExitCode { int get(); void set(int value); };
public static int ExitCode { get; set; }
member this.ExitCode : int with get, set
Public Shared Property ExitCode As Integer
属性值
包含退出代码的 32 位有符号整数。 默认值为 0(零),这指示已成功完成处理。
示例
下面是一个名为Double.exe的简单应用,它将作为命令行参数传递给它的整数值加倍。 该值将错误代码分配给 ExitCode 属性以指示错误条件。 请注意,必须添加对System.Numerics.dll程序集的引用才能成功编译示例。
using System;
using System.Numerics;
public class Example
{
private const int ERROR_BAD_ARGUMENTS = 0xA0;
private const int ERROR_ARITHMETIC_OVERFLOW = 0x216;
private const int ERROR_INVALID_COMMAND_LINE = 0x667;
public static void Main()
{
string[] args = Environment.GetCommandLineArgs();
if (args.Length == 1) {
Environment.ExitCode = ERROR_INVALID_COMMAND_LINE;
}
else {
BigInteger value = 0;
if (BigInteger.TryParse(args[1], out value))
if (value <= Int32.MinValue || value >= Int32.MaxValue)
Environment.ExitCode = ERROR_ARITHMETIC_OVERFLOW;
else
Console.WriteLine("Result: {0}", value * 2);
else
Environment.ExitCode = ERROR_BAD_ARGUMENTS;
}
}
}
open System
open System.Numerics
let ERROR_BAD_ARGUMENTS = 0xA0
let ERROR_ARITHMETIC_OVERFLOW = 0x216
let ERROR_INVALID_COMMAND_LINE = 0x667
let args = Environment.GetCommandLineArgs()
if args.Length = 1 then
Environment.ExitCode <- ERROR_INVALID_COMMAND_LINE
else
match BigInteger.TryParse args[1] with
| true, value ->
if value <= bigint Int32.MinValue || value >= bigint Int32.MaxValue then
Environment.ExitCode <- ERROR_ARITHMETIC_OVERFLOW
else
printfn $"Result: {value * 2I}"
| _ ->
Environment.ExitCode <- ERROR_BAD_ARGUMENTS
Imports System.Numerics
Module Example
Private Const ERROR_BAD_ARGUMENTS As Integer = &hA0
Private Const ERROR_ARITHMETIC_OVERFLOW As Integer = &h216
Private Const ERROR_INVALID_COMMAND_LINE As Integer = &h667
Public Sub Main()
Dim args() As String = Environment.GetCommandLineArgs()
If args.Length = 1 Then
Environment.ExitCode = ERROR_INVALID_COMMAND_LINE
Else
Dim value As BigInteger = 0
If BigInteger.TryParse(args(1), value) Then
If value <= Int32.MinValue Or value >= Int32.MaxValue
Environment.ExitCode = ERROR_ARITHMETIC_OVERFLOW
Else
Console.WriteLine("Result: {0}", value * 2)
End If
Else
Environment.ExitCode = ERROR_BAD_ARGUMENTS
End If
End If
End Sub
End Module
然后,可以从批处理文件(如以下内容)调用该示例,以便使用 ERRORLEVEL
命令访问其错误代码。
@echo off
Double.exe %1
if errorlevel 1639 goto NoArg
if errorlevel 534 goto Overflow
if errorlevel 160 goto BadArg
if errorlevel 0 echo Completed Successfully
goto :EOF
:NoArg
echo Missing argument
goto :EOF
:Overflow
echo Arithmetic overflow
goto :EOF
:BadArg
echo Invalid argument
goto :EOF
下面显示了调用批处理文件生成的一些示例输出。
>getdouble 123
Result: 246
Completed Successfully
>getdouble 5912323109093
Arithmetic overflow
>getdouble
Missing argument
>getdouble "a string"
Invalid argument
请注意,Double.exe的代码在函数中与以下示例相同,但前者定义没有返回值的入口点 Main
,而此示例定义一个名为 Main
返回整数的入口点。
using System;
using System.Numerics;
public class Example
{
private const int ERROR_SUCCESS = 0;
private const int ERROR_BAD_ARGUMENTS = 0xA0;
private const int ERROR_ARITHMETIC_OVERFLOW = 0x216;
private const int ERROR_INVALID_COMMAND_LINE = 0x667;
public static int Main()
{
string[] args = Environment.GetCommandLineArgs();
if (args.Length == 1) {
return ERROR_INVALID_COMMAND_LINE;
}
else {
BigInteger value = 0;
if (BigInteger.TryParse(args[1], out value))
if (value <= Int32.MinValue || value >= Int32.MaxValue)
return ERROR_ARITHMETIC_OVERFLOW;
else
Console.WriteLine("Result: {0}", value * 2);
else
return ERROR_BAD_ARGUMENTS;
}
return ERROR_SUCCESS;
}
}
open System
open System.Numerics
let ERROR_SUCCESS = 0
let ERROR_BAD_ARGUMENTS = 0xA0
let ERROR_ARITHMETIC_OVERFLOW = 0x216
let ERROR_INVALID_COMMAND_LINE = 0x667
[<EntryPoint>]
let main _ =
let args = Environment.GetCommandLineArgs()
if args.Length = 1 then
ERROR_INVALID_COMMAND_LINE
else
match BigInteger.TryParse args[1] with
| true, value ->
if value <= bigint Int32.MinValue || value >= bigint Int32.MaxValue then
ERROR_ARITHMETIC_OVERFLOW
else
printfn $"Result: {value * 2I}"
ERROR_SUCCESS
| _ ->
ERROR_BAD_ARGUMENTS
Imports System.Numerics
Module Example
Private Const ERROR_SUCCESS As Integer = 0
Private Const ERROR_BAD_ARGUMENTS As Integer = &hA0
Private Const ERROR_ARITHMETIC_OVERFLOW As Integer = &h216
Private Const ERROR_INVALID_COMMAND_LINE As Integer = &h667
Public Function Main() As Integer
Dim args() As String = Environment.GetCommandLineArgs()
If args.Length = 1 Then
Return ERROR_INVALID_COMMAND_LINE
Else
Dim value As BigInteger = 0
If BigInteger.TryParse(args(1), value) Then
If value <= Int32.MinValue Or value >= Int32.MaxValue
Return ERROR_ARITHMETIC_OVERFLOW
Else
Console.WriteLine("Result: {0}", value * 2)
End If
Else
Return ERROR_BAD_ARGUMENTS
End If
End If
Return ERROR_SUCCESS
End Function
End Module
注解
Main
如果该方法返回void
,则可以使用此属性设置将返回到调用环境的退出代码。 如果未 Main
返回 void
,则忽略此属性。 此属性的初始值为零。
警告
该 ExitCode 属性是带符号 32 位整数。 若要防止属性返回负退出代码,不应使用大于或等于0x80000000的值。
使用非零数字指示错误。 在应用程序中,可以在枚举中定义自己的错误代码,并根据方案返回相应的错误代码。 例如,返回一个值为 1 以指示所需的文件不存在,值 2 表示文件的格式不正确。 有关Windows操作系统使用的退出代码列表,请参阅Windows文档中的系统错误代码。