Fórum Como parar um serviço do Windows 2000/XP? #256124
26/10/2004
0
Estou fazendo um programa que precisa para um determinado serviço do windows, deletar uns arquivos e colocar o serviço novamente no AR.
A pergunta é: Como eu faço para tirar um serviço do AR e depois colocar novamente no AR?
Grato!!!
Rafael Paz Monteiro :D :) :(
Oxenteknot
Curtir tópico
+ 0Posts
26/10/2004
Tatuweb
[b:9c74451a64][color=blue:9c74451a64]
:arrow: Inicia um serviço:[/color:9c74451a64][/b:9c74451a64]
function ServiceStart (sMachine, sService: string): boolean; var schm, schs: SC_Handle; ss: TServiceStatus; psTemp: PChar; dwChkP: DWord; begin ss.dwCurrentState := -1; schm := OpenSCManager(PChar(sMachine), nil, SC_MANAGER_CONNECT); if (schm > 0) then begin schs := OpenService (schm, PChar(sService), SERVICE_START or SERVICE_QUERY_STATUS); if (schs > 0) then begin psTemp := nil; if (StartService (schs, 0, psTemp)) then begin if (QueryServiceStatus (schs, ss)) then begin while (SERVICE_RUNNING <> ss.dwCurrentState) do begin dwChkP := ss.dwCheckPoint; Sleep (ss.dwWaitHint); if (not QueryServiceStatus (schs, ss)) then Break; if (ss.dwCheckPoint < dwChkP) then Break; end; end; end; CloseServiceHandle(schs); end; CloseServiceHandle(schm); end; Result := SERVICE_RUNNING = ss.dwCurrentState; end;
:arrow: Finaliza um serviço:[/color:9c74451a64][/b:9c74451a64]
function ServiceStop (sMachine, sService: string): boolean; var schm, schs: SC_Handle; ss: TServiceStatus; dwChkP: DWord; begin schm := OpenSCManager (PChar (sMachine), nil, SC_MANAGER_CONNECT); if (schm > 0) then begin schs := OpenService (schm, PChar (sService), SERVICE_STOP or SERVICE_QUERY_STATUS); if (schs > 0) then begin if (ControlService (schs, SERVICE_CONTROL_STOP, ss)) then begin if(QueryServiceStatus (schs, ss)) then begin while (SERVICE_STOPPED <> ss.dwCurrentState) do begin dwChkP := ss.dwCheckPoint; Sleep (ss.dwWaitHint); if (not QueryServiceStatus (schs, ss)) then Break; if (ss.dwCheckPoint < dwChkP)then Break; end; end; end; CloseServiceHandle(schs); end; CloseServiceHandle(schm); end; Result := SERVICE_STOPPED = ss.dwCurrentState; end;
Para chamar as funções siga os exemplos abaixo. É importante notar que se for um serviço do Windows você tem que chamá-lo pelo nome que se encontra na versão em inglês do Windows. No exemplo abaixo o serviço Mensageiro é ´messenger´.
:arrow: [b:9c74451a64]Inicia o serviço mensageiro na máquina local (127.0.0.1)
[/b:9c74451a64]
procedure TForm1.Button1Click(Sender: TObject); begin Screen.Cursor := crHourGlass; if not ServiceStart (´127.0.0.1´, ´messenger´) then begin Screen.Cursor := crDefault; ShowMessage (´O Serviço não pode ser iniciado!´); end; Screen.Cursor := crDefault; end;
:arrow: [b:9c74451a64]Interrompe o serviço mensageiro na máquina local (127.0.0.1)
[/b:9c74451a64]
procedure TForm1.Button2Click(Sender: TObject); begin Screen.Cursor := crHourGlass; if not ServiceStop (´127.0.0.1´, ´messenger´) then begin Screen.Cursor := crDefault; ShowMessage (´O Serviço não pode ser finalizado!´); end; Screen.Cursor := crDefault; end;
Gostei + 0
27/10/2004
Oxenteknot
Muito Obrigado!!!!
Rafael Paz Monteiro
Gostei + 0
08/02/2006
Paullsoftware
schm, schs: [b:5a64fb8451]SC_Handle[/b:5a64fb8451];
qual o unit tenho que declarar???
Gostei + 0
08/02/2006
Paullsoftware
encontrei tenho q declarar [b:1e4eb6ad06]uses winsvc;[/b:1e4eb6ad06]
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)