我有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服务的预期行为?
答案 0 :(得分:2)
服务OnExecute
事件在服务启动后被调用。因此,根据定义,您的OnExecute
事件处理程序(ServiceExecute()
)在服务已经处于“正在运行”状态时正在运行。
您应该使用OnStart
事件来初始化服务。服务将处于“正在启动”状态,直到OnStart
事件处理程序退出为止。