#delphi #windows-services
#delphi #windows-services
Вопрос:
У меня возникли проблемы с запуском службы Windows. Каждый раз, когда он запускается в среде IDE, как служба или иным образом, в журнале событий Windows отображается ошибка с указанием:
«Процессу обслуживания не удалось подключиться к контроллеру службы».
При отладке я могу выполнить пошаговую ServiceCreate
процедуру, и я успешно выполняю печать в файл журнала. Однако у меня есть идентичный код (сохраните строку сообщения) в процедурах ServiceStart
or ServiceExecute
, и он, похоже, никогда не запускается.
Отладчик позволяет мне войти Application.CreateForm
, который сразу переходит к ServiceCreate
процедуре, но я не могу войти Application.Run
.
Есть идеи?
Редактировать: чтобы уточнить, я выполняю отладку, запуская службу Windows, а затем подключаюсь к процессу в Delphi во время ожидания, которое я добавил для запуска.
Редактировать 2: Хорошо, теперь это позволяет мне углубиться Application.Run
и узнать больше подробностей, где бы я ни захотел. Я отключил отладочные DCU. Думал, что просмотр кода VCL ничего не сделал, чтобы помочь мне понять, в чем проблема. Я до сих пор понятия не имею, как ServiceStart
или ServiceExecute
должны вызываться.
Комментарии:
1. ServiceStart или ServiceExecute вызываются в ответ на сообщения, отправляемые диспетчером управления службами
Ответ №1:
это единственное сообщение об ошибке, которое вы получаете? какой код у вас есть в разделе инициализации ваших pas-файлов? эта ошибка обычно возникает, когда возникает ошибка, и ваше приложение ее не улавливает. попробуйте зарегистрировать все события из приложения. кроме того, загляните в средство просмотра событий Windows для получения более подробной информации, связанной с этим.
Комментарии:
1. Итак, сейчас это работает. В итоге я начал с нуля, чтобы убедиться, что я обнаружил ошибки по мере их появления. (Большая часть кода находится в отдельной библиотеке, поэтому я просто подключил его к приложению-службе.) Похоже, что недостатки в основном заключались в том, что я делал предположения (рабочий каталог НЕ там, где запускается exe) и не улавливал ошибки на верхнем уровне.