9

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

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

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

并使用 ExitProcess(1) 处理错误或 ExitProcess(0)

所以我的问题是:

  • 与 Environment.Exit(1) 相同吗?
  • 对于作为自动作业运行的应用程序来说,什么更好?
  • 退出代码是什么意思,-1、0、1,它们有什么区别?
  • static void ExitProcess(uint uExitCode); 怎么样??

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

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

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

4

6 回答 6

21

你可以:

  1. 调用 Environment.Exit(int)
  2. 将您的 Main 函数重新声明为返回 int,并从中返回值。
于 2012-08-29T14:46:19.677 回答
3

1) Environment.Exit 几乎一样,

2)我猜是windows自动化服务?试试看,但我想我不会按预期工作......

3) 看看这个,Windows 退出代码

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

于 2012-08-29T14:48:18.633 回答
2

Environment.Exit将做与ExitProcess(可能加上一些.Net 清理)相同的事情 - 最终结果是相同的。

至于退出代码,它们的意思是你想要的任何东西(在合理范围内) - 0 是“成功”,!= 0 是“不成功”,但你可以使用任何你喜欢的非 0 值来表示你喜欢的任何东西,就可以了给程序使用该值来做一些有用的事情。

于 2012-08-29T14:43:51.640 回答
2

以下是使用时特定于您的问题之一的一些退出代码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.

有关详细信息的更多退出代码,请参见此处http://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx

于 2012-08-29T14:50:25.730 回答
1

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

这是 .NET,如果不使用 windbg 窥视内部,您几乎不会知道他们为它实现了哪个 WINAPI。但是,没有任何关于 .NET 和 .NET 的相似性的 ExitProcess记录Environment.ExitEnvironment.Exit可能包含多个 ExitProcess。

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

如果您使用某些调度程序运行自动化作业,那么我还有其他使用 Windows 服务的想法。这将消除退出进程的任何头痛。

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

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

-4。static void ExitProcess(uint uExitCode); 怎么样??

您可以在应用程序中自由使用非托管调用,当然您会错过Environment.Exit.

于 2012-08-29T15:12:20.867 回答
0

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

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

于 2012-08-30T06:55:35.853 回答