1

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

执行:

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;

如果发生任何异常,服务将停止工作,必须手动重新启动。
我想在没有用户干预的情况下发生异常时打破循环并重新开始。

4

1 回答 1

3

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

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

于 2013-07-03T03:53:15.693 回答