Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];
ВнизЗавершить сервис Найти похожие ветки
← →
ВГГ (2007-04-12 21:58) [0]Есть сервис, хочу завершить, его при нажатии кнопки ОК,
на нее вешаю ExitThread(0); неработает!
Пробывал подать в SetServiceStatus с флагом стоп, тоже ничего,
он должен подать менежу службу о прибивке моего сервиса,
но жует табак и игнорирует.
Для проверки перед ExitThread(0); делал месагебок
и он появляется!но прога висит
← →
ВГГ (2007-04-12 23:38) [1]сервис мой конечно,
идеи будут? кроме ручной остановки в службах
← →
koha © (2007-04-13 05:18) [2]
> идеи будут?
- едеи то будут если сервис под NT, то может быть так:function SvcStopService(SvcName: String): Boolean;
Var HSCMan, HSrv: SC_HANDLE;
SvcStatus : TServiceStatus;
dwCheckPoint: DWord;
begin
HSCMan:=WinSvc.OpenSCManager(Nil,Nil,SC_MANAGER_ALL_ACCESS);
if HSCMan = 0 then exit;
HSrv:=OpenService(HSCMan,PChar(SvcName),SERVICE_STOP or SERVICE_QUERY_STATUS);
if HSrv > 0 then begin
if ControlService(HSrv,SERVICE_CONTROL_STOP,SvcStatus) then
if QueryServiceStatus(HSrv,SvcStatus) then
while SERVICE_STOPPED <> SvcStatus.dwCurrentState do begin
dwCheckPoint := svcstatus.dwCheckPoint;
Sleep(SvcStatus.dwWaitHint);
if not QueryServiceStatus(HSrv,SvcStatus) then break;
if SvcStatus.dwCheckPoint < dwCheckPoint then break;
end;
if SERVICE_STOPPED = SvcStatus.dwCurrentState then Result := true;
CloseServiceHandle(HSrv);
end;
CloseServiceHandle(HSCMan);
end;
← →
Сергей М. © (2007-04-13 08:39) [3]
> хочу завершить, его при нажатии кнопки ОК
Попробуй кнопку CANCEL, авось получится)
ОК-то тут причем ? И где эта кнопка находится, в каком приложении ?
← →
ВГГ (2007-04-13 18:18) [4]в моем приложении , кнопка на форме и при нажатии
я выхожу,тоесть halt
← →
ВГГ (2007-04-13 18:42) [5]причем функция работает в другом приложении - закрывает сервис,
а если изнутри , то не работает!
функция выше
← →
koha © (2007-04-14 04:58) [6]> ВГГ (13.04.07 18:42) [5]
И правильно пока Service Control Menedger хоть один активный хендел держит этого сервиса он и не завершится.
← →
koha © (2007-04-14 05:43) [7]Вызов с собственным процессом StopProcess(GetCurrentProcessID)
Испытал в сбственной службе NT (Служба без свойств: Stop,Pause)
- Работаетprocedure StopProcess(dwPID: Cardinal): Boolean;
Var HPROC:THandle;
begin
try
HPROC := OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);
if HPROC = 0 then begin
//RaiseLastOSError; //По желанию.
exit;
end;
result:=TerminateProcess(HPROC, DWORD(-1));
finally
CloseHandle(HPROC);
end;
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.06;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.046 c