Delphi Windows服务-等待较长的任务完成,然后再启动服务

时间:2020-11-02 07:58:28

标签: delphi windows-services

我有Delphi Windows Service应用程序,该服务创建了一个数据模块并初始化了一些内存表。

用于创建数据模块的代码已写入ServiceExecute事件处理程序中

procedure TMyService.ServiceExecute(Sender: TService);
begin
    if dm_Global = nil then
        dm_Global := Tdm_Global.Create( Application );

    while NOT Terminated do
    begin
        ServiceThread.ProcessRequests( True ); // if false add sleep(1000)
    end;
end;

创建dm_Global会花费一些时间(大约1分钟),因为它会填充一些内存表。

我已经安装并运行了该服务。我期待的是,由于创建dm_Global会花费一些时间,因此服务状态在Windows Service Manager中将为starting,但是在按下running按钮后的几秒钟内会显示为Start

我丢失了某些东西还是Windows服务的预期行为?

1 个答案:

答案 0 :(得分:2)

服务OnExecute事件在服务启动后被调用。因此,根据定义,您的OnExecute事件处理程序(ServiceExecute())在服务已经处于“正在运行”状态时正在运行。

您应该使用OnStart事件来初始化服务。服务将处于“正在启动”状态,直到OnStart事件处理程序退出为止。