Ответ 1
Чтобы отключить его для одного приложения
Перейдите в версии HKEY_LOCAL_MACHINE и HKEY_CURRENT_USER Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\your_application.exe и удалите запись FaultTolerantHeap.
Я недавно начал видеть эту строку в окне вывода Visual Studio 2005 при запуске приложения:
FTH: (7156): *** Отказоустойчивая перемычка кучи, применяемая к текущему процессу. Обычно это происходит из-за предыдущих сбоев. ***
Я попытался отключить отказоустойчивую кучу, используя инструкции здесь:
http://msdn.microsoft.com/en-us/library/dd744764(VS.85).aspx
Я использую 64-разрядную версию Windows 7, поэтому я внес изменения в 32-разрядные и 64-разрядные реестры и запустил команду Rundll32.exe fthsvc.dll, FthSysprepSpecialize, используя как 32 -битные и 64-разрядные версии Rundll32.exe.
Однако после перезагрузки я все еще получаю отказоустойчивую кучу при попытке отладки моего приложения!
Это настоящая проблема, поскольку она маскирует ошибку, которую я пытаюсь воспроизвести, а также убивает производительность.
Есть ли у кого-нибудь другие рекомендации, как отключить отказоустойчивую кучу?
Чтобы отключить его для одного приложения
Перейдите в версии HKEY_LOCAL_MACHINE и HKEY_CURRENT_USER Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\your_application.exe и удалите запись FaultTolerantHeap.
Задайте для этого значения реестра значение 0
:
HKEY_LOCAL_MACHINE\Software\Microsoft\FTH\Enabled
Вы можете добавить имя своего исполняемого файла в ExclusionList.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FTH\ExclusionList
Работает для меня.
Вы можете редактировать манифест приложения в исключая вашу программу из PCA
см. также: Как reset Помощник по совместимости программ для тестирования
"Rundll32.exe fthsvc.dll, FthSysprepSpecialize" ищет только очистить список приложений, помеченных в настоящее время. если ваше приложение все еще вызывает странности, FTH все равно должен вмешаться и взять на себя ответственность.
как уже упоминалось:
Задайте для этого значения реестра значение 0: HKEY_LOCAL_MACHINE\Software\Microsoft\FTH\Enabled
это должно отключить FTH для всей системы.
И столкнулся с этим. Переименование/удаление AcXtrnal.dll внутри Windows\AppPatch, похоже, работает на меня. Мне нравится, как это рекомендуемое Microsoft действие (которое я сделал первым) ничего не делает.
Мне также пришлось переименовать файл, потому что записи реестра, связанные с этим ключом, были пустыми применимыми данными. Я ожидаю, что они заселятся, если у вас есть неправильное приложение. Но в моем случае я отлаживал собственное приложение в Visual Studio. Поэтому в этом случае именно мой процесс каким-то образом загрузил FTH, работает ли служба FTH или нет. И на самом деле у меня не было приложений, которые ранее были помечены как неправильные.
Но я должен был следовать этим инструкциям:
http://billroper.livejournal.com/960825.html
потому что это не позволит мне переименовать файл, пока я не приобрел права собственности и не удостоился полного контроля.
У меня была похожая проблема при запуске модульного теста с использованием (Microsoft :: VisualStudio :: CppUnitTestFramework). Каким-то образом я нарушил некоторое выделение кучи, и в следующий раз, когда я попытался отладить, я получил сообщение: "Отказоустойчивая прокладка кучи применена к текущему процессу. Обычно это происходит из-за предыдущих сбоев". Среда отладки зависла.
Чтобы заставить его работать снова, мне пришлось удалить тестовый пример, перекомпилировать и добавить его снова и перекомпилировать, затем я мог установить точку останова и войти в тест.
Вы можете очистить список приложений, отслеживаемых FTH, не останавливая эту службу, выполнив следующие действия: