Я написал dll-сервис на c ++ с API функциями и работает должным образом.Я реализовал функцию ServiceMain()
как dllexport
, в которой вызывается функция RegisterServiceCtrlHandlerW()
для обработки входящих сигналов (например, остановка, пауза, ...) моего сервиса.
Все работает хорошо, и я определилвсе необходимые функции для запуска службы:
ServiceMain()
определено и RegisterServiceCtrlHandlerW()
вызывает внутри для регистрации обработчика управления. - Установите статус службы на
SERVICE_START_PENDING
, затем на SERVICE_RUNNING
для запуска службы. - Я реализовал
thread
для выполнения задач в качестве сервисных заданий и работы должным образом. - И я могу запустить и остановить мой сервис.
Мой сервис dll
, а не exe
, поэтому я использую svchost.exe
для его размещения, и я выполнил следующие шаги для регистрации в реестре Windows:
1.Я создаю новое значение в реестре как группу, чтобы представить мой сервис для svchost.exe
следующим образом:
2.Я создаю Parameters
подключ и заполняю значение моим dll (служебным файлом) следующим образом:
3.Также я определил значение (ServiceMain
) из-за того, что моя ServiceMain
функция была введена в svchost.exe
в качестве начальной точки.
Пока что мой сервис работает даже при выходе из системы НО когда я перезагружаю свой компьютер, после входа в Windows моя служба исчезла из Диспетчер служб Windows .На самом деле он удаляется из базы данных SCM .
Кстати, я установил свой сервис с помощью 3
методов.И я использую svchost.exe
как binarypath
для установки службы (потому что svchost.exe
ведет себя как хост для моей службы dll).Например, с помощью программы sc.exe
я установил binarypath
на svchost.exe
, чтобы косвенно запускать мой сервис с параметрами -k groupname
.
Моя проблема: Когда я перезагружаю систему, после входа в систему моя служба исчезает (удаляется). Пожалуйста, помогите мне решить эту проблему.