Служба Windows не запускается после установки - PullRequest
3 голосов
/ 23 декабря 2010

Я создал одну службу Windows, которая отправляет электронную почту через каждые 30 минут в C #.Режим запуска службы установлен на Автоматический.Но все равно окна не запускаются автоматически.Мне нужно начать вручную, зайдя в Services.msc и щелкнув правой кнопкой мыши по сервису и выбрав start

Ответы [ 4 ]

5 голосов
/ 23 декабря 2010

Если для StartMode задано автоматическое значение, это означает, что он будет запускаться при загрузке Windows.

Вы можете запустить службу самостоятельно, выполнив пользовательское действие в программе установки.Я предполагаю, что у вас уже есть класс Installer, и это уже настраиваемое действие для вашего проекта установки, поскольку служба устанавливается, но не запускается.

Переопределите метод OnAfterInstall в имеющемся у вас классе Installer, и вы можете запуститьсервис, подобный следующему:

protected override void OnAfterInstall(IDictionary savedState) {
    base.OnAfterInstall(savedState);

    ServiceController sc = new ServiceController(“MyServiceName”);
    sc.Start();
}

Однако запланированное задание - неплохой путь.

4 голосов
/ 23 декабря 2010

Зачем проходить через все затраты и страдания от устранения неполадок и обслуживания службы Windows для приложения, основанного на времени / опросе? ОС Windows имеет встроенную поддержку для этого. Просто создайте простое консольное приложение. Запустите его как запланированное задание.

У вас уже должны быть модульные тесты и разделение, чтобы сделать код модульно-тестируемым. Если вы этого не сделаете, устранение неполадок будет слишком сложным. Если у вас есть код в этом формате для тестирования модулей, переключение в консольное приложение не составляет труда.

Я знал парня, который сделал все для Windows и назвал его SOA. Накапливание служб Windows для механизмов опроса / времени не является SOA. Он настолько неаккуратен по сравнению с консольными приложениями и так сложен в обслуживании, что даже не могу выразить, насколько это плохая идея. Мне пришлось иметь дело с ~ 20-30 из этих выигрышных сервисов, и как только они были преобразованы в n-ярусное и консольное приложение, внезапно стабильность приложения пошла вверх и моя жизнь стала в 10 раз легче. Поэтому, пожалуйста, сделайте себе одолжение и послушайте кого-то, кто прошел через месяцы и много итераций этих типов приложений. Запустите его как запланированное задание в консольном приложении.

2 голосов
/ 23 декабря 2010

При автоматическом запуске служб возникают проблемы с порядком инициализации службы. У вас много зависимостей, например, стек TCP / IP должен быть в рабочем состоянии, прежде чем пытаться отправить электронное письмо, например. Найдите в журнале событий Windows сообщение об исключении, которое не позволяет OnStart () запустить службу.

Это можно настроить для службы, см., Например, вкладку «Зависимости» для службы диспетчера очереди печати. Однако с этим трудно справиться, сложно точно определить, какие службы должны работать и , сложно написать записи реестра, которые настраивают зависимости.

Решите проблему: не отправляйте электронное сообщение сразу. Подождите, например, 30 минут.

0 голосов
/ 23 декабря 2010

Вы устанавливаете его с помощью installutil? Вы правы, служба не запускается, даже если она установлена ​​автоматически. На вашем месте я бы предоставил командный файл, который вызывает installutil, а затем также запускает «net start what». Или, если вы используете другие виды установки, они также должны предоставить эту возможность.

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