AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi anderen Prozess beenden und löschen

anderen Prozess beenden und löschen

Ein Thema von Master-of-Magic · begonnen am 11. Sep 2007 · letzter Beitrag vom 16. Sep 2007
 
Master-of-Magic

Registriert seit: 24. Jul 2006
37 Beiträge
 
Delphi 2005 Personal
 
#1

anderen Prozess beenden und löschen

  Alt 11. Sep 2007, 19:13
Ich möchte einen anderen Prozess beenden (im Notfall erzwingen) und danach dessen .exe löschen (ebenfalls erzwingen). Das zu löschende Programm befindet sich im selben Verzeichnis, wie das ausführende Programm. Folgender Code liefert mir "Zugriff verweigert":

Delphi-Quellcode:
KillTask('Tool.exe');
DeleteFile(ExtractFileDir(ParamStr(0)) + '\Tool.exe');
mit
Delphi-Quellcode:
function TForm1.KillTask(ExeFileName: string): Integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

  while Integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
      UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
      UpperCase(ExeFileName))) then
      Result := Integer(TerminateProcess(
                        OpenProcess(PROCESS_TERMINATE,
                                    BOOL(0),
                                    FProcessEntry32.th32ProcessID),
                                    0));
     ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
  end;
  CloseHandle(FSnapshotHandle);
end;
Der KillTask funktioniert soweit - wobei ich nicht weiß, ob das die beste Lösung ist. Das Löschen schlägt allerdings fehl, da Windows anscheinend noch eine Sekunde auf die Datei zugreift.
Wenn ich ein sleep(1000) einfüge oder der Prozess nicht läuft, klappt auch das Löschen!

Gibt's einfache Alternativen zu DeleteFile? Oder kann ich das irgendwie ohne sleep lösen?
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:44 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