加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

try / except似乎没有捕获异常 – Delphi Service Application

发布时间:2020-12-15 09:35:48 所属栏目:大数据 来源:网络整理
导读:我有一个用Delphi 2007编写的服务,我正在尝试捕获任何未知的异常.为on异常分配方法似乎不起作用(‘Forms.Application.OnException:= UnknownApplicationException’). “UnknownApplicationException”似乎没有被调用 – 我将此归因于应用程序中没有表单的
我有一个用Delphi 2007编写的服务,我正在尝试捕获任何未知的异常.为on异常分配方法似乎不起作用(‘Forms.Application.OnException:= UnknownApplicationException’). “UnknownApplicationException”似乎没有被调用 – 我将此归因于应用程序中没有表单的事实,因此该方法实际上从未被分配.除此之外,我还尝试在计时器上创建一个异常(在注释掉’Forms.Application.OnException:= UnknownApplicationException’后,它不会干扰).在服务启动后60秒,计时器会触发:

procedure TProcessScheduler.Timer1Timer(Sender: TObject);    
begin    
  try    
    Raise Exception.Create('THIS GIG SUCKS');    
  except     
    LogEvent(Name,rsUNKNOWN_EXCEPTION,EVENTLOG_AUDIT_FAILURE,0);    
    ExitCode:=-1;    
    Halt;    
  end;     
end;

似乎永远不会捕获异常 – 服务启动并且在此计时器触发后60秒后,我听到Windows错误声音但没有看到任何错误对话框 – 也许这可能是由于应用程序是服务的事实?永远不会调用’Halt’并且应用程序继续运行(我假设它等待某人在它创建的不可见错误对话框上单击ok).有什么想法为什么“除外”下的代码没有被调用?提前致谢! KP

解决方法

重新分配Forms.Application.OnException是一个坏主意,因为TServiceApplication.Run()自己这样做.您要么之前执行此操作,那么您的任务将不起作用,或者您之后执行此操作,在这种情况下,您将删除已实施的异常处理机制.

如果您将处理保留在原地,那么所有异常都将记录到Windows事件记录器中,这似乎是一项合理的服务.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读