[ Whois @ 10.05.2006. 18:23 ] @
Ima li ko iskustva sa ubijanjem explorera u delphiju?

Problem je sledeci: Delphi sve lepo odradi ubije proces, ali se posle 1-2 sekunde explorer ponovo sam ukljuci i sve vrati na staro stanje.
Kada proces ubijem iz Task managera sve je ok.

Neka ideja?

[ protector1990 @ 17.05.2006. 14:16 ] @
Pokusaj sledece: napravi jedan timer sa intervalom 50 ms i stavi mu da ponavlja ubijanje explorer-a.
Pozdrav
[ reiser @ 17.05.2006. 17:14 ] @
Da si pretrazio forum nasao bi.

Code:

//
// Ubija proces
//
function KillProcess(const APID : DWORD) : Boolean;
var
  procHandle : THandle;
begin
  procHandle := OpenProcess(PROCESS_TERMINATE, FALSE, APID);
  If procHandle <> 0 Then
  Begin
    result := TerminateProcess(procHandle, 0);
    CloseHandle(procHandle);
  End;
end;

//
// Vraca PID
//
function GetProcessID(const AProcessName : String) : DWORD;
var
  snapHandle : THandle;
  procData   : TProcessEntry32;
begin
  snapHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

  If snapHandle <> 0 Then
  Begin
    procData.dwSize := SizeOf(TProcessEntry32);
    If Process32First(snapHandle, procData) Then
    Begin
      If LowerCase(procData.szExeFile) = LowerCase(AProcessName) Then
      Begin
        result := procData.th32ProcessID;
        CloseHandle(snapHandle);
      End;

      While Process32Next(snapHandle, procData) Do
        If LowerCase(procData.szExeFile) = LowerCase(AProcessName) Then
        Begin
          result := procData.th32ProcessID;
          CloseHandle(snapHandle);
        End;
    End;
    CloseHandle(snapHandle);
  End;
end;


I onda stavis KillProcess(GetProcessID('explorer.exe'));.

[Ovu poruku je menjao reiser dana 17.05.2006. u 18:16 GMT+1]
[ Whois @ 17.05.2006. 22:54 ] @
@protector
to je ozbiljan program koji nema ni vremena da to radi 20 puta u sekundi, i ako je to jedino moguce resenje odga ga sigurno ne bi koristio. Jednostavno nije u mom stilu.

@reiser
procitao sam ja forum, ali ne znam sta ti nije jasno iz moje prve recenice. Imam te funkcije i jos 20 slicnih nacina da ubijem proces, ali on se vrati. Svi ti programi rade sa ne-windows aplikacijama koje se ne restartuju i tada sve radi ok. Zato je moje pitanje bilo koji proces treba da se ubije da prestane ta provera i ponovno startovanje kljucnih win servisa.

Poznato mi je resenje sa poleditom i menjanjem shella itd., ali ja trazim neko jednostavnije resenje koje bi islo iz programa a ne da cackam po sistemu svakog kompjutera.

[Ovu poruku je menjao Whois dana 17.05.2006. u 23:57 GMT+1]
[ godscrusher1990 @ 25.05.2006. 21:00 ] @
Kako da deklarisem jer mi za killprocess pise undeclared identifier.Molim za pomoc
[ reiser @ 26.05.2006. 05:28 ] @
Pa dao sam ti gore obe funkcije.
[ Whois @ 26.05.2006. 06:33 ] @
stavi: uses tlhelp32;
[ godscrusher1990 @ 26.05.2006. 14:15 ] @
Da da ali i dalje mi je za killprocess i za processID Undeclared
identifier.Imas li resenje

------=_Part_113_2826431.1148642848666
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline

<br><br><div><span class="gmail_quote">On 5/26/06, <b class="gmail_sendername">Whois</b> &lt;<a href="mailto:[email protected]">[email protected]</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
stavi: uses tlhelp32;<br><br>--<br><a href="http://www.elitesecurity.org/poruka/1160513">http://www.elitesecurity.org/poruka/1160513</a><br><br>Prijave/odjave: <a href="http://www.elitesecurity.org/pracenje#176135">http://www.elitesecurity.org/pracenje#176135
</a><br><br>Ne menjajte sledece dve linije ukoliko odgovarate putem emaila!<br>esauth:176135:727170c13a9e222dc85340c72632b143<br>Odgovor pisite *iskljucivo* ispod ove linije:</blockquote><div><br>Da da ali i dalje mi je za killprocess i za processID Undeclared
identifier.Imas li resenje<br><br></div><br></div><br>

------=_Part_113_2826431.1148642848666--
[ reiser @ 26.05.2006. 14:35 ] @
Pojasni malo ako mozes gde je problem... ?
[ obucina @ 28.05.2006. 01:09 ] @
A da ne startujes Explorer uopste, tj da zamenis shell?
[ Whois @ 28.05.2006. 07:16 ] @
Tako i radim, ali sam mislio da cu moci to da uradim iz programa koji bi privilegovanim korisnicima omogucavao ukljucivanje i iskljucivanje eksplorera u bilo kom trenutku.
[ martinj @ 16.06.2006. 00:38 ] @
Mozda sam nesto pobrljao u kodu, ali ovo

Code:

//
// Vraca PID
//
function GetProcessID(const AProcessName : String) : DWORD;
var
  snapHandle : THandle;
  procData   : TProcessEntry32;
begin
  snapHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

  If snapHandle <> 0 Then
  Begin
    procData.dwSize := SizeOf(TProcessEntry32);
    If Process32First(snapHandle, procData) Then
    Begin
      If LowerCase(procData.szExeFile) = LowerCase(AProcessName) Then
      Begin
        result := procData.th32ProcessID;
        CloseHandle(snapHandle);
      End;

      While Process32Next(snapHandle, procData) Do
        If LowerCase(procData.szExeFile) = LowerCase(AProcessName) Then
        Begin
          result := procData.th32ProcessID;
          CloseHandle(snapHandle);
        End;
    End;
    CloseHandle(snapHandle);
  End;
end;


ne radi...

Radi kada se napise ovako

Code:


//
// Vraca PID
//
function GetProcessID(const AProcessName : String) : DWORD;
var
  snapHandle : THandle;
  procData   : TProcessEntry32;
begin
  snapHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

  If snapHandle <> 0 Then
  Begin
    procData.dwSize := SizeOf(TProcessEntry32);
    If Process32First(snapHandle, procData) Then
    Begin
      If LowerCase(procData.szExeFile) = LowerCase(AProcessName) Then
      Begin
        result := procData.th32ProcessID;
        CloseHandle(snapHandle);
      End;

      While Process32Next(snapHandle, procData) Do
        If LowerCase(procData.szExeFile) = LowerCase(AProcessName) Then
        Begin
          result := procData.th32ProcessID;
          CloseHandle(snapHandle);
        End;
    End else CloseHandle(snapHandle);  // promena, CloseHandle() stavljeno u else...
  End;
end;

[ reiser @ 16.06.2006. 14:47 ] @
Stvarno ne vidim zasto ne bi onaj kod radio (meni radi), sta vise, u onom kodu koji si prepravio, ako Process32First ne vrati nista, nece ti se zatvoriti handle koji si otvorio sa CreateToolhelp32Snapshot()...
[ Almedin @ 18.06.2006. 20:42 ] @
Kljuc

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

Vrijednost

AutoRestartShell

0 - nece se rstartovati Explorer ako se ubije.