相关(但不同):How do I look up the proper Windows System Error Code to use in my application?
我的C#控制台应用程序正在一种文件类型和另一种文件类型之间进行转换(为方便起见,我们将它们称为*.x
和*.y
);用户必须指定两个文件的完整路径作为命令行参数。
通常,我有大量的逻辑可以验证命令行参数。每当出现验证错误时,我都会在应用程序中使用Environment.Exit(显然,在向用户打印了相应的消息之后)。
Microsoft具有非常广泛的错误代码list。与我最相关的是0
(进程成功运行)和1
(未找到文件)。
我的命令行参数的错误情况/验证规则如下:
*.x
或*.y
以外的其他文件类型)。 *.x
文件和*.y
文件。 Environment.Exit(1);
(因为这就是Microsoft的文档说的正确错误代码是针对找不到的文件的)。 我的问题是:假设我已经告诉用户确切的错误信息(如果违反了一项验证规则)(例如,如果找不到该文件),那么我实际上从执行
Environment.Exit(1);
(例如)获得了任何 yield 吗?我确实从文档中意识到,它将把我指定的错误代码返回给操作系统,但是这实际上对我有什么帮助(特别是从编写没有“低级”操作的“纯” .NET应用程序的 Angular 来看) )?在这一点上,操作系统实际上有何不同之处?它对用户有何好处(或我自己的调试)?为了获得最大的利益,我是否需要在应用程序中执行任何“特殊”操作?
最佳答案
该退出代码可由应用程序中产生的任何其他进程使用。例如,有时您想从C#应用程序中调用外部工具(例如ffmpeg
)。您正在执行以下操作:
var ffmpeg = new Process();
ffmpeg.StartInfo = new ProcessStartInfo("ffmpeg.exe", "args");
ffmpeg.Start();
ffmpeg.WaitForExit();
这样做之后,您想知道一切是否正常。一个程序很难分析错误输出或类似的东西-因此您只需检查:
bool allFine = ffmpeg.ExitCode == 0;
因为一般约定(在我所知道的所有操作系统中)是为了成功返回0。当然,它并不总是有效,但这是因为并非所有工具都遵循此有用的约定来为成功返回0,为错误返回1,因此您应该站在一个好的方面,并遵循此惯例。
当您的应用程序在较长的.bat脚本中运行并且作者希望根据执行结果执行某些操作时,情况也是如此。
简而言之-您的错误消息供人类使用,而退出代码则供机器使用。因此,如果成功,则返回0;如果出错,则返回其他任何值(通常为1)。如果您的程序是为与其他工具(例如许多Unix工具)结合使用而设计的,以用于大量的命令行消耗,则您可能需要针对不同的情况使用多个退出代码并进行记录,但实际情况并非如此。而且您不需要使用
Environment.Exit
-只需更改Main
的签名即可返回int:static int Main(string[] args) {...}
关于c# - 为什么以及如何在Environment.Exit中使用Windows系统错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44830036/