|  设为首页  |  加入收藏  
首    页 关于我们 新闻中心 产品世界 相关下载 工程案例 人才招聘 联系我们

此页面上的内容需要较新版本的 Adobe Flash Player。

获取 Adobe Flash Player

产品展示 [更多]
解决方案 [更多]
省会部分小区有了远程室温监测仪
供热期间,怎样测量室内温度更合理?
供热住户温度采集方案
温湿度监控系统产品其他应用场合
供暖测温退费新规出台
让居民过一个温暖的冬天,是我们义不
无线室温远程采集控制系统
室内测温远传系统
技术文献 [更多]
如何应对手术室室温管理的矛盾
供暖管理-无线远程测温系统
供热温度标准到底是多少?
供暖 供热温度将随气温调整
供暖测温谁说了算
供热无线测温 少些争议更舒适
供暖温度检测系统
大体积混凝土测温点布置原则
       技术文献
Author:Jwztech.com Date: 2013/8/15 Hits: 2556

Delphi如何编写系统服务

打开Delphi编辑器,选择菜单中的File|New|Other...,在New Item中选择Service Application项,Delphi便自动为你建立一个基于TServiceApplication的新工程,TserviceApplication是一个封装NT服务程序的类,它包含一个TService1对象以及服务程序的装卸、注册、取消方法。
TService属性介绍:
AllowPause:是否允许暂停;
AllowStop:是否允许停止;
Dependencies:启动服务时所依赖的服务,如果依赖服务不存在则不能启动服务,而且启动本服务的时候会自动启动依赖服务;
DisplayName:服务显示名称;
ErrorSeverity:错误严重程度;
Interactive:是否允许和桌面交互;
LoadGroup:加载组;
Name:服务名称;
Password:服务密码;
ServiceStartName:服务启动名称;
ServiceType:服务类型;
StartType:启动类型;

事件介绍:
AfterInstall:安装服务之后调用的方法;
AfterUninstall:服务卸载之后调用的方法;
BeforeInstall:服务安装之前调用的方法;
BeforeUninstall:服务卸载之前调用的方法;
OnContinue:服务暂停继续调用的方法;
OnExecute:执行服务开始调用的方法;
OnPause:暂停服务调用的方法;
OnShutDown:关闭时调用的方法;
OnStart:启动服务调用的方法;
OnStop:停止服务调用的方法;


Windows 2000/XP/2003等支持一种叫做“系统服务程序”的进程,系统服务和桌面程序的区别是:
1、系统服务不用登陆系统即可运行;
2、系统服务是运行在System Idle Process/System/smss/winlogon/services下的,而桌面程序是运行在Explorer下的;
3、系统服务拥有更高的权限,系统服务拥有Sytem的权限,而桌面程序只有Administrator权限;
4、在Delphi中系统服务是对桌面程序进行了再一次的封装,既系统服务继承于桌面程序。因而拥有桌面程序所拥有的特性;
5、系统服务对桌面程序的DoHandleException做了改进,会自动把异常信息写到NT服务日志中;
6、普通应用程序启动只有一个线程,而服务启动至少含有三个线程。(服务含有三个线程: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在分发消息;

 
版权所有:唐山金万众科技有限公司  最佳浏览:1440*900分辩率    冀公网安备 13020302000819号
Copyright JWZ Science & Technology CO.,Ltd. All Rights Reserved 2006-2026