应用程序支持哪些“标准”应用程序返回/退出代码?

时间:2009-10-08 16:18:15

标签: windows standards

是否存在标准的应用程序返回代码集?比如返回0表示成功1表示失败,然后等等?

我有一个Windows Server应用程序,我正在添加一些返回错误代码,并希望除了我需要的应用程序特定代码之外还要坚持标准代码。

8 个答案:

答案 0 :(得分:14)

我认为唯一的标准是0表示成功,非零表示失败。这更像是一种惯例而非标准。

答案 1 :(得分:7)

也许你可以采用一些Unix惯例。

another answer中,用户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内,可以找到有关这些错误代码的更详细说明。

答案 2 :(得分:6)

标准状态代码为EXIT_SUCCESSEXIT_FAILURE,在stdlib.h中定义。然而,几乎所有人都分别使用0和1。某些软件会针对不同类型的错误使用不同的非零代码。

答案 3 :(得分:4)

退出代码远非标准,并且更多地用于让开发人员知道在返回应用程序时发生的适当错误。成功的标准为0,失败的非零是一般趋势,因为它允许您对所有可能的错误使用完整的非零范围。

如果您的应用程序正确记录错误,则可能完全没有必要使用退出代码来跟踪。

答案 4 :(得分:3)

没有应用程序应符合的标准退出代码集。

然而,正如你所提到的,有一些常见的例如0表示成功。根据您使用的操作系统和工具,您可以查看类似应用程序的退出代码并模仿它们。

答案 5 :(得分:1)

唯一真正的惯例是0表示成功,非零值(通常为1)表示失败。有关此问题的官方参考,请参阅exit上的Microsoft的C ++文档:

  

通常,调用者将status值设置为0以指示正常退出,或将其设置为其他值以指示错误。

Envrionment.ExitEnvironment.ExitCode上的C#文档有不同的说明:

  

使用0(零)表示该过程已成功完成。

  

默认值为0(零),表示进程已成功完成。

  

使用非零数字表示错误。在应用程序中,您可以在枚举中定义自己的错误代码,并根据方案返回相应的错误代码。例如,返回值1表示所需文件不存在,返回值2表示文件格式错误。有关Windows操作系统使用的退出代码列表,请参阅Windows文档中的System Error Codes

some other answerers不同,我强烈建议不要将系统错误代码用作应用程序退出代码。关于系统错误代码的一些注意事项:

  • Microsoft 不建议将它们用作任何地方的应用程序退出代码,并且确实明确建议您"定义您自己的错误代码" 在我上面引用的文档中。
  • Microsoft不会在自己的应用程序或命令中始终将它们用作退出代码。虽然有一些 使用这些代码的应用程序示例,例如MsiExec.exe,但还有很多其他代码,例如dirdotnetTAEF
  • 使用它们对我来说似乎是一个明显不好的主意。 数千 系统退出代码,其中大多数与您的特定应用程序无关。如果您尝试使用它们,那么您将浪费时间在列表中查找适用于您的方案的代码,并且最终结果对于调用您的应用程序的开发人员而言不如您刚刚定义的那样有用少量的退出代码对您的特定应用程序有意义 - 所以请改为使用。

答案 6 :(得分:0)

肯定有为Windows定义的标准错误代码。

很久以前,我们对特定的'定制'使用了负面错误。错误,但我怀疑这是好的做法。

System Error Codes (Windows)

答案 7 :(得分:-2)

实施您将使用的内容。其他任何事情都是多余的。