如何在VCL表单应用程序中设置退出代码

时间:2013-02-28 04:47:34

标签: delphi vcl exit-code return-code

我无法让ExitCode适用于VCL表单应用程序。这是我的测试应用程序。它是从Delphi 2007 IDE的File / New菜单创建的。唯一的变化是我在最后添加了行ExitCode := 42;

program Test;

uses
  Forms,
  Unit27 in 'Unit27.pas' {Form27};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm27, Form27);
  Application.Run;

  ExitCode := 42;
end.

现在,当我从命令行运行它时,%ERRORLEVEL%没有设置:

>.\Test.exe

>echo %ERRORLEVEL%
0

我预计%ERRORLEVEL%中的值为42,但它没有更新。

我在控制台应用程序中尝试了相同的实验,并且运行正常。为什么它不适用于我的GUI应用程序?

2 个答案:

答案 0 :(得分:20)

您设置退出代码的方法很好。这是你的测试错误。

在提示输入下一个命令之前,shell不会等待GUI应用程序完成运行。因此,错误级别已经建立。您在显示命令提示符时检查值,而不是在运行 echo命令时检查。

在批处理文件或命令脚本中运行程序会修改命令解释程序的行为,使其在运行下一个命令之前等待每个命令完成,即使对于标记为使用GUI子系统而非控制台子系统的程序也是如此。这就是为什么从批处理文件中正确报告错误级别的原因 - 您运行的进程在命令解释器获取退出代码之前已完成。如果不使用命令脚本,您可以尝试使用the start command启动程序并将/wait选项传递给它。我不确定它是否会转发它启动的进程的退出代码。

答案 1 :(得分:6)

您可以像现在一样建立退出代码,但在控制台上,您必须在同一批次中测试%errorlevel%变量以获取值。

不要在命令提示符下运行命令,而是创建一个简单的bat,如下所示:

REM calltest.bat

.\Test.exe
echo %ERRORLEVEL%

然后,调用你的测试:

>calltest

我在测试中得到了这个:

>calltest.bat
>project3.exe
>echo 47

对于这两者,直接设置ExitCode变量或调用Halt

我的操作系统是Win7 64,如果它有任何区别。直接从命令行打印%errorlevel%将打印0。