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

Delphi编写系统服务七:完成端口演示  在开发大量Socket并发服务器,完成端口加重叠I/O是迄今为止最好的一种解决方案,下面是简单的介绍:   “完成端口”模型是迄今为止最为复杂的一种I/O模型,特别适合需要同时管理为数众多的套接字,采用这种模型,往往可以达到最佳的系统性能。但是只适合Windows NT和Windows 2000及以上操作系统。因其设计的复杂性,只有在你的应用程序需要同时管理数百乃至上千套接字的时候,而且希望随着 阅读详情
--- 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; 

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


DELPHI创建NT服务程序. 很好用,很实的文档,是DELPHI开发服务说明性文档 立即下载

相关推荐

一个NT服务程序的Delphi代码

一个标准的NT服务程序 Delphi 代码

Delphi开发NT Service程序

  Windows系统中有许多服务程序,他们最大的优点是,如何机器重启了,那么无需登陆系统,服务已经重新启动.这样就保证了一些后台服务器的无人值守.那么在Delphi又为开发这种程序准备了什么呢?  开发NTService程序   File->New->Other->New->Service Application   NTService程序最大的一个特点是,如果被设置成自启动,那么如果机器出现问

敦格 2209

32位MIPS流水线CPU设计

32位MIPS流水线CPU设计(vivado)

m0_51320209的博客 3199

delphi NT服务程序制作

NT 服务程序在系统启用后就开始工作了,即使没有用户登录。 用delphi做nt程序也很简单了,new-> other -> new页签 --> service Application. 便会生成一个NT服务框架,TserviceApplice . 默认生成1个 Tservice . 一个NT服务框架可以生成很多service ,一个service 代表一个服务。 设置 Tservice 实例的

云中雁012345之成长 784

01-FreeSWITCH 的安装、部署、配置以及可能遇到的问题和解决方法

一文让您了解从FreeSWITCH 的安装、部署、配置、可能遇到的问题及解决方法。一切从实际项目出发,以工程应用为目的。

秋风的博客 2127

NX二次开发(python)-坯料尺寸(一)

一般在产品制造过程中,往往要判断一个模型在出模方向上的最小包容盒尺寸,在NX中可以用坯料尺寸命令实现,当然也有相应的代码实现,这或许可以帮助我们实现一些产品的坯料尺寸批量输出,节省人力。

dasfanfan的博客 816

Delphi编写Windows系统服务程序【转帖】

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

陈昊廷的专栏 980

VMFS数据存储(datastore)丢失后恢复步骤

vmfs datastore恢复步骤

jetliu05的博客 3267

Delphi小巧的Windows NT服务程序源码

program DemoSrv; // Windows NT Service Demo Program for Delphi 3 // By Tom Lee , Taiwan , Repubilc of China ( Tomm.bbs@csie.nctu.edu.tw ) // JUL 8 1997 // ver 1.01 // The service will beep every 10 se...

weixin_30924087的博客 352

基于MS5351的三通道可编程时钟发生器设计

时钟发生器是数字系统时序验证与信号完整性测试的核心基础设备,其原理基于锁相环(PLL)对参考晶振进行倍频与分频控制,通过寄存器配置实现多路独立频率输出。技术价值体现在高精度、低抖动、快速切换与工程可部署性之间取得平衡,尤其适用于FPGA/ASIC参考时钟调试、ADC/DAC采样时钟验证及嵌入式硬件时序裕量评估等场景。本方案采用MS5351三通道时钟芯片与ESP32主控协同架构,在保证LVCMOS输出质量与I²C可编程性的前提下,优化电源噪声抑制、晶体负载匹配和跨板信号完整性,兼顾成本、周期与实测稳定性,为实

weixin_31715353的博客 210

Palantir的本体论建模跟数仓建模的异同

Palantir的Foundry Ontology通过构建组织的数字孪生体,将数据集和模型映射为对象类型、属性、链接和操作类型,形成完整的语义知识网络。与传统数仓建模相比,本体建模以业务问题为驱动,强调细粒度语义和实时决策能力,采用图语义技术实现灵活的映射关系。

轩哥的个人研究和成长记录 1588

NT服务程序

请先看一个例子: unit AppService; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, ShellAPI, ExtCtrls; { TService是一个封装NT服务程序的类, 它的对象包含对服务的装卸、注册、取消

折翼飞翔 2619

第四节:Vben Admin登录对接后端getUserInfo接口

上一节,我们完成了/api/auth/login接口的创建,通过login接口,我们完成了登录和Token的生成。但是登陆还是报404返回,发现是Vben Admin又请求了一个/api/getUserInfo接口,本节我们就来分析完成这个接口本节,我们完成了getUserInfo接口,完成了登录操作,成功的进入到工作台页面。

cuiwin的专栏 2845

Delphi编写Windows NT中服务程序 

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

Heck's blog 186

RTOS与Linux功能差异与应用场景全面对比

在嵌入式系统的开发中,操作系统的选择至关重要。和是两种广泛应用的操作系统,它们在功能、设计目标以及应用领域中各具优势。随着嵌入式系统的不断发展,已成为嵌入式行业的大趋势。那么,这两者到底有什么不同呢?

硬核科技 400

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

用DELPHI进行NT、2000、2003服务程序的调试

NT服务程序的调试----------摘自书籍Delphi 6 应用开发指南 有两种途径可用于调试服务程序。第一种是在单独的类中定义服务的工作部分,并在一个单独的程序中对其进行调试。第二种是在服务运行时进行调试。第一种途径是个好主意;把负责服务工作的类添加到通常的程序是测试服务行为的最容易的方法,而且保持了与工作台测试的思想的一致性。 我们使用第一种方法,在创建ServiceApp 和TestMa

MKing's Blog 3267

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Delphi 编写Windows NT服务

Delphi 编写Windows NT服务 1.产生一个Win32服务应用   产生一个Win32服务应用,选择File|New菜单,在New Items页中选择Service Application。这样在你的工程里加入一个全局变量命名的应用,它是 TserviceApplication类型。每个服务工程自动的声明一个TServiceApplication 实例,并不需要直接

lee576的专栏 1732

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

利用DELPHI编写WINDOWS外壳

 利用DELPHI编写WINDOWS外壳    对于操作系统原理比较了解的朋友都会知道,一个完备的操作系统都会提供一个外壳(Shell),以方便普通用户使用操作系统提供的各种功能。Windows(在这里指的是Windows 95/Windows NT4.0以上版本的操作系统)的外壳不但提供了方便美观的GUI图形界面,而且还提供了强大的外壳扩展功能,大家可能在很多软件中看到这些外壳扩

柴门的编程学习基地 1062

局域网中文件夹的共享 Windows NT/2000/XP

局域网中文件夹的共享 Windows NT/2000/XP在局域网中通过程序实现文件夹的共享,就我知道的应该至少有两种实现方式。一是修改注册表,但是这种方法存在的问题也是很明显的,必须重起机器才能生效。二就是利用 Windows Api函数 NetShareAdd ,通过这个函数我们可以很容易的实现文件夹的共享,而且无需重起计算机。使用这个函数时我们必须注意的是在 Windows NT/200

smandhgx的专栏 4117

如何在Delphi中编写控制面板程序

摘要:   对计算机的运行环境的配置有多种方法,而在WINDOWS 9X/NT中引入了一种新的方法,即控制面板。利用控制面板配置环境,方便直观。本文详细地介绍了控制面板程序的原理和编写方法,并给出了用Delphi4.0编写的一个实际例子。 关键字:   控制面板程序、动态链接库、消息处理、注册表 前言:   我们在编写软件时,有的时候需要用户对应用环境进行参数设置。常见的做法有编写一个安装程序,在

thinkray的专栏 1119

Delphi Windows系统服务控制与监视

有时候我们为了程序能稳定运行会把程序写成系统服务里,并监控它的状态,以下就是关于Delphi 的相关示例代码。

众纳百川的博客 667

用DELPHI编写NT服务时,如何指定依存关系?

Q:我用DELPHI编写了一个NT的服务,且设置为自动启动,可每次服务器重启后,该服务不能自动启动。我感觉是由于该服务启动时使用了sqlserver数据库,可能由于sqlserver服务没有启动完成,导致该服务无法启动,所以我想指定该服务的依存关系,让它在sqlserver服务启动完毕后再启动,如何做?A:方法一、procedure TFooParserService.Servi...

weixin_30666401的博客 77
上一篇: Delphi的TService的輸入桌面切換(服务程序)
下一篇: CallNextHookEx
Dcdu
博客等级 码龄21年 44粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值