Ich habe einen Windows-Dienst. Beim Start prüft es, ob ihm eine Arbeit zugewiesen wurde - und wenn keine vorhanden ist, wird es einfach beendet. Das Problem besteht darin, dass der Wiederherstellungsmechanismus auf Neustart des Dienstes eingestellt ist.Wie kann ich einen Windows-Dienst innerhalb des Dienstes beenden?
Das ist, was ich will, wenn der Dienst berechtigterweise abstürzt, aber nicht, wenn ich den Dienst programmatisch auf meinem eigenen beenden.
Bisher alles, was ich unten habe versucht, hat dazu geführt, in Windows den Dienst automatisch neu zu starten:
Thread th;
protected override void OnStart(string[] args)
{
th = new Thread(new ThreadStart(StartMyService));
th.Start();
}
private void StartMyService()
{
if (WorkAvailable()) {
InitWork();
} else {
this.ExitCode = 0; // no errors
Stop();
}
}
protected override void OnStop()
{
// dispose of things
try
{
if (th != null && th.ThreadState == ThreadState.Running)
th.Abort();
}
catch { }
Environment.Exit(this.ExitCode);
}
Ich habe versucht, verschiedene Exitcode-Werte, aber Windows startet immer den Service. Ich habe auch Environment.FailFast
mit den gleichen Ergebnissen versucht. Was vermisse ich?
Das ist nicht das, was irgendjemand von einem Dienst erwarten würde, auch nicht das Betriebssystem. Wenn ein Dienst ausgeführt wird, erwarten Sie, dass er * in regelmäßigen Abständen * überprüft, ob Arbeiten ausgeführt werden müssen, ohne ständig gestoppt und neu gestartet zu werden. Verwenden Sie einen Timer. –