Функция StartServiceA (winsvc.h)
Запускает службу.
Синтаксис
BOOL StartServiceA(
[in] SC_HANDLE hService,
[in] DWORD dwNumServiceArgs,
[in, optional] LPCSTR *lpServiceArgVectors
);
Параметры
[in] hService
Дескриптор службы. Этот дескриптор возвращается функцией OpenService или CreateService и должен иметь право доступа SERVICE_START. Дополнительные сведения см. в
[in] dwNumServiceArgs
Количество строк в массиве lpServiceArgVectors
[in, optional] lpServiceArgVectors
Строки, завершаемые значением NULL, передаются в функцию serviceMain
Службы драйверов не получают эти аргументы.
Возвращаемое значение
Если функция выполнена успешно, возвращаемое значение ненулевое.
Если функция завершается ошибкой, возвращаемое значение равно нулю. Чтобы получить расширенные сведения об ошибке, вызовите GetLastError.
Следующие коды ошибок можно задать диспетчером управления службой. Другие пользователи могут задаваться функциями реестра, которые вызываются диспетчером управления службами.
Возвращаемый код | Описание |
---|---|
|
Дескриптор не имеет права доступа SERVICE_START. |
|
Дескриптор недопустим. |
|
Не удалось найти двоичный файл службы. |
|
Экземпляр службы уже запущен. |
|
База данных заблокирована. |
|
Служба зависит от службы, которая не существует или помечена для удаления. |
|
Служба зависит от другой службы, которая не удалось запустить. |
|
Служба отключена. |
|
Служба не была запущена из-за сбоя входа. Эта ошибка возникает, если служба настроена для запуска в учетной записи, которая не имеет права на вход в качестве службы. |
|
Служба помечена для удаления. |
|
Не удалось создать поток для службы. |
|
Процесс службы был запущен, но он не вызывал StartServiceCtrlDispatcherили поток, вызывающий StartServiceCtrlDispatcher, может быть заблокирован в функции обработчика управления. |
Замечания
При запуске службы драйверов функция StartService не возвращается до завершения инициализации драйвера устройства.
При запуске службы диспетчер управления службами (SCM) создает процесс службы при необходимости. Если указанная служба предоставляет общий доступ к процессу с другими службами, необходимый процесс может уже существовать. Функция StartService не ожидает первого обновления состояния из новой службы, так как может занять некоторое время. Вместо этого он возвращается, когда SCM получает уведомление от диспетчера управления службами, что поток ServiceMain для этой службы был успешно создан.
SCM задает следующие значения состояния по умолчанию перед возвратом из StartService:
- Текущее состояние службы имеет значение SERVICE_START_PENDING.
- Элементы управления, принятые, не заданы (ноль).
- Значение CheckPoint равно нулю.
- Время WaitHint имеет значение 2 секунды.
Служба не может вызывать StartService во время инициализации. Причина в том, что SCM блокирует базу данных управления службой во время инициализации, поэтому вызов StartService будет блокироваться. После успешного запуска службы в SCM он может вызывать StartService.
Как и ControlService, StartService блокируется в течение 30 секунд, если любая служба занята обработкой кода элемента управления. Если служба занята по-прежнему не возвращается из функции обработчика, когда истекает время ожидания, StartService завершается сбоем с ERROR_SERVICE_REQUEST_TIMEOUT. Это связано с тем, что SCM обрабатывает только одно уведомление об управлении службой за раз.
Примеры
Пример см. в разделе Запуск службы.
Заметка
Заголовок winsvc.h определяет StartService как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора ЮНИКОД. Сочетание использования псевдонима, нейтрального для кодирования, с кодом, не зависящим от кодирования, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в соглашениях о прототипах функций.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows XP [только классические приложения] |
минимальный поддерживаемый сервер | Windows Server 2003 [только классические приложения] |
целевая платформа | Виндоус |
заголовка | winsvc.h (включая Windows.h) |
библиотеки |
Advapi32.lib |
DLL | Advapi32.dll |
См. также
QueryServiceDynamicInformation
запуска службы