下载本文示例代码
Delphi 编写Windows NT服务
1.产生一个Win32服务应用
产生一个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
top
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.
Delphi 编写Windows NT服务
1.产生一个Win32服务应用
产生一个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
top
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.
下载本文示例代码
Delphi 编写Windows NT服务Delphi 编写Windows NT服务Delphi 编写Windows NT服务Delphi 编写Windows NT服务Delphi 编写Windows NT服务Delphi 编写Windows NT服务Delphi 编写Windows NT服务Delphi 编写Windows NT服务Delphi 编写Windows NT服务Delphi 编写Windows NT服务Delphi 编写Windows NT服务Delphi 编写Windows NT服务Delphi 编写Windows NT服务Delphi 编写Windows NT服务Delphi 编写Windows NT服务
阅读(177) | 评论(0) | 转发(0) |