大佬教程收集整理的这篇文章主要介绍了如何让Windows SCM在失败时重启我的服务,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的问题是如何以这样的方式退出服务,即SCM将自动尝试重新启动服务. (我已经在服务管理器中设置了服务的@R_966_10618@)
MSDN州
我已经阅读了这篇文章Using the Automatic Recovery Features of Windows Services,但我不知道如何在delphi中实现这一点.
我已经尝试了以下几点
>将Tservice的ErrCode属性设置为非零值.
>将serviceStop事件的已停止参数设置为false.
>在servicestop事件处理程序中引发异常.
这是我正在使用的代码,
procedure TTestservice.serviceExecute(Sender: TservicE); begin while not (Terminated or FFatalError) do begin serviCEThread.Processrequests(false); ReportStatus; Sleep(100); end; if FFatalError then Halt(1); end;
FFatalError是TTestservice类上的私有布尔字段,在启动时初始化为false,如果工作线程(在TTestservice.serviceStart事件中启动)以致命异常终止,则它仅设置为true.
这是工作线程的OnTerminate事件处理程序.
procedure TTestservice.ThdTerm(Sender: Tobject); var E : Exception; Thread : TThread; begin Thread := TThread(Sender); if (Thread.FatalException <> nil) then begin E := Exception(Thread.FatalException); GetExcCallStack(E); EventLog.LogError(Thread.ClassName + ': ID:'+ IntToStr(Thread.ThreadID) + ' Stopped Unexpectedly!,'+ NEWLINE + E.ClassName +': ' + E.messagE); FFatalError := True; end; end;
以上是大佬教程为你收集整理的如何让Windows SCM在失败时重启我的服务全部内容,希望文章能够帮你解决如何让Windows SCM在失败时重启我的服务所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。