Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi prozess in Taskmanager beenden aber wie ? (https://www.delphipraxis.net/5512-prozess-taskmanager-beenden-aber-wie.html)

matrix68 9. Jun 2003 19:38


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:
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.
Es läuft ohne Fehlermeldung aber "spoolsv.exe" ist immer noch aktiv
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]

Luckie 9. Jun 2003 20:28

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.

matrix68 9. Jun 2003 21:27

Zitat:

Zitat von Luckie
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.

Hi Luckie,

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

Luckie 9. Jun 2003 21:44

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.

Motzi 10. Jun 2003 06:51

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".

aaron 10. Jun 2003 11:42

'spoolsv.exe' ist ein dienst von windows 2000/xp und kann in > systemsteuerung > verwaltung > computerverwaltung > dienste >
unter DRUCKERWARTESCHLANGE beendet werden...

CalganX 10. Jun 2003 11:56

Zitat:

Zitat von aaron
'spoolsv.exe' ist ein dienst von windows 2000/xp und kann in > systemsteuerung > verwaltung > computerverwaltung > dienste >
unter DRUCKERWARTESCHLANGE beendet werden...

In diesem Fall wird allerdings der Service "heruntergefahren" und nicht abgeschossen, was matrix68 allerdings vorhat ist den Service einfach brutal zu töten.

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

matrix68 10. Jun 2003 21:03

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....

Luckie 10. Jun 2003 21:25

Zitat:

Zitat von matrix68
P.S: Alt + Strg + Entf drücken Taskmanager wird geöffnet.
Mit der Maus Spoolsv.exe auswählen und Prozess beenden.
fertig....

Und genau das geht bei mir unter 2000 nicht, obwohl ich Admin bin.

Christian Seehase 10. Jun 2003 23:21

Moin Zusammen,

Zitat:

Zitat von Matrix68
P.S: Alt + Strg + Entf drücken Taskmanager wird geöffnet.
Mit der Maus Spoolsv.exe auswählen und Prozess beenden.
fertig....

Zitat:

Zitat von Luckie
Und genau das geht bei mir unter 2000 nicht, obwohl ich Admin bin.

was damit zusammenhängt, dass Dienste die im Kontext des Accounts System (bzw. LocalSystem) gestartet wurden, auch nicht mit Adminrechten "abgewürgt" werden dürfen.
Würde man das ändern (nur warum sollte man) würde es gehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:55 Uhr.
Seite 1 von 3  1 23      

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