Главная страница
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.017 c
15-1175936121
ЭРИКА
2007-04-07 12:55
2007.05.06
ПОЗДРАВЛЕНИЕ С ДНЕМ РОЖДЕНИЯ


2-1176924939
Шурикс
2007-04-18 23:35
2007.05.06
Delphi2007


15-1175977895
vasIZmax
2007-04-08 00:31
2007.05.06
Как правильно писать программу?!


1-1173602376
Makhanev Alexander
2007-03-11 11:39
2007.05.06
Диалог выбора пользователя....


15-1175917704
Dismember
2007-04-07 07:48
2007.05.06
Сортировка Шелла