limit czasu uruchamiania usługi windows

Czy istnieje sposób na ustawienie innej wartości dla czasu uruchamiania usługi na usługę? Mogę to zmienić za pomocą klucza rejestru ServicesPipeTimeout, ale to na maszynę ( http://support.microsoft.com/kb/824344).

W tej chwili jedyną rzeczą, o której myślałem, było wykonanie wszystkich czasochłonnych akcji startowych w innym wątku.

Author: Martin Vseticka, 2008-10-19

4 answers

Dobrą praktyką jest jak najszybsze uruchomienie usługi. Tak więc, podczas stanu start, Rób tylko to, czego absolutnie potrzebujesz, aby uznać, że rozpoczął się pomyślnie, a resztę zrób później. Jeśli start jest nadal długotrwałym procesem, użyj SetServiceStatusokresowo, aby poinformować Service Control Manager, że jeszcze nie zakończyłeś, więc usługa nie zostanie przerwana.

 38
Author: Rômulo Ceccon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-19 14:44:26

Zgadzam się z Romulo na zakończenie, aby rozpocząć usługę tak szybko, jak to możliwe. Jeśli jednak potrzebujesz czasu i używasz. NET Framework 2.0 lub nowszego, możesz rozważyć ServiceBase.Metoda RequestAdditionalTime ().

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

protected override void OnStart()
{
    this.RequestAdditionalTime(10000);
    // do your stuff
}
 81
Author: Hinek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-03 12:17:39

Po prostu zrób timeintensive rzeczy w innym wątku

   protected override void OnStart(string[] args)
    {
        var task = new Task(() =>
        {
            // Do stuff
        });
        base.OnStart(args);
        task.Start();
    }
 4
Author: LuckyLikey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-03 12:18:07

Miałem również do czynienia z usługą, która może zająć kilka sekund/minut, aby mieć dobry początek. Po uruchomieniu usługi próbuje połączyć się z serwerem SQL. Jednak gdy cały serwer został ponownie uruchomiony , moja usługa zaczynała się przed SQL Server. (Wiem o zależności od usługi, ale nie dotyczy to mojej sytuacji z konkretnego powodu....). Próbowałem zrobić pętlę próbując 10 razy połączyć się z serwerem SQL, ale Windows zabijał moją usługę przed drugą próbą, z powodu Przerwa.

Moje rozwiązanie : dodałem Timer w "onStart ()" mojej usługi. Następnie metoda "onTick ()" usługi próbowała 10 razy połączyć się z serwerem SQL (z oczekiwaniem 30). Koniec czasu na starcie.

Więc zasadniczo,

    Moja Służba zaczyna się za 5 sekund.
  • timer jest uruchamiany 10 sekund po wykonaniu usługi zaczęło się.
  • timer próbuje 10 razy [czekając 30 sekund za każdym razem], aby połącz się z SQL Serwer.
  • Jeśli się powiedzie, timer sam się wyłączy, jeśli nie (po 10 próbach), zatrzymam usługę.

Zwróć uwagę na bardziej elegancki sposób rozwiązania problemu, ale może jakaś część mojego rozwiązania może pomóc każdemu w tej samej sytuacji niż ja,

 1
Author: Simon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-02 12:23:19