Как заставить Службу Windows завершать работу, когда завершается один из ее подпотоков - PullRequest
1 голос
/ 17 декабря 2009

в вызове ServiceStart () службы Windows я создаю поток и запускаю его.
Thread1 = New TThread1 (false)

В процедуре Execute подпотока есть цикл, который выполняется вечно и выполняет то, что должен делать сервис.

Проблема в том, что когда я получаю сообщение об ошибке в этом потоке, я хочу завершить поток и остановить службу тоже.

Как заставить службу останавливаться, если запущенный поток останавливается (завершается с ошибкой).

Ответы [ 3 ]

1 голос
/ 17 декабря 2009

Возможность использования сторожевых таймеров: в вашей ветке вы сбрасываете таймер (например, каждый раз, когда вы входите в цикл). когда интервал таймера истек, вы знаете, что поток, вероятно, больше не работает, поэтому вы можете перезапустить службу или что-то еще ...

0 голосов
/ 28 декабря 2009

позвонить, чтобы остановить сервис:

        bool StopService(string svr_name)
        {
            bool ret = false;
            if (svr_name.Length > 0)
            {
                try
                {
                    ServiceController sc = new ServiceController(svr_name);

                    if (sc.Status == ServiceControllerStatus.Stopped)
                    {
                        return true;
                    }
                    sc.Stop();
                }
                catch (Exception)
                {
                    return false;
                }
            }
            return ret;
        }
0 голосов
/ 17 декабря 2009

Лучшим подходом может быть перехват исключений в потоке и их регистрация. Или вы можете поймать исключение, зарегистрировать его, а затем остановить службу. Таким образом, вы контролируете остановку службы, а также немного разбираетесь в генерируемых ошибках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...