用delphi编写windows服务程序

用delphi编写windows服务程序

ID:12530787

大小:134.00 KB

页数:18页

时间:2018-07-17

用delphi编写windows服务程序_第1页
用delphi编写windows服务程序_第2页
用delphi编写windows服务程序_第3页
用delphi编写windows服务程序_第4页
用delphi编写windows服务程序_第5页
资源描述:

《用delphi编写windows服务程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、用Delphi编写Windows服务程序(1)一、Windows服务简介  服务程序(ServiceApplication)是一种运行于WinNT的后台程序,每个服务程序(ServiceApplication)中可能包含若干个服务(Service),每个服务就是其中的一个线程(该服务也可以创建多个子线程)。采用服务,应用程序可以获得特殊的权限,而且不会被用户通过Win2000的任务管理器直接结束程序,所以服务常常用来实现一些特殊的目标。  通过Win2000控制面板中的服务管理工具,我们可以设置/查看服务的特性:  (1)服务名称;(2)显示名称;(3)描述;(4)启动类型;(5

2、)依赖关系;  其中,服务名称是标识给服务的。  以Win2000的C:WINNTSystem32services.exe程序为例子,该Exe文件对应一个ServiceApplication,是该服务程序的可见实体;该exe中包含多个服务(Service),例如Alerter,Dhcp(DHCPClient),Messenger等。当我们结束一个服务的时候,该服务所在的ServiceApplication中的其他服务并没有被终止。  在Delphi中,Borland的工程师为我们提供了TServiceApplication,TService,TServiceThread等类

3、,封装了大量细节,简化了服务程序的开发。二、TServiceApplication  在Delphi中,类TServiceApplication就对应上述的ServiceApplication。利用Delphi的开发环境,我们新建一个ServiceApplicationProject,同时就创建了一个继承自TService的类。项目文件中的Application对象就是一个TServiceApplication实例。每个TServiceApplication包含若干个TService对象,正好对应上述的服务程序和服务之间的数量关系。  通过阅读TServiceApplicatio

4、n和TService类的定义,可以得知,TServiceApplication从TComponent类继承而来,TService从类TDataModule基础而来,Application对象负责各个TService对象的Create和Destroy。跟踪下列代码  Application.CreateForm(TService1,Service1);  可以发现创建的TService对象的Owner都是Application对象;在VCLFrameWork中Owner总是负责Destroy各个Component对象(VCL的TComponent类采用了Composite模式),所

5、以TServiceApplication也将Destroy各个TService对象。  下面跟踪TServiceApplication.Run的代码,可以发现TServiceApplication首先解析运行参数,实现了服务的Install和Uninstall。然后,初始化一个ServiceStartTable数组,该数组包含了各个service对象的服务名称和运行入口;最后创建一个TServiceStartThread对象,该对象是一个线程对象,从线程调用API:StartServiceCtrlDispatcher来启动ServiceStartTable中指定的若干个服务;而S

6、erviceApplication主线程就不断循环,处理消息,比如接收请求来停止/暂停某个服务。三、TService  TService类继承自类TDataModule,这意味着我们可以加入大量的VCL控件,实现丰富的功能。此外,我们还可以处理OnStart,OnPause,OnStop,OnContinue,OnCreate,OnShutDown等事件。其中需要说明的是:OnStop表示该服务被停止;而OnShutDown表示该ServiceApplication停止运行,这意味着其他服务也被终止了;两者含义是不一样的。   前面讲过,ServiceApplication通过调

7、用StartServiceCtrlDispatcher来启动各个服务。StartServiceCtrlDispatcher启动TService的入口,该入库就是TService.Main。TService.Main首先注册该服务,然后调用TService.DoStart。TService.DoStart创建一个内部TServiceThread成员对象,这是一个线程对象;考察TServiceThread.Execute可以得知,当我们处理的TService1.OnExecute,那

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。