Кусок из функции ControlServiceAndWait:
// посылаем команду управления
if (!ControlService(hService, dwControl, &Status))
return FALSE;
Если сервис не запущен но установлен, будет возвращён NULL.
GetLastError вернёт в этом случае ERROR_SERVICE_NOT_ACTIVE.
Это я к тому, что сразу FALSE возвращать не надо.