Содержание материала

 

Здесь представлены две функции ServiceStart и ServiceStop, которые показывают, как пользоваться API функциями OpenSCManager, OpenService и т.д.:

Code:

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;

 

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить