![]() |
prozess in Taskmanager beenden aber wie ?
Hallo,
ich würde gerne mal wissen wie man Systemprozesse beenden kann ? Prozesse wie "Spoolsv.exe" lassen sich nur mit der Maus schliesen. Habe mich schon überall umgeschaut und keine lösung dazu gefunden. Ich habe es mit diesen Beispiel code probiert:
Delphi-Quellcode:
Es läuft ohne Fehlermeldung aber "spoolsv.exe" ist immer noch aktiv
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; { For Windows NT/2000/XP } procedure KillProcess(hWindowHandle: HWND); var hprocessID: INTEGER; processHandle: THandle; DWResult: DWORD; begin SendMessageTimeout(hWindowHandle, WM_CLOSE, 0, 0, SMTO_ABORTIFHUNG or SMTO_NORMAL, 5000, DWResult); if isWindow(hWindowHandle) then begin // PostMessage(hWindowHandle, WM_QUIT, 0, 0); { Get the process identifier for the window} GetWindowThreadProcessID(hWindowHandle, @hprocessID); if hprocessID <> 0 then begin { Get the process handle } processHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION, False, hprocessID); if processHandle <> 0 then begin { Terminate the process } TerminateProcess(processHandle, 0); CloseHandle(ProcessHandle); end; end; end; end; procedure TForm1.Button1Click(Sender: TObject); begin KillTask('spoolsv.exe'); end; procedure TForm1.Button2Click(Sender: TObject); begin KillProcess(FindWindow('spoolsv.exe',nil)); end; end. in Taskmanager !!!. Wenn ich andere Prozesse schliessen will,z.b die auf user laufen geht ohne weiteres. Kann mir jemand helfen ? gruss Matrix [edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit] |
Bist du sicher, dass der Druck-Spooler ein Fenster hat? Und wenn ja meinst du das Fenster hat den Klassennamen: "spoolsv.exe"? Das glaube ich nämlich nicht. Ich denke übrigens, dass das ein Service ist und der läßt sich nicht so ohne weiteres beenden / abschiessen.
|
Zitat:
mit der Maus kannst du es ohne weiteres beenden, sehe kein problem. Mich würde es viel mehr intresieren ob man es auch mit Delphi beenden kann. Matrix68 |
Also ich kann es nicht mit meiner SysInfo. Und kuck, wie ich Prozesse beende. Bestimmte Prozesse von Windows kann man nicht beenden.
Und was meinst du "mit der Maus kann man ihn beenden". Ich kann den Prozess auch mit dem Taskmanger von Windows nicht beenden. |
Sofern man das SE_DEBUG_PRIVILEGE aktiviert hat (als Admin steht einem dieses Privilege zwar zur Verfügung, allerdings ist es standardmäßig deaktiviert), dann kann man sich auch für Services ein gültiges Prozess-Handle holen und den Prozess über dieses Handle "abschießen".
|
'spoolsv.exe' ist ein dienst von windows 2000/xp und kann in > systemsteuerung > verwaltung > computerverwaltung > dienste >
unter DRUCKERWARTESCHLANGE beendet werden... |
Zitat:
Allerdings würde ich dir empfehlen das nicht zu machen, da es eigentlich kein Sinn macht. Wenn du allerdings einfach den Service ausschalten willst, dann solltest du nach einer Lösung suchen Services zu beenden (regulär). Chris |
eigentlich wollte ich nur wissen ob es möglich ist
über Delphi solche prozesse abzuschiessen bzw. zu beenden ? Ob es Sin macht oder nicht,das muß jeder für sich selbst beantworten. Also frage ich noch einmal.. ist es möglich oder nicht ? Wenn ja wie ? gruss Matrix68 P.S: Alt + Strg + Entf drücken Taskmanager wird geöffnet. Mit der Maus Spoolsv.exe auswählen und Prozess beenden. fertig.... |
Zitat:
|
Moin Zusammen,
Zitat:
Zitat:
Würde man das ändern (nur warum sollte man) würde es gehen. |
habe verstanden... danke ! :spin:
Matrix68 |
Zitat:
|
Ja genau, davon rede ich ja. Ich kann mir aber nicht vorstellen, dass er die selbigen hat bzw. sie sich vorher geholt hat.
|
Zitat:
![]() |
Re: prozess in Taskmanager beenden aber wie ?
Guck dir den Code an, der sollte dabei sein.
|
Re: prozess in Taskmanager beenden aber wie ?
Zitat:
- EnableDebugPrivilege - EnableDebugPrivileges genannt; das sollte die richtige Fährte sein. Falls nicht, dann mich bitte korrigieren, Luckie. |
Re: prozess in Taskmanager beenden aber wie ?
Das kann es schon sein. Ich kenne deinen Quellcode nicht. Du musst eben nur gucken, wa sich anders mache. Deswegen kann ich da keine Tipps geben, warum es bei mir klappt und bei dir nicht.
|
Re: prozess in Taskmanager beenden aber wie ?
Zitat:
|
Re: prozess in Taskmanager beenden aber wie ?
Ich weiß, dass es um meinen Quellcode geht. Aber woher soll ich wissen, warum mein Programm mehr Prozesse beenden kann, als dein, wenn ich deinen Quellcode nicht kenne. Du kennst beide und nur du kannst den Unterschied finden.
|
Re: prozess in Taskmanager beenden aber wie ?
Zitat:
Daß es mit einem simplen TerminateProcess bei Systemprozessen nicht getan ist, mußt Du besser wissen als ich. Die dafür nötigen Unterprogramm wie EnableDebugPrivilege und EnableDebugPrivileges, die das aufzuheben scheinen, dürften einiges an Programmierstunden gekostet haben. Du willst mir doch sicher nicht kredenzen, daß die zufällig in Deinen Quellcode gelangt sind?! |
Re: prozess in Taskmanager beenden aber wie ?
Zitat:
|
Re: prozess in Taskmanager beenden aber wie ?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:35 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 by Thomas Breitkreuz