• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Windows下使用Delphi编写系统服务

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

      最近需要写一个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线程的运行:

      代码如下:

  

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

 

      当然,可以将NoticeThread的定义放在另外一个Unit里即可,如果这样,只需在新建Service Application后,选择新建,Other->Thread Object即可。

      也并不一定非得用一个Thread来控制服务,只要符合需求即可。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
MATLAB中导入数据:importdata函数发布时间:2022-07-18
下一篇:
matlab基本粒子群算法实现(一)发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap