Frage

Gibt es eine Möglichkeit, einen anderen Wert für den Dienststart Timeout pro Dienst eingestellt? Ich kann es die ServicesPipeTimeout Registrierungsschlüssel ändern verwenden, aber es ist pro Maschine ( http://support.microsoft.com/ kb / 824344 ).

Im Moment ist das einzige, was ich daran gedacht war, alle zeitraubenden Aktionen während des Starts in einem anderen Thread zu tun.

War es hilfreich?

Lösung

Es ist eine gute Übung Ihren Service so schnell wie möglich zu beenden beginnen. So, während die Start Zustand, tun nur das, was Sie unbedingt benötigen, sie anzuerkennen erfolgreich gestartet; und tun den Rest später. Wenn die starten ist nach wie vor ein langwieriger Prozess, verwenden Sie SetServiceStatus in regelmäßigen Abständen die Service Control Manager zu informieren, dass Sie noch nicht abgeschlossen haben, so dass es nicht Time-out für Sie da.

Andere Tipps

ich mit Romulo vereinbaren Finishing Ihr Service so schnell wie möglich zu starten. wenn Sie die Zeit jedoch benötigen und Sie sind mit .NET Framework 2.0 oder höher, können Sie ServiceBase.RequestAdditionalTime () Methode in Betracht ziehen.

http://msdn.microsoft.com /en-us/library/system.serviceprocess.servicebase.requestadditionaltime.aspx

protected override void OnStart()
{
    this.RequestAdditionalTime(10000);
    // do your stuff
}

Einfach tun timeintensive Sachen in einem anderen Thread

   protected override void OnStart(string[] args)
    {
        var task = new Task(() =>
        {
            // Do stuff
        });
        base.OnStart(args);
        task.Start();
    }

Ich hatte auch mit einem Dienst beschäftigen, die können einige Sekunden / Minuten dauern einen guten Start haben. Wenn der Dienst gestartet wird, versucht es zu einem SQL Server zu verbinden. Wenn jedoch der gesamte Server neu gestartet wurde, mein Dienst war, bevor SQL Server gestartet wird. (Ich weiß, über die Service-Abhängigkeit, aber es nicht für einen bestimmten Grund für meine Situation anwenden ....). Ich habe versucht, eine Schleife versucht, 10-mal zu tun, um SQL Server zu verbinden, aber Windows tötet meinen Dienst vor dem zweiten Versuch, wegen der Timeout.

Meine Lösung : Ich habe einen Timer in dem "onStart ()" meinen Dienst gegeben. Dann wurde versucht, die „onTick ()“ Methode des Dienstes 10-mal mit dem SQL Server zu verbinden (mit einer Warte von 30 in it). Nicht mehr Timeout beim Start.

Also im Grunde

  • Mein Service startet in 5 Sekunden.
  • Ein Timer gestartet wird 10 Sekunden nach dem Service ist gestartet.
  • Der Timer versucht 10-mal [warten jeweils 30 Sekunden Zeit] zu eine Verbindung mit dem SQL Server.
  • Wenn es gelingt, wird der Timer deaktiviert sich, wenn nicht (nach 10 Versuch), ich den Dienst zu beenden.

Beachten Sie die elegantere Art und Weise, das Problem zu lösen, aber vielleicht kann ein Teil meiner Lösung jemand in der gleichen Situation, als mir helfen,

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top