Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Prozess Beenden (https://www.delphipraxis.net/51279-prozess-beenden.html)

MiniKeks 9. Aug 2005 17:37


Prozess Beenden
 
Den Code zum Herausfinden der Aktuellen Prozesse besitze ich. Nun, wie stelle ich das an, das einfach zum beispiel der
"Winhelp32.exe" Prozess beendet wird? Weil ich will nicht, das der user zueerst in der Listbox die exe auswählen muss, um das zu beenden. Ich hoffe ihr Wisst, was ich eigentlich will. Mit Delphi code einen Prozess beenden, eben zum beispiel "Winhelp32.exe".

Für alle dies ned wissen, Winhelp32.exe gehört zu einem Virus. Ja ich will ein Antiprogramm dafür schreiben^^

Kann mir jemand helfen? :oops:

zum auslesen der Prozesse benutze ich das:

http://www.swissdelphicenter.ch/de/showcode.php?id=593

mfg.
MiniKeks :)

dahead 9. Aug 2005 17:40

Re: Prozess Beenden
 
zu diesem thema hast du sicherlich nichts hier im forum gefunden, oder?

Hier im Forum suchenProzess beenden

ach herr je, und sogar hier gibts was:

http://www.swissdelphicenter.ch/de/showcode.php?id=266

fred.reichbier 9. Aug 2005 17:40

Re: Prozess Beenden
 
das ist doch bei diesem Code dabei, oder?

Luckie 9. Aug 2005 17:55

Re: Prozess Beenden
 
Zitat:

Zitat von MiniKeks
zum auslesen der Prozesse benutze ich das:

http://www.swissdelphicenter.ch/de/showcode.php?id=593

Und was steht da dick und fett drüber?
Zitat:

...Prozesse auflisten und beenden?
:roll:

Ich würde aber diesen Code vorziehen: http://www.luckie-online.de/Develope..._KillProc.html

MiniKeks 14. Aug 2005 13:03

Re: Prozess Beenden
 
Ich verstehe den Code nicht! Auflisten kann ich. Doppelklick beenden auch.

Aber da steht:

Edit1.text. Wenn ich da reinschreibe 'Opera.exe' Dann steht:

Ungültiger Gleitkomawert.

Ich will ned wissen wie mans auflistet, sonern so:

BEENDEN(opera.exe);

Sowas, wisst ihr was ich meine? :lol:

Jelly 14. Aug 2005 13:12

Re: Prozess Beenden
 
Ist es nicht sinnvoller, dem eigentlichen Problem, nämlich dein infiziertes Windowssytem, auf die Spur zu kommen, statt auf diesen Weg einfach Prozesse zu beenden. Starte mal msconfig, da findest du eine Liste von allen Programmen die beim Windowsstart gestartet werden. Vielleicht kommt dir da ja was verdächtig vor.

MiniKeks 14. Aug 2005 13:25

Re: Prozess Beenden
 
Es geht nicht um meinen PC :lol:
Bitte bitte kann mir jemand einfach helfen? *verzeifel*

Luckie 14. Aug 2005 22:31

Re: Prozess Beenden
 
OK, probieren wir es noch einmal:
Zitat:

Zitat von Luckie
Ich würde aber diesen Code vorziehen: http://www.luckie-online.de/Develope..._KillProc.html


Olli 14. Aug 2005 23:13

Re: Prozess Beenden
 
Zitat:

Zitat von MiniKeks
Ich verstehe den Code nicht!

Wenn du den Code (also alles) nicht verstehst, dann solltest du nochmal von vorne beginnen (mit Delphi). Ansonsten sage genau wo es hakt. Ob dieser Code besser ist oder nicht, liegt einzig im Auge des Betrachters - im Grunde tun sie beide das gleiche, nur Luckie hat es in einzelne Routinen gekapselt statt dieses typische TForm1, TButton1, TButton2 usw. Schema zu extensiv zu bedienen (sind ja trotzdem noch vorhanden).

Zitat:

Zitat von Jelly
Ist es nicht sinnvoller, dem eigentlichen Problem, nämlich dein infiziertes Windowssytem, auf die Spur zu kommen, statt auf diesen Weg einfach Prozesse zu beenden.

Das hilft nicht immer, bspw. dann wenn der Trojaner (dennnach der Beschreibung *kann* es sich nicht um einen klassischen Virus handeln) sofort wieder neue Instanzen erstellt. Beispielsweise könnte so eine Malware eine Semaphore halten um immer mindestens 10 Instanzen zu erstellen. Wenn du die nicht quasi zugleich killst, hast du keine Chance. Mit einer Klickorgie im Taskmanager ist da nix zu machen. Naja und auch msconfig (gibt es bei Windows 2000 übrigens noch nicht, daher empfehle ich AutoRuns von Sysinternals) lohnt sich erst, wenn alle Instanzen gekillt wurden. Vorher hat das alles keinen Sinn, weil die vorhandenen Instanzen leicht die Registry usw. überwachen könnten und dort die Einstellungen persistent halten können.

Luckie 14. Aug 2005 23:19

Re: Prozess Beenden
 
Zitat:

Zitat von Olli
nur Luckie hat es in einzelne Routinen gekapselt statt dieses typische TForm1, TButton1, TButton2 usw. Schema zu extensiv zu bedienen (sind ja trotzdem noch vorhanden).

Ja aber doch nur in dem Code, der demonstriert, wie man die Funktionen benutzt. :gruebel:

Olli 14. Aug 2005 23:33

Re: Prozess Beenden
 
Zitat:

Zitat von Luckie
Ja aber doch nur in dem Code, der demonstriert, wie man die Funktionen benutzt. :gruebel:

Habe ich was anderes behauptet? Ich finde es dennoch unglücklich, zumal die Beschreibung fehlt, was in den einzelnen Form-Elementen erwartet wird ;)
Ansonsten favorisiere ich natürlich eindeutig die Kapselung in Routinen oder sogar Klassen. Keine Frage.

Luckie 14. Aug 2005 23:39

Re: Prozess Beenden
 
Es klang so, als wenn du meintest in den einzelnen Routinen würde ich auf TForm usw. zugreifen.
Zitat:

was in den einzelnen Form-Elementen erwartet wird
Meinst du eine erklärung der Parameter? Ich bin davon ausgegeangen, die erschließen sich von selbst. Aber bei Gelegenheit werde ich das noch mal überarbeiten, dann wird eventuell sogar eine Klasse drauß. ;)

Olli 14. Aug 2005 23:43

Re: Prozess Beenden
 
Zitat:

Zitat von Luckie
Meinst du eine erklärung der Parameter?

Jain. Wäre sicher auch nicht schlecht. Aber eigentlich meinte ich: "Man nehme ein Edit, welches die numerische ID des Prozesses enthält, welcher beendet werden soll" ... usw.
Es ist für dich und mich eindeutig, aber wir hatten das schon mehrfach, nicht alle wissen so gut bescheid :-/

Luckie 14. Aug 2005 23:45

Re: Prozess Beenden
 
Ach so da. Jupp, wäre bestimmt nicht schlecht. Aber nicht mehr heute, mir platzt gleich der Schädel - hat hier jemand mal eine Kopfschmerztablette?

Olli 14. Aug 2005 23:50

Re: Prozess Beenden
 
Zitat:

Zitat von Luckie
hat hier jemand mal eine Kopfschmerztablette?

Nö, aber wie wäre es mit einem Gläschen 5jährigem Metaxa. Für dich würde ich sogar die Flasche 7jährigen in der Ecke aufmachen - alternativ kann ich Tavria oder Aj Petri aus der Ukraine anbieten :mrgreen:

Luckie 14. Aug 2005 23:57

Re: Prozess Beenden
 
Da ich mich sowieso schon die ganze Zeit mit dir hier beim Posten unterhalte:

Zitat:

Für dich würde ich sogar die Flasche 7jährigen in der Ecke aufmachen
Ist das gut, wenn er sieben Jahre alt ist oder schlecht? :gruebel: Ich frage mich nämlich, ob ich mich geehrt fühlen soll oder nicht. :mrgreen:

Zitat:

alternativ kann ich Tavria oder Aj Petri aus der Ukraine anbieten
Aha. Alte russische Heilmethode: Schmerzen durch Schmerzen bekämpfen? :roll:

Aber wir werden gerade ziemlich offtopic. Eigentlich müsste ich schon mein eigenes Posting melden. :wall:

Luckie 15. Aug 2005 00:02

Re: Prozess Beenden
 
Hiermit ermahne ich Luckie, nicht weiter offtopic zu werden und zum Thema zurückzufinden!

Ein Hinweis von Olli noch an Luckie:
Zitat:

7 Jahre ist natürlich besser. Und die beiden ukrainischen sind Cognacs ;) ... sehr lecker.
*aua mein kopf* :cry: Fühlt sich an wie: :wall:

turboPASCAL 15. Aug 2005 04:01

Re: Prozess Beenden
 
@Luckie AND Olli, darf ich Eure Zweisamkeit unterberchen ? :wink:

@MiniKeks

In Bezug auf http://www.swissdelphicenter.ch/de/showcode.php?id=593 brauchst Du doch nur die beiden Methoden zusammenführen (Siehe Beispiel).
Im Beispiel sollte man noch auf die Gross- und Kleinschreibung eingehen.

Delphi-Quellcode:
function TerminateTheProcess(const ExeFilename: String): Boolean;
var
  ...
begin
  aSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  aProcessEntry32.dwSize := SizeOf(aProcessEntry32);
  bContinue := Process32First(aSnapshotHandle, aProcessEntry32);
  while Integer(bContinue) <> 0 do // Suche solang bContinue true
  begin
    if ExtractFileName(aProcessEntry32.szExeFile) = ExeFilename then
    begin
      if MessageDlg('Do you want to Terminate...' ... then
      begin
        PrID := aProcessEntry32.th32ProcessID;
        Ph := OpenProcess(1, BOOL(0), PrID);
        Ret := TerminateProcess(Ph, 0);
        if Integer(Ret) = 0 then
        begin
          MessageDlg('Cannot terminate...', mtInformation, [mbOK], 0);
          Result := False;
        end else
        begin
          bContinue := False;
          Result := True;
         
          { könnte man auch so machen ist aber nicht "sauber"
          CloseHandle(aSnapshotHandle);
          Result := True;
          exit;
          }
       end;
      end;
    end;
    bContinue := Process32Next(aSnapshotHandle, aProcessEntry32); // weitersuchen
  end;
  CloseHandle(aSnapshotHandle);
end;

Luckie 15. Aug 2005 10:03

Re: Prozess Beenden
 
Und genau das ist das Problem:
Delphi-Quellcode:
Ret := TerminateProcess(Ph, 0);
weswegen ich meinen Code vorziehen würde. TerminateProcess arbeitet asynchron:
Zitat:

Zitat von PSDK
TerminateProcess initiates termination and returns immediately.

Das heißt, es leitet den Prozess zum Beenden des Prozesses ein und kehrt sofort zurück. Der Rückgabewert signalisiert nur, ob TerminateProcess korrekt ausgeführt wurde, sprich, mit einem korrekten Prozesshandle. Der Rückgabewert sagt jedoch nichts darüber aus, ob der Prozess auch tatsächlich termniniert wurde. Deswegen sieht meine Routine so aus:
Delphi-Quellcode:
{...}
    dw := Integer(TerminateProcess(hProcess, 1));
    if dw <> 0 then
    begin
      // TerminateProcess returns immediately, so wie have to verify the result via
      // WaitForSingleObject
      dw := WaitForSingleObject(hProcess, Wait);
      if dw = WAIT_FAILED then
        dw := GetLastError;
    end
{...}

Olli 15. Aug 2005 10:05

Re: Prozess Beenden
 
Zitat:

Zitat von turboPASCAL
@Luckie AND Olli, darf ich Eure Zweisamkeit unterberchen ? :wink:

Frechheit hier einfach so reinzuplatzen :mrgreen:

Zitat:

Zitat von turboPASCAL
[...] brauchst Du doch nur die beiden Methoden zusammenführen (Siehe Beispiel).

Dann kann er die Schleife ja gleich durchlaufen lassen, damit er alle Prozesse dieses Namens gekillt :lol:
Woraus schöpfst du eigentlich deine Zuversicht, der erste Prozeß mit diesem exakten Namen der EXE sei das Ziel? Hier könnte der Pfad auch relevant sein.


Außerdem gibt es ein typisches Problem der Native APIs (also schon unterhalb der Toolhelp-API) in Sachen Dateiname. Bei mir wird aus
C:\Programme\Apache Group\Apache2\bin\ApacheMonitor.exe sowohl im TaskManager als auch in anderen ähnlichen Programmen ein ApacheMonitor.e. Das gilt natürlich für obige Beispiele gleichermaßen - fiel mir nur gerade ein und wird üblicherweise komplett vernachlässigt.

turboPASCAL 15. Aug 2005 15:35

Re: Prozess Beenden
 
Zitat:

Zitat von Olli
Zitat:

Zitat von turboPASCAL
@Luckie AND Olli, darf ich Eure Zweisamkeit unterberchen ? :wink:

Frechheit hier einfach so reinzuplatzen :mrgreen:

:mrgreen:

Zitat:

Zitat von Olli
Zitat:

Zitat von turboPASCAL
[...] brauchst Du doch nur die beiden Methoden zusammenführen (Siehe Beispiel).

Dann kann er die Schleife ja gleich durchlaufen lassen, damit er alle Prozesse dieses Namens gekillt :lol:
Woraus schöpfst du eigentlich deine Zuversicht, der erste Prozeß mit diesem exakten Namen der EXE sei das Ziel? Hier könnte der Pfad auch relevant sein.

Das ist halt der Nachteil, aber da MiniKeks es halt so möchte:
Zitat:

Zitat von MiniKeks
Ich will ned wissen wie mans auflistet, sonern so:
Delphi-Quellcode:
BEENDEN('opera.exe');
Sowas, wisst ihr was ich meine?

geht es nicht anders. Klar, man kann es anders machen, da es aber einfach sein soll... :gruebel: Mann könnte ja auch noch den Window.Captions-Text mit abfragen (wenn er statisch ist) zur Sicherheit.

Zitat:

Zitat von Olli
Außerdem gibt es ein typisches Problem der Native APIs (also schon unterhalb der Toolhelp-API) in Sachen Dateiname. Bei mir wird aus
C:\Programme\Apache Group\Apache2\bin\ApacheMonitor.exe sowohl im TaskManager als auch in anderen ähnlichen Programmen ein ApacheMonitor.e. Das gilt natürlich für obige Beispiele gleichermaßen - fiel mir nur gerade ein und wird üblicherweise komplett vernachlässigt.

Nein, nicht immer. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz