Удаление службы из базы данных SCM

октября 12 2009 by admin in Службы

Хороший программный пакет должен поддерживать не только свою установку, но и удаление из системы. Поэтому вам нужно знать и об удалении службы. Удаляемую службу нужно сначала открыть:
SC_HANDLE OpenService( SC_HANDLE hSCManager, PCTSTR pszInternalName, DWORD dwDesiredAccess);
В функцию OpenService нужно передать описатель, полученный от функции OpenSCManager, внутреннее имя службы (то, что вы указывали в параметре pszServiceName функции CreateService) и DELETE в качестве вида доступа. После этого вы получите описатель службы и сможете ее удалить, передав этот описатель в функцию DeleteService-.
BOOL DeleteService(SC_HANDLE hService);
На самом деле DeleteService не удаляет службу сразу, а лишь помечает для удаления. SCM удалит эту службу только после завершения ее работы и закрытия всех открытых ее описателей.
В свои служебные исполняемые файлы я включаю возможность удаления служб из базы данных SCM. Если в командной строке указан ключ «-lemove», я вызываю функцию ServiceRemove.