Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1176668202
Strate
2007-04-16 00:16
2007.05.06
Быстра сортировка в TListView


8-1156137008
hero
2006-08-21 09:10
2007.05.06
Радио в stream


1-1173444096
ElectriC
2007-03-09 15:41
2007.05.06
Липкие диалоги


2-1176669378
vasIZmax
2007-04-16 00:36
2007.05.06
Сортировка и ProgressBar


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский