Delphi 编写系统服务(服务控制线程:开始,暂停,继续,停止)

       打开Delphi 7,新建,选择Other->Service Application 修改属性中Name和DisplayName,Name是Service的名称,决定着进程的标识,DisplayName是显示在操作系统里的服务面板里的服务的名称。例如我们将Name修改为NoticeService。

      新建一个类,例如名字叫做TNoticeThread,继承自TThread,并重写protected过程Execute。在NoticeService的类定义中添加一个NoticeThread对象。

      找到属性的Events选项卡,分别添加OnStart,OnPause,OnContinue,OnStop事件,用这几个事件来控制NoticeThread线程的运行:

      代码如下:

[delphi] view plain copy
 
 print?
  1. unit ufrmMain;  
  2.   
  3. interface  
  4.   
  5. uses  
  6.   Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;  
  7.   
  8. type  
  9.   TNoticeThread = class(TThread)  
  10.   private  
  11.   
  12.   protected  
  13.     procedure Execute; override;  
  14.   end;  
  15.   
  16. type  
  17.   TNoticeService = class(TService)  
  18.     procedure ServiceStart(Sender: TService; var Started: Boolean);  
  19.     procedure ServiceStop(Sender: TService; var Stopped: Boolean);  
  20.     procedure ServicePause(Sender: TService; var Paused: Boolean);  
  21.     procedure ServiceContinue(Sender: TService; var Continued: Boolean);  
  22.   private  
  23.     NoticeThread: TNoticeThread;  
  24.   public  
  25.     function GetServiceController: TServiceController; override;   
  26.   end;  
  27.   
  28. var  
  29.   NoticeService: TNoticeService;  
  30.   
  31. implementation  
  32.   
  33. {$R *.DFM}  
  34.   
  35. procedure ServiceController(CtrlCode: DWord); stdcall;  
  36. begin  
  37.   NoticeService.Controller(CtrlCode);  
  38. end;  
  39.   
  40. function TNoticeService.GetServiceController: TServiceController;  
  41. begin  
  42.   Result := ServiceController;  
  43. end;  
  44.   
  45. procedure TNoticeService.ServiceStart(Sender: TService;  
  46.   var Started: Boolean);  
  47. begin  
  48.   NoticeThread := TNoticeThread.Create(False);  
  49.   Started := True;  
  50. end;  
  51.   
  52. procedure TNoticeService.ServiceStop(Sender: TService;  
  53.   var Stopped: Boolean);  
  54. begin  
  55.   NoticeThread.Terminate;  
  56.   Stopped := True;  
  57. end;  
  58.   
  59. procedure TNoticeService.ServicePause(Sender: TService;  
  60.   var Paused: Boolean);  
  61. begin  
  62.   NoticeThread.Suspend;  
  63.   Paused := True;  
  64. end;  
  65.   
  66. procedure TNoticeService.ServiceContinue(Sender: TService;  
  67.   var Continued: Boolean);  
  68. begin  
  69.   NoticeThread.Resume;  
  70.   Continued := True;  
  71. end;  
  72.   
  73. { TNoticeThread }  
  74.   
  75. procedure TNoticeThread.Execute;  
  76. begin  
  77.   inherited;  
  78.   
  79. end;  
  80.   
  81. end.  

http://blog.csdn.net/yanjiaye520/article/details/7794550

原文地址:https://www.cnblogs.com/findumars/p/5090498.html