Главная страница
    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.074 c
2-1176723674
IgorMish
2007-04-16 15:41
2007.05.06
Закрывается приложение


11-1158821369
avs
2006-09-21 10:49
2007.05.06
KolListView


15-1176015665
IMHO
2007-04-08 11:01
2007.05.06
SureType vs QWERTY


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


3-1171525840
Layner
2007-02-15 10:50
2007.05.06
Кто как работет и с MSSQL2000 и c MSSQL2005?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский