Debugger.Launch() в службе Windows в Windows 8

После того, как я установил Windows 8, совершенно законное заявление больше не работает:

#if DEBUG
    Debugger.Launch();
#endif

Сервис начинает игнорировать эту вещь. Да, я создаю проект в режиме отладки.

если я изменю это на Debugger.Break() - служба просто выйдет из строя, и по-прежнему нет диалога для подключения отладчика.


person iLemming    schedule 20.08.2012    source источник
comment
Возможно ли, что отладчик уже подключен? Кроме того, вы требуете правильного разрешения? См. msdn.microsoft.com/en-us/library. /   -  person JP Alioto    schedule 21.08.2012
comment
да правильно. Я все еще могу поставить что-то вроде RequestAdditionalTime(10000); и подключить отладчик вручную. Но в Win7 на Debugger.Launch() появится всплывающее окно, в котором вы можете сказать, что я хочу подключить этот экземпляр VS, однако в Win8 это пропускается. Почему именно это я пытаюсь понять   -  person iLemming    schedule 21.08.2012


Ответы (3)


Debugger.Launch запустит приложение с визуальным графическим интерфейсом. По умолчанию службы не взаимодействуют с рабочим столом, поэтому все, что они делают, нельзя «увидеть».

Поддержка взаимодействия с рабочим столом постепенно удалялась из служб Windows (например, параметр «Взаимодействовать с рабочим столом» был удален из некоторых версий сервера). Я бы предположил, что они продолжили эту тенденцию.

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

Если вы хотите отладить службу, я предлагаю запустить ее как обычное приложение, чтобы вы могли выполнять такие действия, как запуск и отладка. Бессовестный плагин: вы можете посмотреть Разработка служб Windows в Visual Studio, чтобы узнать, как написать службу, которая это поддерживает.

person Peter Ritchie    schedule 04.09.2012
comment
Я знал, что Windows 8 создаст проблемы. :P Небольшой вопрос: как бы вы отладили OnInstall код для службы Windows, которая имеет свои собственные настраиваемые шаги установки? - person Shaamaan; 05.09.2012
comment
Я бы начал с изменения внешнего действия в настройках отладки проекта, чтобы использовать InstallUtil.exe. Это позволит вам установить службу различными способами и запустить ее с помощью отладчика. - person Peter Ritchie; 05.09.2012

Секрет заключается в изменении ключа реестра для JIT-отладчика Visual Studio с помощью следующего:

reg add "HKCR\AppID\{E62A7A31-6025-408E-87F6-81AEB0DC9347}" /v AppIDFlags /t REG_DWORD /d 8 /f

До внесения этого изменения значение на моей машине было 0x28. Вышеприведенное изменяет его на 0x8. По сути, он удаляет флаг 0x20.

Если вы выполните поиск во включаемых файлах Microsoft (WTypesbase.h), то обнаружите следующее:

#define APPIDREGFLAGS_IUSERVER_ACTIVATE_IN_CLIENT_SESSION_ONLY 0x20

После внесения этого изменения снова отображается окно отладки JIT. Я считаю, что все это связано с различными изменениями безопасности сеанса 0, внесенными Microsoft.

Источник из этого сообщения: http://forums.arcgis.com/threads/69842-Debugging-your-SOE-on-Windows-8

person blackdemon    schedule 29.05.2013
comment
Ответы должны быть автономными, поэтому предоставьте решение здесь. Вы по-прежнему можете ссылаться на форум, но это не должно быть единственным ответом. - person stefan; 29.05.2013
comment
Остерегайтесь опечатки в комментарии blackdemon. Это должно быть: reg add «HKCR\AppID\{E62A7A31-6025-408E-87F6-81AEB0DC9347}» /v AppIDFlags /t REG_DWORD /d 8 /f (отсутствует обратная косая черта). Мне понадобилось время, чтобы понять это ;) - person Grzegorz; 05.05.2016

Это приложение для Магазина Windows или настольное приложение?

Попробуйте щелкнуть правой кнопкой мыши свой проект (исполняемый проект С#, если это то, что у вас есть) и выбрать "Свойства". Затем на левой боковой панели параметров нажмите «Отладка». В разделе «Начать действие» установите флажок «Не запускать, а отлаживать мой код при запуске».

Теперь вы можете нажать F5 и запустить Visual Studio с точками останова в вашем коде, и он будет ждать, пока вы запустите процесс. Затем запустите приложение (вне Visual Studio), и Visual Studio подключит отладчик.

Не запускать параметр в свойствах

person Jennifer Marsman - MSFT    schedule 30.08.2012
comment
это ни... это служба Windows - person iLemming; 01.09.2012
comment
это как-то связано с самой Windows 8. Наверное, они что-то изменили. Я устанавливал SDK с инструментами отладки, пробовал менять значения реестра, всякие штуки - ничего не помогло. Служба по-прежнему игнорирует Debugger.Launch и дает сбой на Debugger.Break, даже если я помещаю ее в блок try..catch - person iLemming; 04.09.2012