我有一个微不足道的控制台应用程序。网。这只是个测试的一部分,更大的应用程序。我想指定的"出口码"我的控制台应用程序。我该怎么做这个?

有帮助吗?

解决方案

3个选择:

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

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

其他提示

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

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

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

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

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

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

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

如果您打算使用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.:)

int code = 2;
Environment.Exit( code );

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

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

如果您的主要具有空白返回签名,请使用ExitCode,否则您需要“设置”它是你返回的价值。

Environment.ExitCode Property

  

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

作为一个更新斯科特*门罗 答案:

  • C#6.0和VB.NET 14.0(VS2015年), 环境。退出环境。Exit(退出) 被要求返回一个非零码从控制台应用程序。改变返回的类型 Main 没有任何影响。
  • 在F#4.0(VS2015年),返回值的 main 入口点得到尊重。

枚举选项非常出色,但可以通过将数字相乘来改进:

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 /库/窗/桌面/ ms681382(v = vs.85)的.aspx

对于“找不到文件”,您会找到典型的代码,例如2。或5表示“拒绝访问”。

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

net helpmsg decimal_code

e.g。

  

net helpmsg 1

返回

  

功能不正确

使用此代码

Environment.Exit(0);

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top