如何确保服务永远不会因任何原因而停止
除非用户停止了它
我试过这个但没有成功。
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;
如果发生任何异常,服务将停止工作,必须再次手动启动 我希望打破循环并在发生异常时重新开始,无需用户干预。
答案 0 :(得分:3)
唯一可能发生的方法是,如果引发的异常未被捕获并且被允许离开OnExecute
处理程序。所以你显然没有抓住你认为的一切。
就个人而言,我建议不要使用OnExecute
事件。将您的逻辑移动到在服务OnStart
事件中启动并在服务OnStop
事件中终止的单独工作线程中。至少这样,如果线程崩溃,它将不会停止服务。您可以覆盖TThread.DoTerminate()
方法以检查TThread.FatalException
属性,以了解未捕获的异常是否会杀死该线程。