任何例外的不间断服务

时间:2013-07-02 12:05:20

标签: delphi service delphi-xe2

如何确保服务永远不会因任何原因而停止
除非用户停止了它 我试过这个但没有成功。

OnExecute:

Count := 0;
while not Terminated do
begin
  Inc(Count);
  While Count >= SecBetweenRuns do
  Begin
    Try
      Count := 0;
      ...
    Except
      on E: exception do
      Begin
        JFCLogFile1.LogText := E.Message;
        Break;
      End;
    End;
  End;
  Sleep(1000);
  ServiceThread.ProcessRequests(False);
end;

如果发生任何异常,服务将停止工作,必须再次手动启动 我希望打破循环并在发生异常时重新开始,无需用户干预。

1 个答案:

答案 0 :(得分:3)

唯一可能发生的方法是,如果引发的异常未被捕获并且被允许离开OnExecute处理程序。所以你显然没有抓住你认为的一切。

就个人而言,我建议不要使用OnExecute事件。将您的逻辑移动到在服务OnStart事件中启动并在服务OnStop事件中终止的单独工作线程中。至少这样,如果线程崩溃,它将不会停止服务。您可以覆盖TThread.DoTerminate()方法以检查TThread.FatalException属性,以了解未捕获的异常是否会杀死该线程。