网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
Delphi编写Windows NT服务
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式

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

当你产生一个服务应用,你会在设计环境中看到一个窗口,它对应了一个服务 (Tservice)。在Object Inspector中设置它的属性和事件以实现它。在你的服务应用中可以加入其他的服务。不要将Service加入在一个非Service Application中。当加入一个TService对象时,因为服务,应用将不产生事件请求和使用合适的窗口调用。

2.TServiceApplication

TServiceApplication封装了windows NT Service Application。它提供服务应用的基本行为框架。它包含TService对象,每个Tservice封装了一个NT服务。 服务应用提供服务产生、安装、注册、分发和卸载的方法。

注意,不要在工程的uses列表中加入Forms或HtppApp,因为这些单元有些

Aplication变量有冲突。

3.TService

每个Tservice都有一个线程。

特性

AllowPause

AllowStop

Dependencies

DisplayName

ErrCode

ErrorSeverity

Interactive

LoadGroup

Param

ParamCount

Password

ServiceStartName

ServiceThread

ServiceType

StartType

Status

TagID

Terminated

WaitHint

Win32ErrCode

方法:

Create

Destroy

GetServiceController

LogMessage

ReportStatus

事件

AfterInstall

AfterUninstall

BeforeInstall

BeforeUninstall

OnContinue

OnExecute

OnPause

OnShutdown

OnStart

OnStop

4.样例

例子使用一个TserverSocket,端口设为80,这个例子将在c:\temp目录下产生一个文本文件,名字为WebLogxxx.log(xxx是线程IDThreadID)。看运行结果:启动程序,打开一个Web浏览器,键入localhost,等待浏览器将超时,然后在c:\temp中将有一个Weblogxxx.log文件。

interface

uses

Windows

Messages

SysUtils

Classes

Graphics

Controls

SvcMgr

Dialogs

ScktComp;

type

TService1 = class(TService)

ServerSocket1: TServerSocket;

procedure ServerSocket1ClientRead(Sender: TObject;

Socket: TCustomWinSocket);

procedure Service1Execute(Sender: TService);

private

{ Private declarations }

Stream: TMemoryStream;

public

function GetServiceController: PServiceController; override;

{ Public declarations }

end;

var

Service1: TService1;

implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;

begin

Service1.Controller(CtrlCode);

end;

function TService1.GetServiceController: PServiceController;

begin

Result := @ServiceController;

end;

procedure TService1.ServerSocket1ClientRead(Sender: TObject;

Socket: TCustomWinSocket);

var

Buffer: PChar;

begin

Buffer := nil;

while Socket.ReceiveLength > 0 do begin

try

Buffer := AllocMem(Socket.ReceiveLength);

Socket.ReceiveBuf(Buffer^

Socket.ReceiveLength);

Stream.Write(Buffer^

StrLen(Buffer));

finally

FreeMem(Buffer);

end;

Stream.Seek(0

soFromBeginning);

Stream.SaveToFile(''c:\Temp\Weblog'' + IntToStr(ServiceThread.ThreadID) + ''.lo

'');

end;

end;

procedure TService1.Service1Execute(Sender: TService);

begin

Stream := TMemoryStream.Create;

try

ServerSocket1.Port := 80; // WWW port

ServerSocket1.Active := True;

while not Terminated do begin

ServiceThread.ProcessRequests(False);

end;

ServerSocket1.Active := False;

finally

Stream.Free;

end;

end;

end.

网学推荐

免费论文

原创论文

浏览:
设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
湘ICP备09003080号