Как вы отлаживаете устанавливаемую службу Windows? - PullRequest
3 голосов
/ 09 апреля 2010

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

  1. Установка Thread.Sleep (TimeSpan.FromSeconds (30)); в начале запуска, но когда я пытаюсь подключиться в Visual Studio, имя службы не отображается в качестве параметра. Обычно это работает, имя службы отображается в списке, но при использовании установщика это не так.

  2. Настройка Debugger.Break и Debugger.Launch. Никто на самом деле ничего не делает.

Что я могу сделать для отладки моего сервиса?

Обновление:

Я добавил Thread.Sleep на 30 секунд в качестве первой строки службы, и когда установщик запрашивает у меня, что ему следует делать в случае сбоя, я запускаю службу в списке служб (поскольку она не был удален), и это не удалось мгновенно, без ожидания 30 секунд. Файлы, которые он устанавливает, являются самыми последними (у них есть правильное время изменения). 30-секундная пауза возникает, если я запускаю тот же клиент из моего тестового приложения в том же проекте, но по какой-то причине установщик что-то напортачит

Я действительно не уверен, как отладить это, и расстраивает то, что этот сервис работал нормально.

Ответ:

Проверка журнала приложения показала, что было выброшено исключение. Оказалось, что я случайно скопировал файл в своем инсталляторе, что объясняет, почему ни один из моих методов отладки не работал. После того, как я восстановил файл, я смог присоединиться к Visual Studio как обычно (используя 30-секундную паузу, чтобы дать мне время).

Ответы [ 3 ]

2 голосов
/ 09 апреля 2010
  1. В services.msc щелкните правой кнопкой мыши свой сервис и выберите свойства.
  2. На вкладке «Вход в систему» ​​разрешено взаимодействие службы с рабочим столом.
  3. Добавьте что-то вроде Debug.Assert(false, "attach now"); в метод OnStart вашей ServiceBase.
  4. Присоединитесь к процессу и нажмите игнорировать в диалоговом окне подтверждения.

Редактировать 1: Вещи, которые происходят со мной, в произвольном порядке;

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

Используйте программу просмотра событий, чтобы проверить журнал приложений.

Если проблема возникает в процессе установки, в InstallUtil.InstallLog или {assemblyname} .InstallLog может содержаться некоторая информация, которая будет в том же каталоге, что и .exe.

Я делаю это с моего ноутбука с Linux, поэтому я немного нечеткий.

Редактировать 2:

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

1 голос
/ 09 апреля 2010

Вот несколько ссылок, которые помогут вам устранить неполадки, возникающие при запуске службы Windows в производственной среде, где у вас нет VS.NET. Это также может быть использовано в Dev.

  1. Первый
  2. Второй
1 голос
/ 09 апреля 2010

При подключении отладчика VS убедитесь, что установлен флажок «Показывать процессы от всех пользователей». Возможно, ваша служба работает в режиме локальной службы или локальной системы.

...