读书人

服务程序有关问题

发布时间: 2012-02-28 13:06:34 作者: rapoo

服务程序问题
我用delphi写了一个服务程序,开机自动启动,但是却关不了机了,请问要在关机的时候自动关闭该服务应该怎么来做呀。

[解决办法]
一般是由于循环或者其它操作导致服务线程被阻塞
你可以用类似代码,
让服务线程时不时响应一下控制指令,或者报告状态

procedure TService1.ServiceShutdown(Sender: TService);
begin
Status := csStopped;
ReportStatus();
end;

procedure TService1.ServiceExecute(Sender: TService);
begin
while not Terminated do
begin
.......
ServiceThread.ProcessRequests(False);
end;
end;

[解决办法]
服务没有退出吧 你可以参考一下下面的代码 这里可以直接在 管理器里面手动退出 当然 系统关机的时候自然也会退出

服务执行代码:
procedure TMyService.ServiceExecute(Sender: TService);
begin
while not(self.Terminated) do
begin
......
end;
end;
服务退出的代码
首先重载函数 function GetServiceController: TServiceController; override;
其实现如下:

function TMyService.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
ServiceController函数如下:
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
MyService.Controller(CtrlCode);
if CtrlCode=SERVICE_CONTROL_STOP then
begin
MyService.DoStop;
end;
end;

这样就ok啦:)

读书人网 >.NET

热点推荐