2010-01-05 4 views
5

Ich habe ein Problem, das ich über einen Windows-Dienst, den ich in C# geschrieben habe, nicht herausfinden kann. Ich versuche zu warten, bis ein bestimmter Zeitraum für einen untergeordneten Prozess beendet wird, bevor ich gezwungen bin, ihn zu beenden und den Dienst zu beenden. Ich habe mein Timeout für irgendwo von 5 bis 15 Sekunden eingestellt und mein Dienst wartet die entsprechende Menge an Zeit und tötet dann das Kind und stoppt, wenn ich es über das MMC-Dienstfenster stoppe. Wenn ich jedoch den Computer herunterfahre, wird mein Dienst weggeblasen, bevor er richtig warten und stoppen kann. Ich habe gelesen, dass Windows eine Zeitüberschreitung von 30 Sekunden erlaubt, damit ein Dienst heruntergefahren wird, bevor es ihn wegbläst. Mein Code wird in weniger als 30 Sekunden ausgeführt, der Maximalwert beträgt etwa 20 Sekunden, je nachdem, wie oft ich den Timeout eingestellt habe.Erzwingen, dass Windows auf einen Dienst wartet, wenn es heruntergefahren wird

Ich habe versucht, die SetServiceStatus() -Funktion in der Win32 Api, aber es hat nicht die Funktion des Codes geändert. Ich habe überprüft, dass der Funktionsaufruf erfolgreich ist. Gibt es eine andere Möglichkeit, Windows zu warten, dass mein Dienst ordnungsgemäß heruntergefahren wird? Ich teste es in Windows 7 x86 und Windows Vista Sp1 x86.

Antwort

2

Windows wird nicht Lassen Sie jeden Dienst Herunterfahren zu verhindern, das ist By-Design. Wie Gyuri sagt, müssen Sie ein anderes Design für Ihre App in Betracht ziehen.

+0

+1: * Offensichtlich * die Lösung hier macht den Service weniger Zeit zu stoppen. Soooo viele Anwendungen ignorieren die Bedeutung dieser und. –

0

OnSTart und OnSTop werden von einer Basisklasse geerbt, die ziemlich viel für Sie tut. Alle Ihre Implementierungen dieser Methoden sollten Ihren Client-Code starten oder stoppen, Windows wird den Rest erledigen.

Ich schätze dies mit der Tatsache, dass ich C# und. Net-Implementierung von ServiceBase tut dies tun, kann ich nicht verbindlich über C/C++ - Code oder APIs sprechen.

1

Dies ist eine globale Windows-Einstellung, anscheinend: http://support.microsoft.com/kb/305788. Ich wäre besorgt, wenn ich mich darauf verlassen müsste, dass die Benutzer meinen Dienst herunterfahren würden. Ich würde meine Daten stattdessen regelmäßig speichern.

+0

Das saugt. Ich habe einen Windows-Dienst, der virtuelle Maschinen hostet, die Zeit brauchen, um herunterzufahren. Ich möchte nicht, dass es unbestimmt wartet, aber ein längeres Timeout (etwas mehr als eine Minute) würde sicherstellen, dass meine Maschinen ordnungsgemäß heruntergefahren werden. – Jens

Verwandte Themen