Windows 什么;标准;应用程序是否应支持应用程序返回/退出代码?
是否有一套标准的应用程序返回代码?返回0表示成功,返回1表示失败,等等Windows 什么;标准;应用程序是否应支持应用程序返回/退出代码?,windows,standards,Windows,Standards,是否有一套标准的应用程序返回代码?返回0表示成功,返回1表示失败,等等 我有一个Windows Server应用程序,我正在添加一些返回错误代码,除了我需要的特定于应用程序的代码外,我还希望坚持使用标准代码。我认为唯一的标准是0表示成功,非零表示失败。这与其说是标准,不如说是惯例。没有一套标准的退出代码是应用程序应该遵守的 但是,正如您所提到的,对于成功来说,有一些常见的方法,如0。根据您使用的操作系统和工具,您可能可以查看类似应用程序的退出代码并模仿它们。退出代码远不是标准代码,开发人员更多地
我有一个Windows Server应用程序,我正在添加一些返回错误代码,除了我需要的特定于应用程序的代码外,我还希望坚持使用标准代码。我认为唯一的标准是0表示成功,非零表示失败。这与其说是标准,不如说是惯例。没有一套标准的退出代码是应用程序应该遵守的
但是,正如您所提到的,对于成功来说,有一些常见的方法,如0。根据您使用的操作系统和工具,您可能可以查看类似应用程序的退出代码并模仿它们。退出代码远不是标准代码,开发人员更多地使用退出代码来了解应用程序返回时发生的相应错误。成功的标准是0,失败的标准是非零,这是一个普遍趋势,因为它允许您对所有可能的错误使用完整的非零范围
如果您的应用程序适当地记录了错误,则退出代码可能完全不需要跟踪。标准状态代码是
exit\u SUCCESS
和exit\u FAILURE
,在stdlib.h
中定义。不过,几乎每个人都只分别使用0和1。有些软件会对不同类型的错误使用不同的非零代码。实现您要使用的功能。其他任何东西都是多余的。也许您可以采用一些Unix约定
在中,用户David建议
sysexits.h
有一个标准退出代码列表。它似乎至少可以追溯到1993年,一些像Postfix这样的大型项目也使用它,所以我想这是一条路要走
从OpenBSD手册页:
根据样式(9),在结束程序时,使用任意值调用exit(3)来指示故障条件不是一种好的做法。相反,应该使用sysexits中预定义的退出代码,这样流程调用方就可以在不查找源代码的情况下粗略估计故障类
这是Debian系统上显示的列表:
#define EX_USAGE 64 /* command line usage error */
#define EX_DATAERR 65 /* data format error */
#define EX_NOINPUT 66 /* cannot open input */
#define EX_NOUSER 67 /* addressee unknown */
#define EX_NOHOST 68 /* host name unknown */
#define EX_UNAVAILABLE 69 /* service unavailable */
#define EX_SOFTWARE 70 /* internal software error */
#define EX_OSERR 71 /* system error (e.g., can't fork) */
#define EX_OSFILE 72 /* critical OS file missing */
#define EX_CANTCREAT 73 /* can't create (user) output file */
#define EX_IOERR 74 /* input/output error */
#define EX_TEMPFAIL 75 /* temp failure; user is invited to retry */
#define EX_PROTOCOL 76 /* remote error in protocol */
#define EX_NOPERM 77 /* permission denied */
#define EX_CONFIG 78 /* configuration error */
在文件
/usr/include/sysexits.h
中可以找到这些错误代码的更详细描述。肯定有为Windows定义的标准错误代码
很久以前,我们对特定的“自定义”错误使用负面错误,但我怀疑这是一种好的做法
唯一真正的惯例是
0
表示成功,非零值(通常1
)表示失败。有关这方面的官方参考,例如,微软上的C++文档:
通常,调用者将status
值设置为0表示正常退出,或设置为其他值表示错误
或者C#docs上的和不同的状态:
使用0(零)表示进程已成功完成
及
默认值为0(零),表示进程已成功完成
及
使用非零数字表示错误。在应用程序中,您可以在枚举中定义自己的错误代码,并根据场景返回相应的错误代码。例如,返回值1表示所需文件不存在,返回值2表示文件格式错误。有关Windows操作系统使用的退出代码列表,请参阅Windows文档中的
与此不同,我强烈建议不要将系统错误代码用作应用程序退出代码。有关系统错误代码的一些注意事项:
- Microsoft不建议在任何地方使用它们作为应用程序退出代码,实际上,在我上面引用的文档中明确建议您“定义自己的错误代码”
- Microsoft在其自己的应用程序或命令中不一致地使用它们作为退出代码。虽然有一些应用程序确实使用了这些代码,例如,但还有很多应用程序不使用这些代码,例如
,dir
,或dotnet
- 对我来说,使用它们显然是个坏主意。有数千个系统退出代码,其中大多数与您的特定应用程序无关。如果您尝试使用它们,您将浪费大量时间在列表中挑选适用于您的场景的代码,最终结果对于调用您的应用程序的开发人员来说将不如您刚刚定义了一小部分对您的特定应用程序有意义的退出代码那么有用,因此请改为这样做