我有一个应用程序,在启动时检查一些条件,并在主窗体的OnShow事件中启动外部程序.问题是如果启动外部程序时出错,我希望应用程序立即终止.但是有一个问题,因为EurekaLog捕获了我的异常并以某种方式通过否定所有调用Application.Teminate
和任何其他正常关闭方法来中断消息循环.
所以这是我的问题,当这种情况存在时,ExitProcess是否是立即终止我的应用程序的最佳途径?
Rob*_*edy 11
到了OnShow
解雇的时候,你已经进入程序太远,无法决定你真的不希望程序运行.你应该尽快做出决定.OnShow
不是决定不应该显示表单的地方.
在您创建主窗体之前,应该检查这种情况.将检查放入DPR文件中,如果确定程序不能运行,则只需调用即可exit
.
begin
Application.Initialize;
if not ApplicationShouldReallyStart then
exit;
Application.CreateForm(TMainAppForm, MainAppForm);
Application.Run;
end.
Run Code Online (Sandbox Code Playgroud)
填写你自己的实现ApplicationShouldReallyStart
.(它确实应该是一个单独的函数,而不是DPR文件中的内联.如果DPR文件中的begin
- end
块太复杂,IDE会感到困惑.)
除此之外,不要打电话ExitProcess
.打电话Halt
来.Halt
调用ExitProcess
,但它也调用单元终结部分和其他特定于Delphi的进程关闭任务.