Можно ли создать полный дамп памяти службы Windows при ее сбое? Очевидно, что есть известные посмертные отладчики, которые могут собрать дамп памяти сбойного процесса. Но проблема со службами Windows заключается в том, что они работают в системном контексте, а не в пользовательском. Кто-нибудь может мне помочь?
До сих пор я пробовал это с WinDbg:
- Я установил WinDbg в качестве посмертного отладчика по умолчанию, выполнив WinDbg -I.
- Я проверил, что в обоих местах реестра (HKLM\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\AeDebug и HKLM\SOFTWARE\Wow6432Node\Microsoft\WindowsNT\CurrentVersion\AeDebug) существуют две записи Auto и Debugger.
- Я настроил WinDbg для автоматической записи дампов памяти при запуске, изменив запись отладчика на «Путь\WinDbg.exe» -p %ld –c «.dump /ma /u D:\CrashDump.dmp» -e %ld –g
- Я убедился, что WinDbg имеет привилегии для целевого расположения файла дампа памяти с административными привилегиями и без них.
Но это не работает. :(
Если я пишу обычное приложение пользовательского режима, которое преднамеренно аварийно завершает работу после запуска, WinDbg всплывает и автоматически записывает файл .dmp в целевое расположение. Но если мой сервис падает, это не так. В диспетчере задач я вижу, что WinDbg запускается после сбоя процесса моей службы, но оба остаются в списке без файла дампа.