| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> delphi >> 网络开发 >> 文章正文
运用Delphi编写Windows NT中服务程序            【字体:
运用Delphi编写Windows NT中服务程序
作者:不祥    文章来源:-    点击数:    更新时间:2006-12-12

运用Delphi编写Windows NT中服务程序

湖北省荆州市
胡佩敏

---- Windows NT服务程序不同于一般的运行程序,它不需要NT登录进去,只需要开机进入NT系统便可以运行,一般用于系统服务方面的应用,学会编写NT服务程序对网络管理人员而言是非常重要的,Delphi4.0作为一种高效、快速、强大的开发语言,为开发NT服务程序提供了非常便捷的方法,加上其可视化界面以及与数据库的完美结合,使我们开发与数据库有关的NT服务程序变得非常简单,下面以编写一个NT定期备份程序为例,介绍如何运用Delphi编写Windows NT的服务程序。

---- 打开Delphi编辑器,选择菜单中的File|New,在New Item中选择Service Application项,Delphi便自动为你建立一个基于TServiceApplication的新工程,TserviceApplication是一个封装NT服务程序的类,它包含一个Tservice1对象以及服务程序的装卸、注册、取消方法。

---- 将Tservice1对象的属性做下列更改:



DisplayName与Name改为:DataBackup,

ServiceStartName属性改为系统管理员

用户(如DOMAIN\Administrator)和Password则输入用户密码

---- 这样,服务程序运行时将自己以该用户的权限操作NT。

---- 这样,一个NT服务程序编写已经完成,在Delphi编辑器中选择菜单Run|Parameters,在Parameters中输入/install,程序编译运行后,一个名为DataBackup的NT服务程序已经安装好,你可以双击控制面板中的服务项目,将会看到此服务程序,只是此服务程序没有任何东西而已;在Delphi编辑器中选择菜单Run|Parameters,在Parameters中输入/uninstall,程序编译运行后,系统将会将此服务程序卸掉。

---- 服务程序是通过控制一个线程的生成、暂停、继续、停止来达到服务目的的,因此我们必须加入一个Tsession对象来编写文件自动备份代码,在Delphi编辑器中选择菜单中的File|New,在New Item中选择Thread Object项,Delphi会提示你为该Tsession对象输入一个名称(输入DataCopy),Delphi便生成了一个基于Tsession的DataCopy对象,并提供了一个Execute过程供重载,我们要Execute过程中输入以下程序:



var

Hour, Min, Sec, MSec: Word;

TimeStamp,DirectoryEdit1,DirectoryEdit2:String;

SearchRec: TSearchRec;

Source,Temp,Dest:Pchar;

F,F1:THandle;

FF,FF1:WIN32_FIND_DATA;

Begin

{每次文件备份执行时间}

TimeStamp:='12:00';

{文件备份源目录}

DirectoryEdit1:='C:\temp';

{文件备份目录}

DirectoryEdit2:='C:\temp1';

while True do

begin

DecodeTime(Time,Hour, Min, Sec, MSec);

IF Trim(TimeStamp)=Format

('%-2.2d:%-2.2d',[Hour,Min]) then

begin

GetMem(Source,250);

GetMem(Dest,250);

GetMem(Temp,250);





StrPcopy(Dest,DirectoryEdit2+'\

'+FormatDateTime('YYYYMMDD',Date));

CreateDirectory(Dest,nil);

IFFindFirst(DirectoryEdit1+'\*.*',faAnyFile,

SearchRec)=0 then

begin

repeat

StrPcopy(Source,DirectoryEdit1+'\'+SearchRec.Name);





StrPcopy(Dest,DirectoryEdit2+'\'

+FormatDateTime('YYYYMMDD',Date)+'\'+SearchRec.Name);

copyfile(Source,Dest,False);

until FindNext(SearchRec)<>0;

end;

SysUtils.FindClose(SearchRec);

FindClose(F);

FreeMem(Source,250);

FreeMem(Dest,250);

FreeMem(Temp,250);

end;

sleep(60000);

end;





end;

---- 此线程执行时每隔一分钟将检查一次时间,看是否到了备份时间,如果是则将DirectoryEdit1中的所有文件拷到DirectoryEdit2目录中去。

---- 现在编写服务控制DataCopy线程的代码,在TdataBackup对象中的OnStart、OnStop、OnPause、OnContinue事件中分别输入如下代码:



procedure TDataBackup.DataBackupStart

(Sender: TService;

var Started: Boolean);

begin

DataThread:= TDataCopy.Create(False);

Started := True;

end;





procedure TDataBackup.DataBackupStop

(Sender: TService;

var Stopped: Boolean);

begin

DataThread.Terminate;

Stopped := True;

end;





procedure TDataBackup.DataBackupPause

(Sender: TService;

var Paused: Boolean);

begin

DataThread.Suspend;

Paused := True;

end;





procedure TDataBackup.DataBackupContinue

(Sender: TService;

var Continued: Boolean);

begin

DataThread.Resume;

Continued := True;

end;

[1] [2] 下一页  

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • 用Delphi编写CGI程序返回图象

  • Email 服务器的简单实现

  • Delphi多层应用程序的实现

  • Delphi4.0 开发WEBMAIL程序

  • Delphi中串行通信的实现

  • 提高客户机/服务器应用系统性…

  • 在程序中动态取得Win95/98网…

  • 链接的视觉效果

  • 打开拨号连接

  • 用Delphi 3.0实现运行于浏览…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |