Создание службы Windows в delphi

Я создал службу windows в delphi. Мой код запускается в ServiceExecute

procedure TMyService.ServiceExecute(Sender: TService);
 while not Terminated do
 begin
      CallSomeProcedure;  
      Sleep(1000);
      ServiceThread.ProcessRequests(false);
 end;
end;

к сожалению, я не могу запустить этот код. Кажется,я не вызываю процедуру, даже когда я отлаживаю. Код В служба MyService.EXE-файл выглядит следующим образом.

begin 
    if not Application.DelayInitialize or Application.Installing then
       Application.Initialize;
    Application.CreateForm(TMyService, MyService);
    Application.Run;
end.

Я могу запустить serviceExecute, если я добавлю

MyService.ServiceExecute(nil);

В служба MyService.exe однако, если я устанавливаю его как службу, он, похоже, не работает как приложение.Run делает ничего!--4-->

не уверен, что я делаю неправильно, но любая помощь будет высоко ценится.

спасибо

3 ответов


вы не можете просто запустить службу из IDE для ее отладки; в этом случае она просто выйдет. Служба должна быть запущена диспетчером управления службами. Кроме того, вы не должны вызывать ServiceExecute напрямую.

здесь документация как отлаживать сервисы.


Если вы создали сервис, вы можете установить его, запустив его с параметром /install

после этого служба должна отображаться между вашими другими службами (перейдите в start/run/ и вводим services.msc).

затем вы можете запустить его, и вы можете отлаживать его, прикрепив к нему отладчик.

- больно так. Не могу поверить, что некоторые люди действительно так работают. У меня обычно есть вся моя бизнес-логика в отдельных единицах, которые я могу запустить из "нормального" приложения. Только когда это сработает хорошо, я заверну его в сервис и попробую это.

иногда я даже создаю приложение, которое может работать как в качестве службы, так и с GUI. Вы можете просто создать экземпляр класса обслуживания. Вам просто нужно запустить его самостоятельно, но это будет намного проще отладить.


здесь коммерческое решение это было разработано специально для упрощения процесса отладки службы. Ты можешь!--3-->отладки кода непосредственно из среды IDE Delphi, включая событие OnStart службы.