Подтвердить что ты не робот

Исключение справки при запуске службы

Я пишу серию сервисов Windows. Я хочу, чтобы они терпели неудачу, если ошибки запускались во время запуска (в методе OnStart()). Я предположил, что просто сделать ошибку в OnStart() будет делать это, но я нахожу, что вместо этого он "запускает" и представляет мне сообщение с сообщением "Служба запущена, но неактивна. Это правильно?" (Парафраз). Как обработать ошибку, чтобы на самом деле не удалось запустить службу?

4b9b3361

Ответ 2

Если главное, что вы хотите, для окна "Службы" сообщить, что произошла ошибка, из того, что я пробовал (.net 3.5 в Windows 7), единственный способ сделать это - установить ExitCode. Я рекомендую установить его на 13816, так как это приводит к сообщению "Неизвестная ошибка". Смотрите коды ошибок Windows.

Нижеприведенный пример выполняет три вещи. 1 - установка ExitCode приводит к полезному сообщению для конечного пользователя. Он не влияет на журнал приложений Windows, но включает сообщение в системном журнале. 2 - Вызов "Стоп" приводит к сообщению "Служба успешно остановлена" в журнале приложений. 3 - выброс исключения приводит к полезной записи журнала в журнале приложений.

protected override void OnStart(string[] args) {

  try {
    // Start your service
  }
  catch (Exception ex) {
    // Log exception
    this.ExitCode = 13816;
    this.Stop();
    throw;
  }

}

Ответ 3

Переместите всю логику запуска отдельному методу и исключите исключения (или вызовите OnStop) из этого отдельного метода.

При запуске OnStart имеет некоторые странности. Я обнаружил, что если OnStart() имеет не более одной строки в нем, то я не получаю "Службу запущенную, а затем остановлен. Некоторые службы автоматически останавливаются, если у них нет работы", а заброшенные исключения прекратят обрабатывать и регистрироваться в журнале событий приложения.

Также с помощью отдельного метода запуска вы можете использовать такую ​​технику, чтобы отлаживать ее без привязки. http://www.codeproject.com/KB/dotnet/DebugWinServices.aspx