![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Остановка сервиса [D7, Win2k, WinXP]
pavel_guzhanov © (2004-10-29 16:21:00)Подскажите, как можно программно остановить сервис? Дело в том, что моя программа - сервис. Она получает команды через telnet. Одна из команд - stop, а вот как по ней остановить программу - не знаю. Помогите, кто в курсе. Application.Terminate - не катит
Erik1 (2004-10-29 19:50:00) [1]Думаю тебе надо другое, если твой сервис хочет сам себя остановить то: Останови свой тред(если есть) и сделай ему free. Останови основной цикл сервиса например установкой флага.
pavel_guzhanov (2004-10-29 16:52:00) [2]ух ты! Спасибо! Буду пробовать
Дмитрий Ботвин (2004-10-29 16:51:00) [3]Вот так:
Uses Winsvc;
procedure TForm1.ExecuteControlService(ServiceName: String);
var
SCManagerHandle, SCHandle : THandle;
ServiceStatus : TServiceStatus;
begin
// 1. Подключениемся к менеджеру сервисов
SCManagerHandle := OpenSCManager(PChar(CompName.Text), nil, GENERIC_READ);
// 2. Открытие сервиса
SCHandle := OpenService(SCManagerHandle, PChar(ServiceName), SERVICE_ALL_ACCESS);
// 3. Управление состоянием
ControlService(SCHandle, SERVICE_CONTROL_STOP, ServiceStatus);
// 4. Закрытие сервиса
CloseServiceHandle(SCHandle);
// 5. Закрытие менеджера
CloseServiceHandle(SCManagerHandle);
end;