Создание службы Windows в Delphi - PullRequest
6 голосов
/ 19 мая 2011

Я создал службу 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, однако, если я устанавливаю его как службу, он не работает, так как Application.Run ничего не делает

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

Спасибо

Ответы [ 3 ]

8 голосов
/ 19 мая 2011

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

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

4 голосов
/ 19 мая 2011

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

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

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

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

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

1 голос
/ 20 мая 2011

Существует коммерческое решение , разработанное специально для упрощения процесса отладки сервисов.Вы можете отладить свой код непосредственно из среды разработки Delphi, включая событие OnStart службы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...