[Delphi] Jak zabýt službu?

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Trebus 28. 8. 2007 11:22

Nevíte někdo, jak natvrdo zabít službu (service) ve Windows? Uživatel má administrátorská práva a daří se mi zabít normální aplikaci, ale ne službu.

Zde je moje (ne)funkční procedura:

Kód: Vybrat vše
procedure KillProcess(pExeName: string);
   var proc:                     PROCESSENTRY32;
       Loop:                     Bool;
       hSnap:                    HWND;
       ProcessId, ProcessHandle: THandle;
   begin
   ProcessId := 0;
   proc.dwSize := SizeOf(Proc);
   hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
   Loop := Process32First(hSnap,proc);
   while Integer(Loop) <> 0 do
      begin
      if UpperCase(pExeName) = UpperCase(ExtractFileName(proc.szExeFile)) then
         ProcessId := proc.th32ProcessID;
      Loop := Process32Next(hSnap,proc);
      end;

   CloseHandle(hSnap);

   if ProcessId > 0 then
      begin
      ProcessHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,
                                   False, ProcessId);
      if ProcessHandle > 0 then
         begin
         TerminateProcess(ProcessHandle, 0);
         CloseHandle(ProcessHandle);
         end;
      end;
   end;
Trebus
Junior

Odeslat příspěvekod JanFiala 28. 8. 2007 11:34

Služba se nezabíjí, ale zastavuje ;-)
¨Podívej se na API ControlService()
Co můžeš udělat dnes, odlož na včerejšek
JanFiala
Expert
Uživatelský avatar

Odeslat příspěvekod Trebus 28. 8. 2007 12:03

Já vím, zastavit službu umím. Mě šlo spíše o to, zabít službu, pokud přestane reagovat, spadne apod.
Trebus
Junior

Odeslat příspěvekod JanFiala 28. 8. 2007 12:13

SLužby si spravuje system, takže ten by měl po zjištění, že služba nefunguje ji automaticky restartovat / shodit.
Co můžeš udělat dnes, odlož na včerejšek
JanFiala
Expert
Uživatelský avatar

Odeslat příspěvekod hekrhy 28. 8. 2007 12:26

jak uz rikal Jan Fiala, system si sluzby ridi sam (Service Control Manager)...a takove nasilne ukonceni neni vubec ok, protoze vetsina sluzeb ani nebezi jako samostatny proces, ale spolecne s nekolika dalsima sluzbama pod jednim procesem...takze kdyz ten proces ukoncis, tak tim ukoncis i dalsi bezici sluzby...a klidne se ti muze stat, ze si tim shodis cely system :wink:

jinak kdysi existovala chyba (kterou uz ale mozna opravili) v tom, ze sice tyhle systemove procesy nesly normalne ukoncit, ale sly debugovat...a kdyz se ukonci debugger, ukonci se i debugovany proces (a uz se nehledi na to, jestli je systemovy atd)...
hekrhy
Junior
Uživatelský avatar

Odeslat příspěvekod Trebus 28. 8. 2007 12:44

Díky za odpovědi, spolehnu se tedy na Windows :-)
Trebus
Junior


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků