Подскажите, пожалуйста, ссылочки на документацию по работе со службами в VC++. В частности интересует как отключить, включить службу, узнать установлена, работает или не работает служба. Заранее благодарен.
Здравствуйте, AlexeyStaf, Вы писали:
AS>Подскажите, пожалуйста, ссылочки на документацию по работе со службами в VC++. В частности интересует как отключить, включить службу, узнать установлена, работает или не работает служба. Заранее благодарен.
http://gzip.rsdn.ru/?summary/2393.xml... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, AlexeyStaf, Вы писали:
AS>Подскажите, пожалуйста, ссылочки на документацию по работе со службами в VC++. В частности интересует как отключить, включить службу, узнать установлена, работает или не работает служба. Заранее благодарен.
Windows Services Manager
Здравствуйте, AlexeyStaf, Вы писали:
AS>Подскажите, пожалуйста, ссылочки на документацию по работе со службами в VC++. В частности интересует как отключить, включить службу, узнать установлена, работает или не работает служба. Заранее благодарен.
Вот примерный код (выдрал с некоторыми изменениями из своего исходничка). Модифицируй под свои нужды.
// имя требуемой службы
LPCTSTR g_service_name = TEXT("MyService");
// строка запуска службы
LPCTSTR g_filename = TEXT("c:\\winnt\\myservice.exe -service");
// запуск / остановка службы, возвращает true при успехе
bool ActivateService (bool fActivate)
{
if (!CheckVersion())
return false;
SC_HANDLE hscm = OpenSCManager(0, 0, SC_MANAGER_CONNECT);
if (hscm==0)
return false;
SC_HANDLE hsrv = OpenService(hscm, g_service_name, SERVICE_STOP | SERVICE_START);
if (hsrv==0)
{
CloseServiceHandle(hscm);
return false;
}
if (fActivate)
{
if (!StartService(hsrv, 0, NULL))
{
CloseServiceHandle(hsrv);
CloseServiceHandle(hscm);
return false;
}
}
else
{
SERVICE_STATUS sstatus;
if (!ControlService(hsrv, SERVICE_CONTROL_STOP, &sstatus))
{
CloseServiceHandle(hsrv);
CloseServiceHandle(hscm);
return false;
}
}
CloseServiceHandle(hsrv);
CloseServiceHandle(hscm);
return true;
}
//---------------------------------------------------------------------------
// возвращает true, если служба запущена
bool IsServiceStarted (void)
{
if (!CheckVersion())
return false;
SC_HANDLE hscm = OpenSCManager(0, 0, SC_MANAGER_CONNECT);
if (hscm == 0)
return false;
SC_HANDLE hsrv = OpenService(hscm, g_service_name, SERVICE_QUERY_STATUS);
if (hsrv == 0)
{
CloseServiceHandle(hscm);
return false;
}
SERVICE_STATUS sstatus;
if (!QueryServiceStatus(hsrv, &sstatus))
{
CloseServiceHandle(hsrv);
CloseServiceHandle(hscm);
return false;
}
CloseServiceHandle(hsrv);
CloseServiceHandle(hscm);
if (sstatus.dwCurrentState == SERVICE_RUNNING)
return true;
return false;
}
//---------------------------------------------------------------------------
// возвращает true, если служба установлена
bool IsServiceInstalled (void)
{
if (!CheckVersion())
return false;
SC_HANDLE hscm = OpenSCManager(0, 0, SC_MANAGER_CONNECT);
if (hscm == 0)
return false;
SC_HANDLE hsrv = OpenService(hscm, g_service_name, SERVICE_QUERY_STATUS);
if (hsrv == 0)
{
CloseServiceHandle(hscm);
return false;
}
CloseServiceHandle(hsrv);
CloseServiceHandle(hscm);
return true;
}
//---------------------------------------------------------------------------
// установка службы, возвращает true при успехе
bool InstallService (void)
{
if (!CheckVersion())
return false;
SC_HANDLE hscm = OpenSCManager(0, 0, SC_MANAGER_CREATE_SERVICE);
if (hscm == 0)
return false;
SC_HANDLE hsrv = CreateService(hscm, g_service_name, g_service_name, SERVICE_CHANGE_CONFIG, SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, g_filename, 0, 0, 0, 0, 0);
if (hsrv == 0)
{
CloseServiceHandle(hscm);
return false;
}
if (ChangeServiceConfig(hsrv, SERVICE_WIN32_OWN_PROCESS, SERVICE_AUTO_START, SERVICE_ERROR_NORMAL, g_filename, 0, 0, 0, 0, 0, g_service_name) == 0)
{
CloseServiceHandle(hsrv);
CloseServiceHandle(hscm);
return false;
}
CloseServiceHandle(hsrv);
CloseServiceHandle(hscm);
MessageBox(0, TEXT("Служба успешно установлена!"), TEXT("Внимание!"), MB_OK | MB_ICONINFORMATION);
return true;
}
//---------------------------------------------------------------------------
// удаление службы, возвращает true при успехе
bool UninstallService (void)
{
if (!CheckVersion())
return false;
SC_HANDLE hscm = OpenSCManager(0, 0, SC_MANAGER_CONNECT);
if (hscm == 0)
return false;
SC_HANDLE hsrv = OpenService(hscm, g_service_name, DELETE);
if (hsrv == 0)
{
CloseServiceHandle(hscm);
return false;
}
if (DeleteService(hsrv) == 0)
{
CloseServiceHandle(hsrv);
CloseServiceHandle(hscm);
return false;
}
CloseServiceHandle(hsrv);
CloseServiceHandle(hscm);
MessageBox(0, TEXT("Служба успешно удалена!"), TEXT("Внимание!"), MB_OK | MB_ICONERROR);
return true;
}
//---------------------------------------------------------------------------
bool CheckVersion (void)
{
OSVERSIONINFO ovi;
ovi.dwOSVersionInfoSize = sizeof(ovi);
GetVersionEx(&ovi);
if (ovi.dwPlatformId != VER_PLATFORM_WIN32_NT)
{
MessageBox(0, TEXT("Для работы программы в режиме сервиса требуется ОС Windows NT 4.0 или выше"), TEXT("Ошибка!"), MB_OK | MB_ICONERROR);
return false;
}
return true;
}
//---------------------------------------------------------------------------
... << RSDN@Home 1.1.4 beta 7 rev. 447>>