![]() |
TerminateProcess geht nicht die Zweite
Also folgender Faden hat mir nicht geholfen
![]() Da wir mittlerweile einen Haufen an Diensten installieren die zum Teil auch von einander abhängig sind und je nach Datensicherungsprogramm während der Datensicherung geschlossen sein müssen liefern wir seit einiger Zeit zusätzlich einen Guard der Diese Dienste überwacht aus.... Dieser Guard managed die Laufzeit der Dienste und überwacht zusätzlich deren Funktionalität...sollte also ein Programm über einen Timeout "hängen" stoppt er den Dienst. Sollte das nicht funktionieren (Dienst nach Timeout immer noch in der Prozessliste), dann Führt er TerminateProcess aus. Das läuft soweit auch. Nur bei einem einzigen Kunden nicht...... :( Da versagt Terminateprocess bei einem der Dienste...immer. Woran kann das liegen. Folgende "Fehlerquellen" sind bekannt: -Prozess vom User System kann/soll mann nicht terminieren. (Ist ok, deswegen laufen alle Prozesse als Administrator) -Prozess von einem anderen User kann/soll man nicht terminieren. (Ist ok, alle laufen im User Kontext Administrator) Vermutung: Im Services.msc steht der hängende Prozess als "Wird beendet.." kann es sein das TerminateProcess nicht funktioniert während der Dienst beendet zu werden versucht? |
AW: TerminateProcess geht nicht die Zweite
Moin QuickAndDirty,
gibt es im Eventlog irgenwelche dazu passenden Einträge? |
AW: TerminateProcess geht nicht die Zweite
Wenn du ein Dienst mit Terminateprocess beendest, dann ist er weg, ohne irgendwen zu informieren. Das ist, als ob der Boden unter den Füßen weggezogen wird. D.h. der ServiceManager bekommt das selbst erst mit, wenn er denn auch danach sucht (sprich jemand aktualisiert es). Schau mal in den Eigenschaftgen im SM, ob da der Starten button wieder aktiv ist.
Außerdem kannst du mal ProcessExplorer angucken, ob der Prozess noch aktiv ist. Wenn ja, dann hast du ein anderes Problem. Wenn ein Prozess in einem nicht unterbrechbaren Interrupt fest hängt, dann kann TerminateProcess das auch nicht schneller machen. |
AW: TerminateProcess geht nicht die Zweite
Um den Service zu beenden, würde ich wie Dezipiator schon angedeutet hat, lieber direkt die Service Manager API verwenden. Auch bei normalen Prozessen ist ein TerminateProcess() zu vermeiden.
Ich hatte irgendwo mal eine Implementation gesehen, welche einfach ExitProcess() in den Zielprozess injiziert. Das ist zwar etwas umständlich, aber es gibt dem Zielprozess wenigstens Zeit, eventuelle Finalizations auszufüren. |
AW: TerminateProcess geht nicht die Zweite
Zitat:
![]() |
AW: TerminateProcess geht nicht die Zweite
Zitat:
|
AW: TerminateProcess geht nicht die Zweite
Zitat:
Aber im in der Prozessliste (Taskmanager) kann ich ihn per Prozessbeenden stoppen. |
AW: TerminateProcess geht nicht die Zweite
Zitat:
Zitat:
Wie sähe die Eskalationsreihenfolge also aus? 1. Stoppen des Dienstes 2. Exitprocess Injecten 3. TerminateProcess ???? aber wieso funzt Terminate Process nicht? (über 14 stunden hinweg) |
AW: TerminateProcess geht nicht die Zweite
Zitat:
Frage 1: um welches OS handelt es sich? Frage 2: Hat der Guard evtl. noch kein SeDebugPrivilege? Aber der Service läuft ja vermutlich als LocalSystem und ist somit noch "über" dem Admin. Also: SeDebugPrivilege nicht planlos verwenden, aber schauen ob es notwendig sein könnte. Weiter mit noch was einfacherem... aus der ![]() Zitat:
|
AW: TerminateProcess geht nicht die Zweite
Zitat:
Zitat:
Keine Ahnung welches Servicespack oder Build. Aber es poppt keine UAC auf wenn man was macht. Zitat:
Und auch im einrichten von Gruppenrichlinien oder verwalten von Active-Directories habe ich keine Ahnung....aber soweit ich weiß sind das zwei Stichwörter die erfunden wurden um die Kreativität der Entwickler zu behindern. Ich sollte den Guard wirklich mal als LocalesSystem anmelden, hmm? Zitat:
Oh je.... Der Guard wurde von einem Kollegen geschrieben und ich schaue mal ob da irgendwo getlasterror aufgerufen wird....aber ich bezweifle es (weil der produziert auch so Code zeilen wie
Code:
diese)
If not(b<>False) Then
Das überwachte Programm ist von mir...und der eigentliche Fehler ist ja auch das es sich aufhängt und erst notwendig macht das der Guard es abschießen/neustarten möchte. Ich kämpfe hier also ein 2 Fronten...beim Kunden versuche ich zu ermitteln warum es abstürzt und das reicht dem Kollegen um selbst in sachen Guard NICHT tätig zu werden...deswegen bin ich es hier der diesen Thread auf gemacht hat (ja unsere Firma ist ein Kindergarten). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 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