Использовать модуль данных в приложении-службе
Я написал приложение Win32 для тестирования и отладки. Я создал модуль данных со всеми функциями, необходимыми для запуска сокетов TCP и компонентов IBDatabase.
После успешного тестирования модуля данных в среде приложений Win32 я пытаюсь подключить модуль данных к созданному мной шаблону приложения-службы, и у меня не получится заставить его работать.
Может ли кто-нибудь указать, является ли эта стратегия использования модуля данных с функциональными возможностями компонента, инкапсулирующего основные сервисные функции, работоспособной, и привести простой пример шаблона, как его подключить, если он есть?
3 ответа
Вы должны создать и инициализировать свой модуль данных в событии запуска службы. Будьте осторожны, чтобы модуль данных не открывал диалоговые окна или тому подобное, или он зависал в ожидании ввода, который никогда не мог прийти (существуют способы заставить службу взаимодействовать с рабочим столом пользователя, но хороший сервис должен их избегать). Но не глядя на ваш код, трудно сказать, что происходит не так.
Как уже упоминали другие, да, это определенно возможно. Для моей реализации я на самом деле просто делаю свой модуль данных автоматически созданным в Project Options. Тогда мой сервисный код очень легкий и сводится к следующему:
procedure TMyService.ServiceStart(Sender: TService; var Started: Boolean);
begin
Started := myDataModule.Startup;
end;
procedure TMyService.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
myDataModule.Cleanup;
Stopped := True;
end;
Да, вы можете иметь DataModule, работающий в приложении-службе.
Это именно то, что мы имеем для наших серверов приложений среднего уровня.