Расширение оболочки отладки в Windows 7

Я пытаюсь отладить расширение оболочки (IContextMenu) в Windows 7 с помощью Visual C++ 2008. Я установил DesktopProcess=1 в реестре и установил хост-приложение для explorer.exe. Но когда я запускаю отладчик, он запускает explorer.exe, а затем отключается от процесса. DllMain расширения оболочки не вызывается.

Тот же код с точно такими же настройками без проблем запускается в отладчике в Windows XP + Visual C++ 2008.

Любые мысли, как отлаживать расширение оболочки в Win7?


person CodeSnake    schedule 26.08.2009    source источник


Ответы (5)


Попробуйте запустить проводник и ТОГДА подключить к нему отладчик.

person snowdude    schedule 10.09.2009

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

Сначала подготовьтесь — установите стартовую программу вашего проекта расширения оболочки как c:\windows\explorer.exe, а также установите ее как стартовый проект.

Затем, всякий раз, когда вы хотите отладить расширение оболочки, выполните следующие шаги:

  • Нажмите на панель задач и нажмите Alt-F4 — это вызовет диалоговое окно выключения.
  • Нажмите Ctrl-Alt-Shift-Escape — эта комбинация закроет проводник.
  • Используйте Alt-Tab, чтобы вернуться в Visual Studio, и нажмите F5 — проводник теперь запустится с прикрепленным к нему отладчиком VS с самого начала.
  • Когда закончите, просто остановите сеанс отладчика. Это убьет отлаженный экземпляр проводника, а также автоматически запустит его обычный экземпляр. Это также разблокирует DLL-расширение оболочки, чтобы вы могли собрать его снова.

Предостережение в Vista и 7 — обязательно запускайте Visual Studio, который вы используете для отладки, в режиме без прав администратора (без повышенных прав), чтобы проводник запускался в обычном режиме без повышенных прав.

person Stefan Dragnev    schedule 07.06.2012

Вы можете попробовать поместить вызов DebugBreak() в свой код. Это должно запускать своевременный отладчик при вызове и давать вам представление о том, что происходит.

person Corwin Joy    schedule 29.09.2009
comment
Только что попробовал. Это заставляет explorer.exe перезапускаться в цикле, мне почти пришлось принудительно перезагрузить компьютер - person Thomas Levesque; 26.01.2016

Вы должны взглянуть на gflags.exe, часть стандартных инструментов отладки sdk. У него есть все параметры, необходимые для настройки (глобальных) флагов для запуска любого процесса/служб/кучи/пометки пула/stacktrace-on-allocation и т. д.

person RandomNickName42    schedule 30.09.2009

Отладка Explorer.exe обычно является излишней для расширений, работающих в представлении оболочки.

Лично я использую созданное мной небольшое приложение, в котором размещается экземпляр IExplorerBrowser аналогично в этом примере. Если ваш элемент IContextMenu не является элементом по умолчанию, вы можете просто использовать Notepad.exe и его диалоговое окно открытия файла...

person Anders    schedule 02.01.2017