Delphi创建服务程序

Windows 2000/XP和2003等支持一种叫做”服务程序”的东西.程序作为服务启动有以下几个好处:

  1. 不用登陆进系统即可运行.

  2. 具有SYSTEM特权.所以你在进程管理器里面是无法结束它的.

如何创建Service

下面就介绍一下如何用Delphi7创建一个Service程序:
运行Delphi7,选择菜单File–>New–>Other—>Service Application.将生成一个服务程序的框架.将工程保存为ServiceDemo.dpr和Unit_Main.pas,然后回到主框架.我们注意到,Service有几个属性.其中以下几个是我们比较常用的:

  1. DisplayName:服务的显示名称
  2. Name:服务名称.

如下图所示,Service的属性Name和DisplayName分别对应服务的服务名称和显示名称
这里写图片描述

Service事件:

创建完代码后我们就可以在Service服务的各个事件里面编写相关代码实现我们的功能了,一般在代码中我们都会实现以下几个事件方法,根据字面意思应该就知道这些方法是做什么用的了,这里就不做过多解释了
这里写图片描述

Service调试

Service程序不容易调试,一般我们可以通过写日志的方式调试,这里我介绍另外一种调试方式,通过编译指令把Service转换成普通程序,然后再进行调试,方法如下:

1.新建一个窗体MainFrm,将需要实现的功能写在这个单元

2.处理项目文件的单元头,添加一个编译指令DEBUG

program ProManage;

uses
  {
  $IFDEF DEBUG}
  Forms,
  {
  $ELSE}
  SvcMgr,
  {
  $ENDIF}
  frmProMain in 'frmProMain.pas' {
  MainFrm},
  uService in 'uService.pas' {
  PMTOH3sv: TService};

{
  $R *.res}

begin
  Application.Initialize;
  Application.Title := 'PMTOH3';
  {
  $IFDEF DEBUG}
  Application.CreateForm(TMainFrm, MainFrm);
  {
  $ELSE}
  Application.CreateForm(TPMTOH3sv, PMTOH3sv);
  {
  $ENDIF}
  Application.Run;
end.

3.把代码需要实现的功能全部在主窗体单元中实现,然后在ServiceStart中调用该主窗体,如下

procedure TPMTOH3sv.ServiceShutdown(Sender: TService);
begin
  MainFrm.Free;
  CoUninitialize;
  Status := csStopped;
  ReportStatus(); 
end;

procedure TPMTOH3sv.ServiceStart(Sender: TService; var Started: Boolean);
begin
  CoInitialize(nil);
  Started := True;
  Svcmgr.Application.CreateForm(TMainFrm, MainFrm);
  MainFrm.Hide;
end;

总结:这样当我们调试的时候设置Debug为True就可以直接调试,当调试完毕后我们把Debug设为False就可以编译成一个服务程序了

下面我给出一个完整的例子

工程文件:Project1.dpr

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值