Как вы отлаживаете устанавливаемую службу Windows?

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

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

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

Что я могу сделать, чтобы отладить мой сервис?

Обновить:

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

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

Ответ:

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

3 ответа

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

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

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

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

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

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

Изменить 2:

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

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

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

  1. Первый
  2. второй
Другие вопросы по тегам