| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Как программно отключить сервисы Windows |
| Автор: Dieser 5.7.2008, 22:26 |
| Чтоб сервис запускался вручную или вообще был отключен.Как? |
| Автор: Dieser 5.7.2008, 22:41 |
| Блин тупанул. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ Че сразу недопер.Еще по форуму искал %) |
| Автор: _RIM_ 9.7.2008, 11:52 |
| Uses WinSvc; Так останавливаем сервис: function ServiceStop(aMachine,aServiceName: string ): boolean; // aMachine это UNC путь, либо локальный компьютер если пусто var h_manager, h_svc: SC_Handle; svc_status: TServiceStatus; dwCheckPoint: DWord; begin h_manager:=OpenSCManager(PChar(aMachine),nil, SC_MANAGER_CONNECT); if h_manager > 0 then begin h_svc := OpenService(h_manager,PChar(aServiceName), SERVICE_STOP or SERVICE_QUERY_STATUS); if h_svc > 0 then begin if(ControlService(h_svc,SERVICE_CONTROL_STOP, svc_status))then begin if(QueryServiceStatus(h_svc,svc_status))then begin while(SERVICE_STOPPED <> svc_status.dwCurrentState)do begin dwCheckPoint := svc_status.dwCheckPoint; Sleep(svc_status.dwWaitHint); if(not QueryServiceStatus(h_svc,svc_status))then begin // couldn't check status break; end; if(svc_status.dwCheckPoint < dwCheckPoint)then break; end; end; end; CloseServiceHandle(h_svc); end; CloseServiceHandle(h_manager); end; Result := SERVICE_STOPPED = svc_status.dwCurrentState; end; Так проверяем его состояние: function ServiceGetStatus(sMachine, sService: string ): DWord; var h_manager, h_service: SC_Handle; service_status: TServiceStatus; hStat: DWord; begin hStat := 1; h_manager := OpenSCManager(PChar(sMachine) ,nil, SC_MANAGER_CONNECT); if h_manager > 0 then begin h_svc := OpenService(h_manager,PChar(sService), SERVICE_QUERY_STATUS); if h_svc > 0 then begin if(QueryServiceStatus(h_svc, service_status)) then hStat := service_status.dwCurrentState; CloseServiceHandle(h_svc); end; CloseServiceHandle(h_manager); end; Result := hStat; end; Она возвращает одну из следующих констант: SERVICE_STOPPED SERVICE_RUNNING SERVICE_PAUSED SERVICE_START_PENDING SERVICE_STOP_PENDING SERVICE_CONTINUE_PENDING SERVICE_PAUSE_PENDING |