Вопрос

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

Это было полезно?

Решение

если вы используете .NET 2.0 или выше, вы можете использовать Сервисная база.Остановить чтобы остановить запуск службы при запуске.В противном случае вызовите Stop из нового потока.

ссылка [devnewsgroups] (http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic50404.aspx)

(группа новостей исчезла)

Другие советы

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

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

protected override void OnStart(string[] args) {

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

}

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top