Как запустить и остановить сервис (или получить его статус) 
Здесь представлены две функции ServiceStart и ServiceStop, которые показывают, как пользоваться API функциями OpenSCManager, OpenService и т.д.: 
 
 
function ServiceStart(aMachine, aServiceName : string ) : boolean;  
// aMachine это UNC путь, либо локальный компьютер если пусто 
var  
  h_manager,h_svc: SC_Handle;  
  svc_status: TServiceStatus;  
  Temp: PChar;  
  dwCheckPoint: DWord;  
begin  
  svc_status.dwCurrentState := 1;  
  h_manager := OpenSCManager(PChar(aMachine), Nil,  
                             SC_MANAGER_CONNECT);  
  if h_manager > 0 then  
  begin  
    h_svc := OpenService(h_manager, PChar(aServiceName),  
                         SERVICE_START or SERVICE_QUERY_STATUS);  
    if h_svc > 0 then  
    begin  
      temp := nil;  
      if (StartService(h_svc,0,temp)) then  
        if (QueryServiceStatus(h_svc,svc_status)) then  
        begin  
          while (SERVICE_RUNNING <> svc_status.dwCurrentState) do  
          begin  
            dwCheckPoint := svc_status.dwCheckPoint;  
 
            Sleep(svc_status.dwWaitHint);  
 
            if (not QueryServiceStatus(h_svc,svc_status)) then  
              break;  
 
            if (svc_status.dwCheckPoint < dwCheckPoint) then  
            begin  
              // QueryServiceStatus не увеличивает dwCheckPoint  
              break;  
            end;  
          end;  
        end;  
      CloseServiceHandle(h_svc);  
    end;  
    CloseServiceHandle(h_manager);  
  end;  
  Result := SERVICE_RUNNING = svc_status.dwCurrentState;  
end;  
 
 
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  
 
Всё что, что Вам нужно, это unit WinSvc ! 
 
(Код не мой) 
		
	
		
		
		
		
		
	
		
			
			
			
			
				 
			
			
			
			
		 
		
	
	
	 |