编写服务呢
民生理财 2021-08-24 13:36 字号: 大 中 小
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目录下产生一个文本文件,名字为g(xxx是线程IDThreadID)。看运行结果:启动程序,打开一个Web浏览器,键入localhost,等待浏览器将超时,然后在c:\\temp中将有一个g文件。
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
ntroller(CtrlCode);
end;
function tServiceController: PServiceController;
begin
Result := @ServiceController;
end;
procedure rverSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Buffer: PChar;
begin
Buffer := nil;
while ceiveLength 0 do begin
try
Buffer := AllocMem(ceiveLength);
ceiveBuf(Buffer^, ceiveLength);
ite(Buffer^, StrLen(Buffer));
finally
FreeMem(Buffer);
end;
ek(0, soFromBeginning);
veToFile(c:\\Temp\\Weblog + IntToStr(readID) + .lo
);
end;
end;
procedure rvice1Execute(Sender: TService);
begin
Stream := eate;
try
rt := 80; // WWW port
tive := True;
while not Terminated do begin
ocessRequests(False);
end;
tive := False;
finally
ee;
end;
end;
end.
查看本文来源
十大铝门品牌有哪些杭州治疗男科医院
呼和浩特早泄哪家好
-
-
瓜帅真拼了连换两中卫死守曼城六后卫也怂得
瓜帅真拼了!连换两中卫死守 曼城六后卫也怂得住瓜帅在伤停...
2020-07-09 | 民生理财
-
-
宋一彤深入驻村点结对帮扶户开展节前慰问活
宋一彤深入驻村点、结对帮扶户开展节前慰问活动本消息 在春...
2019-07-16 | 民生理财
-
-
青岛今年以来旅游招商不断提速
青岛今年以来旅游招商不断提速单体投资逾5000万元 旅游项目...
2019-07-16 | 民生理财
-
-
不等不靠自强不息谋求脱贫
不等不靠 自强不息 谋求脱贫天全县残疾人谢良秀 “只要努力...
2019-07-15 | 民生理财
-
-
我县315农村党务村务公开工作安排会
我县“3.15”农村党务、村务公开工作安排会2月22日,我县在县...
2019-07-07 | 民生理财
-
-
2017四川省暨成都市公祭烈士活动在成都
2017·四川省暨成都市公祭烈士活动在成都市烈士陵园隆重举行...
2019-07-06 | 民生理财