Delphi Windows 服务 - 在启动服务之前等待较长的任务完成

Delphi Windows Service - Wait for long task to complete before starting the service

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

创建数据模块的代码已写入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 服务管理器中将是 starting,但在点击 [= 后几秒钟内显示为 running 18=] 按钮。

我是不是遗漏了什么,或者这是 Windows 服务的预期行为?

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

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