如何在.NET中指定控制台应用程序的退出代码?

问题描述 投票:437回答:12

我在.NET中有一个简单的控制台应用程序。它只是更大应用程序的测试部分。我想指定我的控制台应用程序的“退出代码”。我该怎么做呢?

c# .net exit-code
12个回答
569
投票

3个选项:

  • 如果你声明你的Main方法返回Main,你可以从int返回它。
  • 你可以打电话给Environment.Exit(code)
  • 您可以使用以下属性设置退出代码:Environment.ExitCode = -1;。如果没有其他设置返回代码或使用上面的其他选项之一,将使用此方法)。

根据您的应用程序(控制台,服务,Web应用程序等),可以使用不同的方法。


7
投票

枚举选项非常好,但可以通过乘以数字来改进:

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等。


3
投票

我的2美分:

你可以在这里找到系统错误代码:https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx

您将找到典型代码,例如2表示“未找到文件”或5表示“拒绝访问”。

当您偶然发现未知代码时,您可以使用此命令找出它的含义:

net helpmsg decimal_code

EG

net helpmsg 1

回报

功能不正确


0
投票

使用此代码

Environment.Exit(0);

如果您不想返回任何内容,请使用0作为int。


257
投票

除了回答int的答案之外......还要求理智。请在枚举中定义退出代码,如果合适,请使用Flags。它使调试和维护变得更加容易(并且,作为奖励,您可以轻松地在帮助屏幕上打印退出代码 - 您确实有其中一个,对吧?)。

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

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

46
投票

您可以使用三种方法从控制台应用程序返回退出代码。

  1. 修改应用程序中的Main方法,使其返回int而不是void(在VB.Net中返回Integer而不是Sub的函数),然后返回该方法的退出代码。
  2. Environment.ExitCode属性设置为退出代码。请注意,方法1.优先 - 如果Main方法返回除void之外的任何内容(在VB.Net中是Sub),则将忽略此属性的值。
  3. 将退出代码传递给Environment.Exit方法。这将立即终止该过程,而不是其他两种方法。

应该遵守的一个重要标准是0代表'成功'。

在相关主题上,请考虑使用枚举来定义应用程序要返回的退出代码。 FlagsAttribute将允许您返回代码组合。

另外,请确保将您的应用程序编译为“控制台应用程序”。


43
投票

如果您打算使用David建议的方法,您还应该查看[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. :)



24
投票
int code = 2;
Environment.Exit( code );

11
投票

只需从main返回相应的代码即可。

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

11
投票

如果您的main具有void返回签名,请使用ExitCode,否则您需要按返回的值“设置”它。

Environment.ExitCode Property

如果Main方法返回void,则可以使用此属性设置将返回到调用环境的退出代码。如果Main不返回void,则忽略此属性。此属性的初始值为零。


8
投票

作为Scott Munro的answer的更新:

  • 在C#6.0和VB.NET 14.0(VS 2015)中,需要Environment.ExitCodeEnvironment.Exit(exitCode)才能从控制台应用程序返回非零代码。更改Main的返回类型无效。
  • 在F#4.0(VS 2015)中,main入口点的返回值得到尊重。
© www.soinside.com 2019 - 2024. All rights reserved.