Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Устранение ошибки "service name not found" при работе с Windows Service в Delphi

Delphi , ОС и Железо , Windows

При разработке сервисов Windows в Delphi пользователи иногда сталкиваются с проблемой, когда сервис не запускается, и в консоли появляется ошибка "service name not found". В данной статье мы рассмотрим типичные проблемы, которые могут привести к такой ошибке, и шаги по их устранению.

Проблема и её описание

Разработчик создал новый проект Windows Service с использованием мастера, добавил некоторый код, скомпилировал проект, запустил его с параметром /INSTALL, но попытка запуска сервиса командой net start myservice привела к ошибке "service name not found". При попытке запуска через Панель управления в разделе Сервисы, ссылка "Start" приводит к зависанию окна запуска на 50% прогресс-бара. В тестовых целях был добавлен Timer, который должен был выводить текущее время каждую минуту.

Анализ кода

В файле DPR присутствует стандартный код инициализации приложения:

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

В файле PAS определены процедуры и функции управления сервисом, в том числе ServiceStart, где запущен Timer1 и бесконечный цикл обработки запросов:

procedure TZeusUpdateService.ServiceStart(Sender: TService; var Started: Boolean);
begin
  Timer1.Enabled := True;
  while not Terminated do ServiceThread.ProcessRequests(True);
  Timer1.Enabled := False;
end;

Подтвержденный ответ и устранение проблемы

В коде сервиса обнаружены следующие ошибки:

  1. В событии ServiceStart присутствует бесконечный цикл, который должен выполняться в событии OnExecute, а не ServiceStart.
  2. Вызов ShowMessage в сервисе не допустим, так как сервисы не могут взаимодействовать с пользовательским интерфейсом.

Чтобы исправить проблему, необходимо перенести бесконечный цикл обработки запросов в событие OnExecute и использовать невизуальные механизмы для обратной связи.

Шаги по исправлению

  1. Удалите бесконечный цикл из события ServiceStart. Если сервис не выполняет никаких действий в фоновом режиме, то OnExecute можно не определять, и сервис будет автоматически обрабатывать запросы от SCM.
  2. Уберите вызов ShowMessage, так как он не работает в сервисах.
  3. Активируйте TTimer в событии ServiceStart и деактивируйте его в событии OnStop.

Альтернативный подход

Вместо бесконечного цикла можно использовать периодический вызов функции ProcessRequests(False) с ожиданием через Sleep() для предотвращения загрузки процессора.

Дополнительные ресурсы

Используя эти рекомендации, вы сможете устранить ошибку "service name not found" и успешно запустить ваш сервис Windows в Delphi.

Создано по материалам из источника по ссылке.

Устранение ошибки 'service name not found' при работе с Windows Service в Delphi включает корректировку кода инициализации сервиса и перемещение бесконечного цикла обработки запросов в событие `OnExecute`.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Windows ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-08-11 18:13:46/0.025010108947754/1