Как исправить ошибки времени выполнения Windows Visual C ++

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

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

Вопрос нашего читателя:

Как исправить проблему 32-битной C: \ Windows \ explorer.exe в Windows Vista на Dell Inspiron 530?

После нажатия кнопки OK в диалоговом окне, показанном на снимке экрана, экран станет черным и вернется к нормальному режиму работы, но он не позволит мне получить доступ к дискам C, D и, иногда, к диску E при попытке получить к ним доступ. с моего компьютера.

Бег SFC / SCANNOW не находит никаких ошибок. Я загружал обновления с веб-сайтов Dell и Microsoft, пытаясь решить эту проблему. Я также установил распространяемый пакет Microsoft Visual C ++ 2010 (x86). ПК полностью обновлен в соответствии с Windows Update.

ошибка выполнения

Ответ Брюса:

Примечание. Дискуссии о проводнике Windows в Windows 7 и более ранних версиях также применимы к проводнику Windows 8 и более поздних версий. Если между ними есть заметная разница, это будет указано явно.

Оболочка Windows

проводник Виндоус является оболочка и запускается как процесс explorer.exe, как это видно в диспетчере задач или проводнике процессов Sysinternals

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

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

Расширяемая оболочка

Расширения оболочки позволяют программистам легко добавлять функциональные возможности в Проводник Windows, написав DLL для выполнения задачи и зарегистрировав DLL в операционной системе, так что Explorer знает, где найти код для выполнения задачи. Например, 7-Zip

добавляет подменю в стандартное контекстное меню, предоставляя быстрый доступ к задачам обработки архивов, Hard Disk Sentinel

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

контекстное меню

Многие из этих расширений оболочки реализованы как серверы внутрипроцессной объектной модели (COM). Это означает, что когда процесс, в данном случае проводник Windows, использует расширение, он не будет отображаться в диспетчере задач или в проводнике процессов как отдельный запущенный процесс со своим собственным идентификатором процесса (PID). Вместо этого он выполняется внутри вызывающего процесса explorer.exe.

Процесс единственного экземпляра по умолчанию

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

Такое поведение позволяет уменьшить объем используемой памяти, но также может внести свой собственный небольшой поворот при устранении неполадок. Критическая ошибка или необработанное исключение в коде, выполняемом в процессе explorer.exe, включая внутрипроцессные серверы, предоставляемые библиотеками DLL, приведут к падению всей среды рабочего стола.

В большинстве случаев процесс рабочего стола будет автоматически перезапущен. Если он не перезапускается, вы все равно сможете использовать Ctrl-Shift-Esc для вызова диспетчера задач. Оттуда, перейдите к Файл> Новая задача (Выполнить…)> тип explorer.exe> ​​ОК перезапустить процесс.

Этого можно избежать с помощью простого изменения. открыто Проводник Windows> Упорядочить> Папка и параметры поиска в Vista / 7. Для Windows 8 и новее откройте Проводник> Вид> Параметры> Изменить папку и параметры поиска. Выберите Посмотреть вкладку и проверить Запускать папки windows в отдельном процессе.

свойства папки

Изменение этого параметра изолирует ваш рабочий стол от всех других окон Windows Explorer, которые вы открыли. В случае сбоя любого из этих окон Explorer ваш рабочий стол останется невредимым.

Библиотека времени выполнения Microsoft Visual C ++ (CRT)

Библиотека времени выполнения Microsoft Visual C ++ предоставляет процедуры для программирования Windows, которые автоматизируют многие задачи, такие как ввод / вывод, манипулирование файлами, выделение памяти, системные вызовы и многие другие.

В каждой установке Windows будет установлено как минимум две разные версии CRT. На новой версии Vista SP2 и Windows 10 будут представлены версии 8.0 и 9.0 (соответственно, VC 2005 и VC 2008). Если установлено дополнительное программное обеспечение, оно также может включать более свежие версии сред выполнения, в зависимости от того, какая версия Visual C ++ использовалась для создания программы или каких-либо ее компонентов.

Ошибки во время выполнения

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

Когда пользователь нажимает кнопку ОК, процесс будет остановлен. Если в программе определено поведение при сбое, например, в критических службах, или если состояние ее выполнения контролируется другим процессом, она может автоматически вызываться. Это то, что происходит в этом случае. Экран отключается при завершении процесса explorer.exe, затем рабочий стол возвращается после перезапуска процесса explorer.exe.

Хотя приведенное выше сообщение об ошибке четко указывает на то, что оно было получено в процессе explorer.exe, оно вряд ли является проблемой для самого explorer.exe. Скорее всего, виновник лежит в другом месте, например, стороннем расширении, используемом Explorer.

Другие соображения

С описанием вышеизложенного нашего читателя, есть несколько дополнительных моментов, которые мы должны принять во внимание:

  • Во время сбоя Explorer пытался, но не смог, заполнить список.
  • Неспособность получить доступ к дискам после того, как настольный компьютер возродился, может указывать на то, что другой процесс заблокировал одно или несколько из этих устройств, что препятствует доступу к недавно созданному процессу explorer.exe.
  • Бег SFC / SCANNOW и получив чистый счет за здоровье, отбрасывает защищенные ресурсы Windows в конец списка для рассмотрения. Другие причины гораздо более вероятны.

Исправления в

В данном конкретном случае есть три области, в которых я бы искал решение. Первый включает службу поиска Windows, второй — исследование расширений оболочки, а последним будут сами распространяемые файлы VC ++.

Windows Search

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

Нажмите Win + R> тип services.msc> ОК запустить консоль управления с сервисным модулем. Прокрутите вниз до поиска Windows и дважды щелкните запись, чтобы открыть диалоговое окно «Свойства». Убедитесь, что настройки на вкладке Восстановление соответствуют изображению ниже.

окна-поиск недвижимость

Наиболее распространенной проблемой является настройка «Перезапустить службу после:». Эта ошибка часто возникает, когда этот параметр не равен нулю.

Проблемные расширения оболочки

Загрузите Nirsoft ShellExView для архитектуры вашей системы (x86 или x64), установите и запустите ее. Потребуется немного времени, чтобы изучить систему и заполнить таблицу данными. Прокрутите до столбца CLSID Modified Time и щелкните заголовок, чтобы отсортировать это поле. Если вы хотите исключить модули, предоставляемые Microsoft, вы можете перейти на Параметры> Скрыть все расширения Microsoft. Для тех, кто использует 64-битную версию Windows, вы также можете показать 32-битные расширения в системе, перейдя в Параметры> Показать 32-разрядные расширения оболочки.

Ищите расширения, которые были добавлены непосредственно перед тем, как начались симптомы. Выберите один или несколько и нажмите F7 или перейти к Файл> Отключить выбранные элементы, или нажмите на красный светодиодный значок на панели инструментов. В идеале это должно быть сделано по одному.

Проверьте, сохраняются ли симптомы. Если это так, вы можете снова включить ранее отключенные расширения с помощью F8, Файл> Включить выбранные элементы, или зеленый светодиодный значок на панели инструментов. Отсюда отключите другое расширение и повторяйте процесс тестирования, пока не найдете тот, который вызывает проблему.

Восстановить / переустановить распространяемые VC ++

Я использую это как последнее средство, если только одна программа выдает ошибки. Если у вас есть несколько программ, которые имеют проблемы с ошибками во время выполнения VC ++, вы можете попробовать это в первую очередь.

При просмотре установленных программ в моей системе (Панель управления> Программы и компоненты), он показывает каждую версию распространяемых пакетов (и некоторые их обновления) в диапазоне от версии 8 до версии 12 (VC ++ 2005 — VC ++ 2013). Я установил их из-за используемых мной инструментов программирования Microsoft. Большинство пользователей не будут иметь все это.

установлен-vcpp-Redist

Вы можете найти последние загрузки для поддерживаемых версий Visual C ++ от Microsoft. Для наших целей вам нужно иметь дело только с теми, которые помечены как «распространяемые» пакеты. Ссылки, которые классифицируются как пакеты обновления, предназначены для инструментов программирования, а не просто для времени выполнения. Вам понадобятся только те, которые в данный момент перечислены в установленных программах в вашей системе. Установка других версий не поможет в этом случае. Пользователям 64-разрядных операционных систем могут понадобиться как x86, так и x64 версии CRT.

Центр обновления Windows проверяет, установлены ли на вашем компьютере последние обновления для этих пакетов, но не проверяет, правильно ли он установлен и не сломан. Установщики могут проверить правильность всех файлов времени выполнения и правильность всех записей реестра.

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

Если вы хотите попробовать самый экстремальный метод, вы можете удалить среды выполнения, перезагрузить компьютер, а затем переустановить их. Я не рекомендую этот метод в 2005 и 2008 годах. Без них Windows будет генерировать много ошибок, и при перезагрузке вам не хватит функциональности.

Заключение

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

Вы сталкивались с ошибками во время выполнения в вашей системе? Что требовалось для их решения? Позвольте мне знать в комментариях ниже.

Ссылка на основную публикацию
Adblock
detector