Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.06;
Скачать: CL | DM;

Вниз

Завершить сервис   Найти похожие ветки 

 
ВГГ   (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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
15-1176096050
novik
2007-04-09 09:20
2007.05.06
нужны уроки программирования


15-1176195527
ocean
2007-04-10 12:58
2007.05.06
Office systems (word processors, spreadsheets, e-mail, etc.)


15-1176045410
ppcumax
2007-04-08 19:16
2007.05.06
Как завершить процесс?


4-1165566420
yaJohn
2006-12-08 11:27
2007.05.06
Системное контекстное меню


15-1175848083
Fredy314
2007-04-06 12:28
2007.05.06
Отправка E-mail через неблокирующие сокеты