Delphi编写系统服务二:系统服务和桌面程序的区别

 Delphi编写系统服务二:系统服务和桌面程序的区别 收藏
 Windows 2000/XP/2003等支持一种叫做“系统服务程序”的进程,系统服务和桌面程序的区别是:
系统服务不用登陆系统即可运行;
系统服务是运行在System Idle Process/System/smss/winlogon/services下的,而桌面程序是运行在Explorer下的;
系统服务拥有更高的权限,系统服务拥有Sytem的权限,而桌面程序只有Administrator权限;
在Delphi中系统服务是对桌面程序进行了再一次的封装,既系统服务继承于桌面程序。因而拥有桌面程序所拥有的特性;
系统服务对桌面程序的DoHandleException做了改进,会自动把异常信息写到NT服务日志中;
普通应用程序启动只有一个线程,而服务启动至少含有三个线程。(服务含有三个线程:TServiceStartThread服务启动线程;TServiceThread服务运行线程;Application主线程,负责消息循环);
  摘录代码:
  procedure TServiceApplication.Run;
  begin
    .
    .
    .
      StartThread := TServiceStartThread.Create(ServiceStartTable);
      try
        while not Forms.Application.Terminated do
          Forms.Application.HandleMessage;
        Forms.Application.Terminate;
        if StartThread.ReturnValue <> 0 then
          FEventLogger.LogMessage(SysErrorMessage(StartThread.ReturnValue));
      finally
        StartThread.Free;
      end;
     .
     .
     .
  end;

  procedure TService.DoStart;
  begin
    try
      Status := csStartPending;
      try
        FServiceThread := TServiceThread.Create(Self);
        FServiceThread.Resume;
        FServiceThread.WaitFor;
        FreeAndNil(FServiceThread);
      finally
        Status := csStopped;
      end;
    except
      on E: Exception do
        LogMessage(Format(SServiceFailed,[SExecute, E.Message]));
    end;
  end;
在系统服务中也可以使用TTimer这些需要消息的定时器,因为系统服务在后台使用TApplication在分发消息;

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/Bear_hx/archive/2008/11/28/3403873.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值