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
事件处理程序退出。
我有 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
事件处理程序退出。