// 文件备份目录
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);
IF FindFirst(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;
这样一个文件自动备份程序已经完成,编译好后,加上/install参数执行程序,系统会将此服务程序安装,由于服务程序中StartType属性为stAuto,NT每次启动时,此程序自动执行,你可以在控制面板中的服务项目来启动、暂停、恢复、停止它,也可以加上/uninstall参数执行程序来卸掉它。通过上述例子我们可以看到,用Delphi编写NT服务器程序十分方便,而且你也可以在TService对象上加许多非可视化控件来与数据库关联,实现很多复杂的功能。