Управление сервисом
Как из программы управлять сервисов
Получив его идентификатор...:D
После этого можно посылать ему управляющие сообщения используя например ControlService.
Кроме того можно использовать функцию 2Fh 1606 к примеру для остановки сервиса.
Как из программы управлять сервисов
Посмотри описание функции OpenSCManager, через нее ты можешь получить доступ к сервисам на компьютере и управлять их состоянием. Если у программы достаточно на это прав.
#define SCHED_TITLE TEXT("SYSTEM AGENT COM WINDOW")
#define SCHED_SERVICE_APP_NAME TEXT("mstask.exe")
#define SCHED_SERVICE_NAME TEXT("Schedule")
.....
SC_HANDLE hSC = NULL;
SC_HANDLE hSchSvc = NULL;
hSC = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
if (hSC == NULL)
{
return GetLastError();
}
hSchSvc = OpenService(hSC,
SCHED_SERVICE_NAME,
SERVICE_START | SERVICE_QUERY_STATUS);
CloseServiceHandle(hSC);
if (hSchSvc == NULL)
{
return GetLastError();
}
SERVICE_STATUS SvcStatus;
if (QueryServiceStatus(hSchSvc, &SvcStatus) == FALSE)
{
CloseServiceHandle(hSchSvc);
return GetLastError();
}
if (SvcStatus.dwCurrentState == SERVICE_RUNNING)
{
// The service is already running.
CloseServiceHandle(hSchSvc);
return ERROR_SUCCESS;
}
if (StartService(hSchSvc, 0, NULL) == FALSE)
{
CloseServiceHandle(hSchSvc);
return GetLastError();
}
CloseServiceHandle(hSchSvc);
return ERROR_SUCCESS;
}
Как из программы управлять сервисов
а что ты имеешь ввиду под управлением сервисом
если то что делает Менджер сервисов (остановка запуск и тд.)
то все это можно выполнить с помощью
консольных команд net start, net stop
также имеються соответствующие функции API
установка удаление сервиса /install, /uninstall
а передача каких либо команд своему сервису можно реализовать разными способами
например через сокеты, или именованные каналы
также возможно использование семафоров
и разделяемых областей памяти, т.е. можно
использовать любой из способов взаимодействия между процессами