![]() |
Re: Prozess Beenden
Zitat:
Ansonsten favorisiere ich natürlich eindeutig die Kapselung in Routinen oder sogar Klassen. Keine Frage. |
Re: Prozess Beenden
Es klang so, als wenn du meintest in den einzelnen Routinen würde ich auf TForm usw. zugreifen.
Zitat:
|
Re: Prozess Beenden
Zitat:
Es ist für dich und mich eindeutig, aber wir hatten das schon mehrfach, nicht alle wissen so gut bescheid :-/ |
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?
|
Re: Prozess Beenden
Zitat:
|
Re: Prozess Beenden
Da ich mich sowieso schon die ganze Zeit mit dir hier beim Posten unterhalte:
Zitat:
Zitat:
Aber wir werden gerade ziemlich offtopic. Eigentlich müsste ich schon mein eigenes Posting melden. :wall: |
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:
|
Re: Prozess Beenden
@Luckie AND Olli, darf ich Eure Zweisamkeit unterberchen ? :wink:
@MiniKeks In Bezug auf ![]() 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; |
Re: Prozess Beenden
Und genau das ist das Problem:
Delphi-Quellcode:
weswegen ich meinen Code vorziehen würde. TerminateProcess arbeitet asynchron:
Ret := TerminateProcess(Ph, 0);
Zitat:
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 {...} |
Re: Prozess Beenden
Zitat:
Zitat:
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 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