从C#中的控制台应用程序退出

我在这里阅读了很多关于stackoverflow,评论,意见和各种想法的东西。 但无论如何,我真的需要一种解释的方法来退出我在C#上的控制台应用程序(我在VS2010框架4上),并带有自定义错误。

我现在能读到的最好的东西是VB:

Private Declare Sub ExitProcess Lib "kernel32" (ByVal uExitCode As Long) 

并使用ExitProcess(1)进行错误或ExitProcess(0)

所以我的问题是:

  • 是否与Environment.Exit(1)相同?
  • 对于作为自动作业运行的应用程序,有什么好处?
  • 什么意思是退出代码,-1,0,1,它们的区别是什么?
  • 那么静态void ExitProcess(uint uExitCode); ?

以前的一些问题标记为参考书目:

在C#中退出Console应用程序的命令是什么?

http://geekswithblogs.net/mtreadwell/archive/2004/06/06/6123.aspx

您可以:

  1. 调用Environment.Exit(int)
  2. 将Main函数重新声明为返回int,并从中返回值。

1)Environment.Exit几乎相同,

2)我猜Windows自动化服务? 尝试一下,但我想我不会按预期工作……

3)看看这个, Windows Exitcodes

4)这很好,但你也可以使用.Net内置方法

Environment.Exit将执行与ExitProcess相同的操作(加上可能还有一些.Net清理) – 最终结果是相同的。

至于退出代码,它们意味着你想要的任何东西(在合理范围内) – 0是’成功’,!= 0是’不成功’但是你可以使用你想要的任何非0值来表示你喜欢的任何东西,它就是使用该值对程序执行一些有用的操作。

以下是使用Environment.Exit(ExitCode)时特定于您的一个问题的一些Environment.Exit(ExitCode)

 ERROR_SUCCESS 0 (0x0) The operation completed successfully. ERROR_INVALID_FUNCTION 1 (0x1) Incorrect function. ERROR_FILE_NOT_FOUND 2 (0x2) The system cannot find the file specified. 

有关详细信息的更多ExitCodes,请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx

-1。 是否与Environment.Exit(1)相同?

这是.NET,你几乎不知道他们为它实现了哪个WINAPI而没有使用windbg进行内部隐藏。但是没有任何关于ExitProcessEnvironment.Exit的相似性的文档。 Environment.Exit可能包含多个ExitProcess。

-2。 对于作为自动作业运行的应用程序,有什么好处?

如果你使用一些调度程序运行自动化作业,而不是使用Windows服务的其他想法。这将消除退出过程的任何麻烦。

-3。 什么意思是退出代码,-1,0,1,它们的区别是什么?

它们只是告诉操作系统退出的代码。 您可能已经看到程序员在出错时指定return 1或在成功时return 0使您可以自由使用其中任何一个。

-4。 那么静态void ExitProcess(uint uExitCode);

您可以在应用程序中自由使用非托管呼叫,当然您也会错过Environment.Exit的管理活动。

我正在回答这个问题“退出代码是什么意思,-1,0,1,它们的区别是什么?”

不同的退出代码只是与调用者应用程序通信状态的一种方法。 例如,在我参与的其中一个项目中,我们使用99作为警告代码。 只要涉及的所有应用程序都知道当他们收到99或其他什么时该做什么就可以了。 在该应用程序中,如果呼叫者接收除0或99之外的任何其他内容,则呼叫者应该中止,并且在99的情况下,它可以自由继续。