`

Delphi编写Windows NT中服务程序 

阅读更多
 Windows NT服务程序不同于一般的运行程序,它不需要NT登录进去,只需要开机进入NT系统便可以运行,一般用于系统服务方面的应用,学会编写NT服务程序对网络管理人员而言是非常重要的,Delphi作为一种高效、快速、强大的开发语言,为开发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);
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对象上加许多非可视化控件来与数据库关联,实现很多复杂的功能。
分享到:
评论

相关推荐

    一个NT服务程序的Delphi代码

    本篇文章将深入探讨如何使用Delphi编写NT服务程序。 首先,理解NT服务的基本概念至关重要。NT服务程序是Windows服务应用程序,它们通常在启动时自动运行,不受用户会话的影响。服务可以用于执行各种任务,如数据库...

    DELPHI创建NT服务程序.

    DELPHI创建NT服务程序是一种在Windows NT操作系统家族(包括Windows 2000, XP, Server 2003, Vista, Server 2008, 7, Server 2008 R2, 8, Server 2012, 8.1, Server 2012 R2, 10, Server 2016, 11, Server 2022等)...

    delphi服务程序3范例

    通过这三个范例,开发者不仅可以学习到Delphi中服务程序的基本构建方法,还能掌握如何管理和调试服务,从而提高在实际项目中的应用能力。对于那些想要深入了解Windows服务编程的Delphi开发者来说,这是一个宝贵的...

    Windows NT系统用户管理小程序..rar

    这个"Windows NT系统用户管理小程序"可能是用Delphi编程语言编写的,Delphi是Borland公司(现Embarcadero Technologies)推出的一种基于Object Pascal的集成开发环境(IDE),以其高效、快捷的开发流程而著名。...

    delphi编写PE加壳工具

    总结来说,使用Delphi编写PE加壳工具是一项涉及多方面知识的挑战,需要理解PE文件结构、内存管理、编码技术以及可能的API Hooking等。通过这样的工具,开发者可以提高程序的安全性,对抗恶意的逆向工程分析。

    delphi关闭NT.txt

    根据提供的文件信息,本文将详细解释如何在Delphi中实现对Windows NT操作系统的关闭功能,并对比Windows 9x系统中的不同之处。 ### Delphi关闭Windows NT的实现 #### 背景介绍 在Windows NT(包括后续版本如...

    svCOM Full Source 5.02 for Delphi 7

    《svCOM Full Source 5.02 for Delphi 7:深入解析Windows NT服务程序开发控件》 在软件开发领域,尤其是Windows平台下,有时我们需要创建后台运行的服务程序,这些程序不受用户界面的影响,可以持续运行并提供系统...

    Delphi 定时关机源码

    开发过程中,开发者需要使用Delphi的调试工具来测试代码的各个部分,确保在各种条件下都能正常工作,尤其是在不同版本的Windows NT系统上。 10. **代码结构和模块化**: 一个好的源码结构应该是清晰和模块化的,...

    Delphi 软件源码Delphi 软件源码Delphi 软件源码Delphi 软件源码Delphi 软件源码Delphi 软件

    这个压缩包中包含了多个使用Delphi编写的软件源码,涵盖了各种应用场景,如系统服务、网络功能、多媒体播放以及游戏开发等。通过学习和分析这些源码,开发者可以深入理解Delphi编程技巧,提升自己的技能。 1. **3x3...

    delphi 驱动级键盘记录

    - 在Windows系统中,驱动程序运行在内核模式,拥有更高级别的权限,能够直接访问硬件,包括键盘设备。 2. **Delphi在驱动开发中的应用** - Delphi提供了一个名为Jedi VCL for Delphi的库,其中包含了创建驱动程序...

    判断识别Windows版本(Delphi)..rar

    通过调用Windows API函数,Delphi程序可以获取到运行时的系统信息,包括操作系统版本、服务包级别、内核版本等。 在Delphi中,可以使用`SysUtils`单元中的`TOSVersion`记录类型和`GetOSVersionInfo`函数来获取这些...

    简单 Windows NT Service 的范例

    在Windows操作系统中,NT Service(NT服务)是一种后台运行的应用程序类型,它们可以在用户登录或注销之外的时间持续运行,提供持续的功能支持。本范例旨在教你如何开发一个简单的Windows NT Service,包括创建、...

    SSDT 查看 delphi源码

    标题“SSDT 查看 Delphi源码”涉及的是在Windows操作系统中使用System Service Descriptor Table (SSDT)来查看Delphi编写的程序源代码的技术。在Windows系统中,SSDT是系统服务的一个表,包含了所有内核模式驱动程序...

    delphiddk库delphi ddk开发

    通过包含这些头文件,开发者可以直接在Delphi代码中调用系统服务和驱动函数。 4. **驱动程序模型**:理解Windows的驱动程序模型(如WDM、KMDF、UMDF等)至关重要。这些模型定义了驱动程序的架构和通信方式,开发者...

    Delphi详细教程.7z

    本部分将讲解如何使用Delphi编写和安装NT服务。 通过这个教程,学习者不仅可以获得Delphi编程的全面知识,还能深入理解面向对象编程和Windows应用程序开发的原理。无论是对Delphi新手还是有一定经验的开发者,这个...

    Delphi获取操作系统版本号..rar

    在Delphi编程环境中,获取操作系统版本号是一项常见的任务,这对于编写具有特定系统需求或行为适应不同操作系统的应用程序至关重要。在Delphi中,我们可以利用Windows API(应用程序接口)来获取这些信息。API函数...

    李维-Delphi.5.X.ADO.MTS.COM+高级程序设计篇

    MTS是Windows NT/2000 Server上的一个服务,用于管理和协调分布式事务处理。它允许应用程序以事务的方式运行,确保在多组件协同工作时的数据一致性。MTS管理服务、资源和事务,使得应用程序可以轻松地实现复杂的业务...

    delphi Native_API

    使用这些Delphi单元,开发者可以方便地在Delphi程序中调用如CreateProcess、VirtualAlloc、CreateThread等Windows API函数,无需手动编写C语言风格的外部函数声明。这种方式提高了开发效率,同时也简化了跨平台代码...

    DELPHI 从注册表中读取各类硬件信息

    2. **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services**: 此处包含了所有驱动程序和服务的信息,可以从中获取硬件设备的驱动状态和版本。 3. **HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum**: 这个键...

Global site tag (gtag.js) - Google Analytics