Спросите экспертов

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

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

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

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

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

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

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

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

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

Брюс ответ:

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

Оболочка Windows

Проводник 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 Explorer> Упорядочить> Папка и параметры поиска в Vista / 7. В Windows 8 и более поздних версиях откройте Проводник> Вид> Параметры> Изменить папку и параметры поиска . Выберите вкладку «Вид» и установите флажок « Запустить окна папок» в отдельном процессе .

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

Изменение этого параметра изолирует процесс рабочего стола от всех других окон 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> OK, чтобы запустить консоль управления с модулем services. Прокрутите вниз до Windows Search и дважды щелкните запись, чтобы открыть диалоговое окно «Свойства». Убедитесь, что настройки на вкладке Восстановление соответствуют изображению ниже.

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

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

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

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

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

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

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

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

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

Installed-vcpp-Redist

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

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

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

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

Вывод

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

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

Похожие посты
WindowsСпросите экспертов

Как отключить автоматическое обновление приложений в Windows 10

БезопасностьСпросите экспертов

Как просто и эффективно справиться с троянами удаленного доступа

Спросите экспертов

Как мне разблокировать Sprint IPhone 6?

Спросите экспертов

Как писать запросы Microsoft Access SQL с нуля