Ошибка выполнения 217 может стать большой проблемой, если вы используете свой компьютер в деловых целях и в вашей системе хранятся конфиденциальные данные / документы.
Эта ошибка времени выполнения довольно опасна. Это может снизить производительность вашего ПК, привести к сбою и сбою системы, сделать вашу систему уязвимой для хакерских атак, а также повредить важные файлы в вашей системе.
Решения
Причины ошибок
За ошибкой 217 во время выполнения не существует одной конкретной причины. Эту ошибку можно отнести к нескольким факторам, таким как:
- Поврежденные, отсутствующие или неисправные регистровые библиотеки DLL программ. Обычно это является причиной ошибки выполнения 217, когда установка не удалась и важные системные файлы не могут быть зарегистрированы в реестре.
- Воздействие вирусов, таких как вредоносное, рекламное и шпионское ПО. Как только вирус (ы) получит доступ к вашему компьютеру, вы можете столкнуться с ошибкой выполнения 217. Эти вредоносные программы могут повредить ваш жесткий диск, загрузочные секторы, банки памяти и реестры.
- Устаревший файл Msvcrt.dll (файл Microsoft Visual C ++) называется.
- Неверные региональные настройки
Дополнительная информация и ручной ремонт
Если вы видите сообщение Runtime Error 217, всплывающее на экране вашего компьютера, вы должны немедленно исправить и исправить его, прежде чем оно станет большой угрозой для вас и вашего компьютера.
Хотя Runtime Error 217 настораживает, это не означает, что вам нужно паниковать. Сохраняйте спокойствие и следуйте рекомендуемым решениям для исправления ошибки выполнения 217, приведенным ниже.
- Если ошибка возникает из-за того, что вы вызвали устаревший файл Msvcrt.dll, необходимо обновить файл. Это легко сделать, щелкнув меню «Пуск», войдя в панель управления и выбрав вкладку «Обновление Windows».
- При возникновении ошибки выполнения 217 из-за неправильных региональных настроек на вашем компьютере, чтобы решить эту проблему, просто перейдите в меню «Пуск» и выберите «Панель управления». Теперь на панели управления вы найдете параметр часов, нажмите на него и перейдите к настройкам языка и региона. Выберите свои региональные настройки и сохраните.
- Если причиной ошибки выполнения 217 являются неправильные записи в реестре и повреждение файлов DLL, то для исправления ошибки необходимо: скачать исправление ошибки Runtime 217, После того, как вы загрузите этот инструмент для ремонта, запустите его на своем ПК. Он сканирует и обнаруживает поврежденные файлы и быстро исправляет ошибку.
- Тем не менее, если причиной этой проблемы является вирус, вам необходимо установить мощную антивирусную программу. Когда вы запускаете его, антивирус проверяет ваш компьютер на вирусы. После завершения сканирования результаты отображаются на экране. Результаты показывают, сколько именно вирусов установлено на вашем компьютере. После завершения сканирования удалите все файлы и нажмите «Восстановить».
Независимо от того, испытывали ли вы Runtime Error 217 на вашем компьютере или нет, рекомендуется устанавливать мощный антивирус и запускать его каждый раз, когда вы используете свой компьютер.
Регулярно запуская его, вы можете быть уверены, что не подвергаетесь воздействию вирусов, вредоносных и шпионских программ.
Даже если ваш компьютер заражен ими, вы можете удалить их своевременно, прежде чем будет нанесен ущерб.
Вам нужна помощь с вашим устройством?
Наша команда экспертов может помочь
Специалисты Troubleshoot.Tech всегда готовы помочь вам!
Замените поврежденные файлы
Восстановить производительность
Удалить вредоносные программы
ПОЛУЧИТЬ ПОМОЩЬ
Специалисты Troubleshoot.Tech работают со всеми версиями Microsoft Windows, включая Windows 11, с Android, Mac и другими.
Поделиться этой статьей:
Вас также может заинтересовать
Если вы столкнулись с ошибкой «Программе установки не удалось определить поддерживаемые варианты установки» при попытке понизить или обновить компьютер с Windows 10, это означает, что в процессе установки возникли некоторые проблемы совместимости, и Windows не смогла ни понизить, ни обновить до другая версия. Обычно эта ошибка возникает, когда вы используете встроенные параметры обновления Windows 10 или перехода на другую версию Windows. Этот вариант чаще всего используется, поскольку он сохраняет пользовательские настройки, а также данные нетронутыми. Таким образом, вам нужно помнить о многих параметрах, прежде чем приступить к установке, потому что, если в процессе возникнет какой-либо конфликт, вы, конечно же, не сможете понизить или обновить свой компьютер с Windows. Чтобы решить эту проблему, вот несколько советов, которые могут помочь.
Вариант 1. Попробуйте запустить в режиме совместимости.
Это первое, что вы можете попытаться решить, вместо того чтобы приступить к созданию загрузочного устройства. Поэтому, если вы понижаете версию Windows, вы можете попробовать запустить установщик в режиме совместимости для этой конкретной версии Windows.
- Ищите установочный файл.
- Найдя его, щелкните его правой кнопкой мыши и выберите «Свойства» в контекстном меню.
- После этого перейдите на вкладку «Совместимость» и установите флажок «Запустить эту программу в режиме совместимости для:» и в раскрывающемся списке выберите либо Windows 7, либо Windows 8.
- Вы также должны проверить опцию «Запуск от имени администратора».
- Теперь нажмите кнопку «Применить», затем нажмите «ОК», чтобы сохранить внесенные изменения и проверить, решена ли проблема или нет.
Вариант 2 — Вариант 2 — Попробуйте устранить неполадки совместимости
Эта опция почти такая же, как и первая, за исключением того, что это альтернативный способ исправления ошибки «Программа установки не смогла определить поддерживаемые варианты установки» в случае, если первая не сработала. В этом варианте вы устраните проблему совместимости.
- Ищите установочный файл.
- Затем щелкните его правой кнопкой мыши и выберите «Устранение неполадок совместимости» в контекстном меню.
- После этого нажмите «Попробовать рекомендуемые настройки». Как только процесс завершен, сообщение об ошибке должно исчезнуть.
Вариант 3. Попробуйте использовать установочный файл вместо изображения.
Если вы используете ISO-образ Windows для установки, вы можете попробовать запустить установочный файл. Это связано с тем, что, когда вы пытаетесь установить Windows напрямую из файла образа, он должен быть сначала загружен в виртуальный привод компакт-дисков, а затем оттуда выполняются дальнейшие операции. Таким образом, вы можете просто обойти этот механизм, чтобы избежать появления ошибки «Программа установки не смогла определить поддерживаемые варианты установки».
- Сначала вам нужно извлечь файл с диска в доступное место.
- После этого перейдите в Источники> Setup.exe.
- Теперь запустите установочный файл для обновления или понижения версии Windows. Просто убедитесь, что вы запускаете установочный файл от имени администратора.
Вариант 4. Попробуйте выполнить обновление или понижение версии в состоянии чистой загрузки.
Перевод компьютера в состояние «чистой загрузки» также может помочь, если вы хотите без проблем обновить или понизить версию Windows, поскольку в этом состоянии вы можете запустить систему с минимальным количеством драйверов и программ, которые, несомненно, помогут вам. в выявлении первопричины проблемы.
- Войдите на свой компьютер как администратор.
- Введите MSConfig в Начальном поиске, чтобы открыть утилиту конфигурации системы.
- Оттуда перейдите на вкладку Общие и нажмите «Выборочный запуск».
- Снимите флажок «Загрузить элементы запуска» и убедитесь, что установлены флажки «Загрузить системные службы» и «Использовать исходную конфигурацию загрузки».
- Затем щелкните вкладку «Службы» и установите флажок «Скрыть все службы Microsoft».
- Нажмите Отключить все.
- Нажмите Apply / OK и перезагрузите компьютер. (Это переведет ваш компьютер в состояние чистой загрузки. И настройте Windows на обычный запуск, просто отмените изменения.)
- После этого попробуйте установить обновления Windows или обновить снова.
Вариант 5. Попробуйте использовать инструмент создания мультимедиа.
Средство создания мультимедиа в Windows позволяет использовать установочный файл ISO для создания загрузочного устройства, которое можно использовать для установки Windows на свой компьютер. Обратите внимание, что это немного отличается от обычного процесса установки, поскольку он может стереть текущие настройки вашего компьютера и данные на основном диске. Таким образом, прежде чем продолжить, вам необходимо сделать резервную копию всех ваших данных на какой-нибудь съемный диск, а затем использовать Media Creation Tool для создания загрузочного диска.
- После создания загрузочного диска вам необходимо подключить его к компьютеру, а затем перезагрузить.
- Затем нажмите клавишу F10 или Esc, чтобы открыть параметры загрузки.
- Теперь установите приоритет загрузки съемного диска на самый высокий. После завершения установки следуйте следующим инструкциям на экране и без проблем установите Windows.
Узнать больше
В Windows 10 есть встроенный инструмент «Утилита очистки диска», который может помочь вам восстановить место на жестком диске, удалив временные файлы, эскизы, старые файлы Windows, журналы обновления Windows, файлы оптимизации доставки и многое другое. Однако время от времени этот встроенный инструмент также испытывает некоторые проблемы. Одна из этих проблем заключается в том, что он зависает в очистке Центра обновления Windows. Читайте дальше, чтобы узнать, что вы можете сделать в таком случае. Когда утилита очистки диска зависает в очистке Центра обновления Windows, процесс может быть медленным и может занять много времени при очистке файлов. В этом случае нажмите «Отмена», чтобы закрыть диалоговое окно. После этого попробуйте снова запустить средство очистки диска от имени администратора и проверьте, остались ли файлы, которые вы хотите очистить, или нет. Если его нет, это означает, что очистка была выполнена, в противном случае вам необходимо обратиться к вариантам, приведенным ниже.
Вариант 1. Попробуйте вручную удалить содержимое папки SoftwareDistribution.
- Откройте меню WinX.
- Оттуда откройте командную строку от имени администратора.
- Затем введите следующую команду — не забудьте нажать Enter сразу после ввода каждого из них.
net stop wuauserv
net start cryptSvc
чистые стартовые биты
net start msiserver
- После ввода этих команд он остановит службу обновления Windows, фоновую интеллектуальную службу передачи (BITS), криптографию и установщик MSI.
- Затем перейдите в папку C: / Windows / SoftwareDistribution и избавьтесь от всех папок и файлов, нажав клавиши Ctrl + A, чтобы выбрать их все, а затем нажмите «Удалить». Обратите внимание: если файлы уже используются, вы не сможете их удалить.
После сброса папки SoftwareDistribution вам необходимо сбросить папку Catroot2, чтобы перезапустить только что остановленные службы. Для этого выполните следующие действия:
- Введите каждую из следующих команд.
net start wuauserv
net start cryptSvc
чистые стартовые биты
net start msiserver
- После этого выйдите из командной строки и перезагрузите компьютер, а затем попробуйте еще раз запустить Центр обновления Windows.
Вариант 2 — Попробуйте вручную удалить содержимое папки Windows.old
Папка Windows.old — это папка, в которой на момент обновления хранится более старая версия Windows. Это действительно полезно, когда вы хотите вернуться к предыдущей версии Windows 10. Таким образом, вы можете удалить файлы Windows.old, если инструмент очистки завис.
Вариант 3. Попробуйте запустить очистку диска в состоянии чистой загрузки или в безопасном режиме.
Еще одна вещь, которую вы можете попробовать — перезагрузить компьютер в чистом состоянии загрузки или в безопасном режиме. Скорее всего, есть некоторые программы, которые препятствуют правильной работе утилиты очистки диска. После того, как вы перезагрузите компьютер в чистом состоянии загрузки или в безопасном режиме, попробуйте снова запустить средство очистки диска и посмотреть, работает ли он сейчас или нет.
Вариант 4. Запустите средство устранения неполадок Центра обновления Windows.
Вы также можете запустить средство устранения неполадок Центра обновления Windows, поскольку это также может помочь в устранении этой проблемы. Чтобы запустить его, перейдите в «Настройки», а затем выберите «Устранение неполадок» в настройках. Оттуда нажмите Центр обновления Windows, а затем нажмите кнопку «Запустить средство устранения неполадок». После этого следуйте следующим инструкциям на экране, и все будет хорошо.
Вариант 5. Запустите инструмент DISM, чтобы исправить повреждение в хранилище компонентов.
Вы можете попробовать запустить инструмент управления развертыванием образов и обслуживания или DISM, чтобы исправить ошибку синего экрана Wdf01000.sys. Используя этот встроенный инструмент, у вас есть различные опции, такие как «/ ScanHealth», «/ CheckHealth» и «/ RestoreHealth».
- Откройте командную строку с правами администратора.
- Затем введите следующие команды и обязательно нажмите Enter сразу после ввода каждой из них:
- Dism / Online / Очистка-изображение / CheckHealth
- Dism / Online / Очистка-изображение / ScanHealth
- exe / Online / Cleanup-image / Восстановление здоровья
- Не закрывайте окно, если процесс занимает некоторое время, поскольку, вероятно, он займет несколько минут.
Узнать больше
Приложения по умолчанию в предыдущих версиях Windows были довольно простым процессом. Пользователь заходил в настройки приложения и выбирал для каждой категории, какое приложение он хотел бы выбрать из списка установленных. В Windows 11 мало что изменилось. В этой статье мы покажем вам, как выбрать интернет-браузер по умолчанию в Windows 11, и, к сожалению, это более утомительная задача, чем в предыдущих версиях.
Выбор браузера по умолчанию в настройках
Как и в предыдущих версиях операционной системы Windows, вам нужно будет использовать приложение настроек, чтобы изменить интернет-браузер по умолчанию. Ранее в Windows 10 различные общие категории, такие как электронная почта, веб-браузер и средство просмотра фотографий, были перечислены в разделе «Приложения по умолчанию» на панели «Настройки». Было легко щелкнуть одну из этих категорий и выбрать вариант, который вам больше всего нравится, в небольшом всплывающем окне с предложениями. В Windows 11 Insider Build вы увидите неуклюжий список отдельных файлов или типов ссылок, для которых вам нужно будет указать предпочтительный браузер. Типы включают: HTM, HTML, PDF, SHTML, SVG, WEBP, SHT, FTP, HTTP и HTTPS. Существуют дополнительные необязательные типы, для которых вы также можете указать предпочтительный браузер. Проблема здесь в том, что для того, чтобы использовать один браузер, который используют большинство пользователей, вам придется просмотреть каждый тип файла и установить предпочтительный. Я действительно не уверен, почему это было введено или почему это должно быть именно так, все, что я могу сделать, это надеяться, что в окончательном выпуске Windows 11 эта функция будет отменена, как это было раньше, и что вы можете установить значение по умолчанию. Браузер всего в один клик.
Узнать больше
Что такое код ошибки 37?
Код ошибки 37 — это код ошибки диспетчера устройств, с которым вы можете столкнуться, когда не можете использовать установленное оборудование на вашем ПК. Он появится на вашем экране со следующим дисплеем:
«Windows не может инициализировать драйвер устройства для этого оборудования. (Код 37) »
Если вы получили вышеуказанное сообщение, это означает, что вашей операционной системе не удалось подтвердить драйверы для определенного периферийного устройства.
Решения
Причины ошибок
Код ошибки 37 в основном возникает из-за повреждения драйвера устройства. Однако есть и другие факторы, которые могут вызвать этот код ошибки, некоторые из которых следующие:
- Недостающие драйверы устройств
- Устаревшие драйверы устройств
- Наличие вредоносного или шпионского ПО в системе
- Данное устройство несовместимо с вашим ПК
Повреждение драйвера устройства или другое повреждение данных не является редкостью и является частью повседневного использования ПК.
Начиная с неправильной установки и заканчивая неожиданным отключением, обычно генерируемые ошибки данных считаются основной причиной ошибок.
Дополнительная информация и ручной ремонт
Как и большинство кодов ошибок ПК, избавиться от кода ошибок 37 не так уж и сложно. Есть много методов DIY, которые вы можете попробовать, чтобы ваш компьютер работал гладко в кратчайшие сроки. Вот несколько способов решить эту проблему:
Способ 1: перезагрузите компьютер
Возможно, что отображение кода ошибки происходит просто из-за временной проблемы с вашим периферийным устройством, а не из-за чего-либо серьезного.
Таким образом, самый быстрый и простой способ решить код ошибки 37 — просто перезагрузить компьютер.
Метод 2: Сканирование на вирусы
Если перезапуск не помогает, быстрое сканирование на наличие вирусов и их удаление — это еще один простой метод исправления компьютера.
Поскольку код ошибки вызван повреждением данных, вирусы, такие как вредоносные или шпионские программы, создают ошибки в реестре вашего компьютера, и их устранение может помочь восстановить некоторые поврежденные данные, что также ускоряет работу вашего компьютера.
Способ 3: отменить последние изменения
Возможное объяснение кода ошибки может быть недавним изменения в вашем диспетчере устройств или из-за установки периферийного устройства. Таким образом, вы можете отменить изменения:
- Удалить или изменить настройки установленного периферийного устройства
- Откатите версию драйвера до версии, предшествующей обновлению.
- Используйте Восстановление системы, чтобы отменить изменения, внесенные в диспетчере устройств.
Способ 4: вручную удалить и переустановить драйверы
Если вышеупомянутые методы не помогают ускорить работу вашего ПК и все еще дают вам код ошибки, вы можете вручную удалить и переустановить поврежденные или отсутствующие драйверы. Вот следующие шаги:
- Еще раз проверьте, правильно ли подключено установленное внешнее устройство и работает ли оно без сбоев.
- Откройте диспетчер устройств и дважды щелкните на устройстве, которое вызывает проблемы
- Когда он откроется, нажмите на вкладку «Драйвер» и нажмите «Обновить драйвер»
Метод 5: используйте DriverFIX
Однако обновление отсутствующих или поврежденных драйверов может занять много времени, а также может потребовать наличия готовой документации по оборудованию, содержащей конкретные сведения о драйвере, который следует загрузить.
Чтобы избежать этого трудоемкого процесса, вы можете использовать DriverFIX .
ДрайверFIX поможет вам загрузить требуемый драйвер, не тратя драгоценное время и усилия на поиски его в руководстве пользователя. В эту новейшую программную технологию встроена собственная база данных, которая отслеживает отсутствующий или поврежденный драйвер в соответствии с версией материнской платы вашего ПК и конкретными деталями.
Он удобен для пользователя, что означает, что он избавит вас от разочарования в таких кодах ошибок ПК, которые появляются время от времени, и позволит вашему ПК работать эффективно в кратчайшие сроки.
Открыть скачать драйверFIX чтобы разрешить код ошибки диспетчера устройств 37 сегодня!
Узнать больше
Если вы застряли на выделении дискового пространства в Steam, вы знаете, насколько раздражающей может быть эта ошибка. Вот вы, с вашей новой игрой, хотите поиграть в нее и немного расслабиться, и вдруг пар застревает на выделении места на диске. К счастью, эту ошибку можно исправить, следуйте предоставленному руководству, чтобы исправить ошибку и продолжить установку игры.
-
Перезапустить компьютер
Решение для пожилых людей — выключить и снова включить, но в этом случае оно работает в 90% случаев.
-
Запустите Steam от имени администратора
Выделение дискового пространства сторонним приложением может быть задачей, требующей более высоких привилегий, чем у обычного пользователя. Найдите исполняемый файл Steam в папке установки, щелкните его правой кнопкой мыши и запустите от имени администратора.
-
Очистить кеш Steam
Запустите Steam в режиме администратора. В клиенте нажмите Steam в левом верхнем углу экрана. В раскрывающемся списке нажмите на Настройки. Зайдя в настройки, перейдите к Скачать вкладка Нажмите на Очистить кэш загрузок вариант. Нажмите OK на запрос подтверждения вашего действия. Дождитесь завершения процесса. Когда закончите, сохраните изменения и выйдите из клиента.
-
Изменить сервер загрузки
Запустите клиент Steam в режиме администратора. В клиенте нажмите Steam в левом верхнем углу экрана. В раскрывающемся списке нажмите на Настройки. Зайдя в настройки, перейдите к Скачать вкладка Щелкните раскрывающееся меню под Скачать регион. Выберите другой сервер для загрузки. Выйдите из клиента Steam.
-
Обновить установочные файлы
- Убейте процесс Steam в диспетчере задач.
- Перейдите в папку Steam.
- Внутри папки Steam выберите все, кроме Steamapps папка и Steam.exe запускаемый файл.
- Коснитесь клавиши Delete на клавиатуре.
-
Отключить брандмауэр
Брандмауэр может предотвратить появление пара и ограничить доступ к системным операциям, отключить брандмауэр, чтобы решить эту проблему.
-
Остановить разгон
Если вы разогнали свой компьютер, вы можете просто отменить это изменение. Действия, которые вам необходимо предпринять, зависят от программного обеспечения для разгона. Запускаем программу и ищем вариант остановки разгона. После этого перезагрузите компьютер, перезапустите установку игры.
Узнать больше
Очистка диска является частью инструментов Windows 10, и она необходима для поддержания вашего компьютера в рабочем состоянии с оптимальными настройками, а также для освобождения столь необходимого места, а также для удаления временных файлов, которые могут накапливаться с течением времени. Время от времени рекомендуется использовать очистку диска, это очень полезная привычка, которая избавит вас от некоторых головных болей и оптимизирует время работы вашего компьютера, ускорит последовательность загрузки и т. д. Думайте об этом как о уборке вашего стола, время от времени это может слишком завален хламом и неважными вещами и если вы будете держать его в порядке все время каждый раз когда вам нужно что-то найти это будет намного быстрее и проще, то же самое и с компьютерами, так что если у вас его нет, постарайтесь разработать привычка раз в месяц запускать очистку диска и удалять мусор с жесткого диска. Для этого нажмите ⊞ ОКНА + E привести Проводник up
Как только проводник запущен и работает щелкните правой кнопкой мыши на жестком диске, на котором вы хотите запустить очистку диска, и нажмите на свойства.
Окна свойств откроются на общей вкладке, на которой у вас есть очистка диска в правой нижней части свойств, нажмите на на ней.
Подождите, пока Windows соберет информацию о вашем жестком диске и файлах на нем. По завершении вы увидите следующий экран:
Здесь вы можете толстый и отметина от каких предметов вы бы хотели избавиться, а от каких — оставить. Обратите внимание, что вы можете свободно отмечать все из них и удалять их, поскольку удаление этих файлов никоим образом не нарушит работу WIndows. сделай свой выбор и нажмите ОК. Вы также можете нажать на Очистить системные файлы запустить очиститель системных файлов и избавиться от там хлама, никаких вариантов там выбрать не получится, винда сама почистит то, что не нужно. После завершения очистки диска меньше всего у вас будет больше свободного места на диске, но, как уже упоминалось, поддержание работоспособности Windows и компьютера имеет большое значение для удобства использования, скорости и производительности.
Узнать больше
Помимо «Звездного пути», «Звездные войны» были одной из моих любимых кинофраншиз, в детстве это был первый фильм, который я видел в кинотеатре, и на протяжении многих лет я пересматривал и доходил до каждой части франшизы. За прошедшие годы он значительно вырос, иногда в худшую, иногда в лучшую сторону, но то, что он всегда делал, — это исследовал и расширял знания, персонажей и приносил достаточно интересные и оригинальные истории. Сериал всегда был достаточно оригинальным и инновационным, с интересными персонажами и локациями, и ему удалось захватить воображение многих зрителей по всему миру. Если вы или кто-то другой смотрите франшизу впервые, рекомендуется на самом деле смотреть все, как она была выпущена, потому что некоторая информация, испорченная в приквелах, может потом испортить некоторые интересные откровения. Но если вы уже все посмотрели и хотели бы проследить историю от начала до конца, мы представляем вам список всех сериалов и фильмов в каноне tar Wars в их хронологическом порядке, чтобы вы могли насладиться развитием некоторых хороших персонажей и увидеть вся история разворачивается так, как это должно было быть. В следующем списке, как сказано, мы включаем сериалы (как выпущенные, так и находящиеся в производстве) в каноне «Звездных войн».
Хронологический порядок франшизы Звездных войн:
Звездные войны: Послушник
Грядущий сериал Acolyte посвящен временам старой республики и возвышению темной стороны внутри.
Звёздные войны. Эпизод I: Призрачная угроза
Первый фильм во франшизе, в котором представлены ключевые персонажи, которым предстоит пройти через различные приключения.
Звездные войны Эпизод II: Атака клонов
Продолжение сюжета и углубление сюжета, заложенного в предыдущем фильме.
Звездные войны: Войны клонов
Анимационный сериал, более подробно изучающий войну, установлен в период между эпизодами 2 и 3, перед сериалом идут полнометражные названия анимационных фильмов о войнах клонов, просто как «Войны клонов» из «Звездных войн», служащие пилотом для сериала.
Звездные войны Эпизод III: Месть ситхов
Последний фильм в так называемой трилогии приквелов, завершающий некоторые истории и дорабатывающий арки персонажей.
Звездные войны: плохая партия
Грядущий мультсериал Bad Batch будет посвящен немногим солдатам, которые сумеют изменить галактику.
Соло: история звездных войн
История о всем любимом персонаже Хана Соло, эта история происхождения познакомит вас с некоторыми ключевыми персонажами в более поздней части сериала.
Оби-Ван Кеноби
Грядущий сериал, посвященный всеми любимому мастеру-джедаю Оби-Вану
Звездные войны Повстанцы
Анимационный сериал, исследующий первые искры формирования альянса повстанцев против ужасной империи
Андор
Предстоящий сериал, действие которого происходит за пять лет до событий Rogue One, повествует о повстанческом шпионе Кассиане Андоре в годы формирования Восстания.
Звездные войны изгой-один
Полнофункциональный фильм о настройке событий для эпизода 4
Звездные войны: Эпизод IV: Новая надежда
Первый фильм по «Звездным войнам», сегодня немного устарел, со спецэффектами, но с сильным сюжетом и новыми персонажами, которые станут главными иконами франшизы.
Звёздные войны. Эпизод V: Империя наносит ответный удар
Пожалуй, лучший фильм во всей серии, более серьезный и мрачный, чем предыдущие. Помимо Episode 3, это самый серьезный и мрачный фильм серии.
Звездные войны: Эпизод VI: Возвращение джедая
Последняя запись в так называемой оригинальной трилогии, завершающая несколько историй и завершающая одну эпоху.
Звездные войны Мандалорцы
Действие происходит после 6-го эпизода, в центре внимания которого изображен мандалорский охотник за головами, следующий за его приключениями в галактике.
Книга Бобы Фетта
Предстоящий спин-офф сериала о мандалорцах, посвященный Боббе Фет, одному из самых любимых персонажей-охотников за головами во вселенной Звездных войн.
Асока
Звёздные войны: Асока — это предстоящий ограниченный телесериал с живыми актерами, в котором исследуется характер Ашоки Тано, впервые увиденного в Войнах клонов
Рейнджеры Новой Республики
События нового сериала «Рейнджеры Новой Республики» происходят в рамках сюжета «Мандалорианец».
Звездные войны: Сопротивление
Анимационный сериал, посвященный сопротивлению первоочередным установочным событиям, которым предстоит следовать в новейшей трилогии фильмов.
Звездные войны Эпизод VII: Сила пробуждается
Первый полнометражный фильм, действие которого происходит в постимперскую эпоху, в котором представлены новые персонажи и возвращаются некоторые из любимых фанатов.
Звездные войны: Эпизод VIII: Последний Джедай
Второй фильм из трилогии последнего порядка, продолжающий истории ранее созданных персонажей.
Звёздные войны. Эпизод IX: Восхождение Скайуокера
Последняя запись в трилогии фильмов нового порядка, завершающая некоторые открытые истории и завершающие арки для персонажей, ранее представленных в «Пробуждении силы». Вот и все, хронологический порядок канонических сериалов и фильмов франшизы «Звездные войны». Мы уверены, что в будущем будет больше фильмов и шоу, и когда-нибудь мы вернемся к этому списку, чтобы включить их. А пока да пребудет с вами сила. Если вы хотите читать более полезный статьи и советы о посещении различного программного и аппаратного обеспечения errortools.com в день.
Узнать больше
Если вы пытаетесь подключить внешнее устройство к своему компьютеру, но вдруг сталкиваетесь с ошибкой, которая гласит: «Устройство требует дальнейшей установки», то вы попали в нужное место, так как этот пост расскажет вам, как именно вы можете это исправить. ошибка. В большинстве случаев USB-накопители, наушники, динамики и другие внешние устройства устанавливают драйверы автоматически после их подключения к компьютеру. Это означает, что драйверы загружаются и устанавливаются в системе сразу же после подключения внешнего устройства. Однако если драйвер поврежден или устарел, вы можете столкнуться с ошибкой, подобной
«Устройство требует дальнейшей установки»
Помимо поврежденных или устаревших драйверов, ошибка также может быть вызвана ожидающими обновлениями, неправильной версией драйвера Intel PROSet Wireless или проверкой неправильного события. Какой бы ни была причина, этот пост предоставит вам некоторые возможные исправления, которые могут помочь вам решить проблему. Но прежде чем приступить к устранению проблемы, убедитесь, что ваш компьютер с Windows 10 обновлен до последней версии, и вы также не должны забыть проверить, что вы проверяете правильное событие в средстве просмотра событий. После того, как вы справитесь с этим, переходите к приведенным ниже инструкциям.
Вариант 1. Попробуйте обновить драйверы устройства до последней версии.
Одна из наиболее вероятных основных причин ошибки «Устройство требует дальнейшей установки» — это устаревшие или поврежденные драйверы на вашем компьютере. Этот вид проблемы чаще встречается на некоторых устройствах, таких как сканеры и принтеры, драйверы для которых поставляются вместе с ними.
- Сначала загрузите компьютер в безопасном режиме.
- После этого нажмите клавиши Win + R, чтобы запустить Run.
- Введите devmgmt.msc в поле и нажмите Enter или нажмите OK, чтобы открыть диспетчер устройств.
- После этого отобразится список драйверов устройств. Оттуда найдите все устаревшие драйверы устройств и щелкните каждый из них.
- После этого щелкните правой кнопкой мыши каждую запись в драйверах устройства и выберите в меню пункт «Удалить устройство».
- Теперь перезагрузите компьютер.
- После перезагрузки компьютера перейдите в приложение «Настройки» и проверьте наличие обновлений в разделе «Центр обновления Windows».
Внимание: Вы также можете загрузить последние версии драйверов устройств прямо с веб-сайта производителя. После того, как вы загрузили их, вы можете сразу установить их на свой компьютер, а затем снова попробовать подключить внешнее устройство. С другой стороны, вы также можете попробовать переустановить драйверы устройств.
Вариант 2. Попробуйте установить последнюю версию драйвера Intel PROSet Wireless.
Многие пользователи, столкнувшиеся с этой проблемой, сообщили, что их драйвер беспроводной сети также не работает должным образом, и затем было обнаружено, что это было вызвано устаревшим драйвером беспроводной сети Intel PROSet. Таким образом, чтобы решить проблему, вам необходимо установить последнюю версию этого драйвера с сайта intel.com и установить ее на свой компьютер. Когда вы загружаете драйвер, убедитесь, что ваш компьютер работает под управлением системы Intel, а затем загрузите правильный драйвер в зависимости от того, является ли ваш компьютер 64-битной или 32-битной системой.
Узнать больше
FLoC — это альтернатива Google сторонним файлам cookie, основанная на машинном обучении. Это позволит браузеру, любому браузеру, анонимно изучать, как пользователи просматривают страницы, а затем группировать их в «когорты». После этого вам будут показывать рекламу на основе вашей когорты, а не ваших индивидуальных данных. Таким образом, вы по-прежнему будете получать рекламу, но более анонимно. Google утверждает, что это улучшит конфиденциальность пользователей, поскольку это «федеративное обучение» происходит на устройстве пользователя, а обучение на основе искусственного интеллекта предполагает совместное использование меньшего количества пользователей, чем то, что происходит со сторонними файлами cookie. Если что-то подобное получит широкое распространение в рекламных компаниях и сервисах, это должно «защитить пользователей» от методов отслеживания, которые являются более навязчивыми, чем сторонние файлы cookie, такие как снятие отпечатков пальцев браузера.
Кто против?
Браузеры DuckDuckGo, Brave и Vivaldi, ориентированные на конфиденциальность, предупредили пользователей о FLoC и заявили, что собираются заблокировать его со своей стороны. Храбрый говорит, что у Google FLoC есть дизайн, который не уважает конфиденциальность и согласие клиента. Он был разработан для предоставления данных о поведении и интересах любого веб-сайта, с которым могут взаимодействовать пользователи, и этот процесс не требует полностью информированного согласия. Vivaldi, еще один популярный веб-браузер на основе Chromium, также четко изложил свою позицию в отношении статуса FLoC. Компания заявила в ветке Reddit, что эксперимент FLoC не работает в Vivaldi. Это происходит потому, что для работы FLoC необходимо включить некоторые функции, но Vivaldi не предоставляет таких возможностей. Компания также добавила, что планирует запретить весь компонент FLoC быть частью браузера, независимо от того, как Google может его реализовать. Учитывая, что Brave и Vivaldi с самого начала были браузерами, ориентированными на конфиденциальность, решение держаться подальше от FLoC неудивительно.
Узнать больше
Когда вам нужно подключиться к диску, который находится на другом компьютере или во внешнем хранилище, вам на помощь приходят подключенные сетевые диски. Подключенные сетевые диски значительно упрощают доступ к файлам. Однако бывают случаи, когда он по каким-то причинам не работает. Windows уведомит вас о недоступности подключенных сетевых дисков несколькими способами. Во-первых, Windows может отображать красный крестик на сетевых дисках, или может случиться так, что его статус будет недоступен, когда вы попытаетесь использовать его из командной строки или через уведомление. Рекомендуется запускать несколько сценариев при входе в систему на своем ПК, так как может случиться так, что для подключения сетевого диска потребуется больше времени, чем обычно. Прежде чем приступить к устранению проблемы с помощью приведенных ниже параметров, имейте в виду, что некоторые тренировки могут работать только в определенных сценариях. Вам может потребоваться некоторый доступ к сети при входе в систему или вам может потребоваться доступ к параметрам групповой политики. Так что вам нужно выбрать то, что вы предпочитаете больше. Вы можете попробовать указанные ниже обходные пути, если подключенные сетевые диски не отображаются, не подключаются или не работают на вашем компьютере с Windows 10. Эти обходные пути используют сценарии, чтобы убедиться, что вы подключены к ним, как только вы начнете использовать свой компьютер. Как уже упоминалось, прежде чем вы сможете устранять неполадки, вам необходимо сначала создать сценарии. Здесь есть два сценария, а именно MapDrives.ps1, который выполняется вторым сценарием с именем MapDrives.cmd и выполняется в обычной командной строке без повышенных прав. Чтобы начать, выполните следующие действия.
- Сначала необходимо создать файл сценария с именем «MapDrives.cmd», а затем сохранить его в безопасном месте. Для этого откройте текстовый редактор, например Блокнот, а затем скопируйте и вставьте следующий скрипт:
PowerShell -Command «Set-ExecutionPolicy -Scope CurrentUser Unrestricted» >> «%TEMP%StartupLog.txt» 2>&1
PowerShell -File «%SystemDrive%ScriptsMapDrives.ps1» >> «%TEMP%StartupLog.txt» 2>&1
- После этого сохраните файл и назовите его «MapDrives.cmd».
- Затем создайте файл сценария с именем «MapDrives.ps1», а затем скопируйте и вставьте следующее содержимое. Просто убедитесь, что сохранили оба сценария в одной папке.
$ I = 3
в то время как ($ True) {
$ Error.clear ()
$ MappedDrives = Get-SmbMapping | где -property Status -Value Недоступно -EQ | выберите LocalPath, RemotePath
foreach ($ MappedDrive в $ MappedDrives)
{
пытаться {
New-SmbMapping -LocalPath $ MappedDrive.LocalPath -RemotePath $ MappedDrive.RemotePath -Persistent $ True
} поймать {
Write-Host «Произошла ошибка сопоставления $MappedDrive.RemotePath с $MappedDrive.LocalPath»
}
}
$я = $я — 1
if ($ error.Count -eq 0 -Or $ i -eq 0) {break}
Старт-сон-секунд 30
}
Примечание: Теперь, когда вы создали файлы сценария, пора перейти к параметрам, приведенным ниже.
Вариант 1. Попробуйте создать элемент автозагрузки
Обратите внимание, что эта опция работает только на устройствах, которые имеют доступ к сети при входе в систему. Поэтому, если его там нет, скрипт не сможет автоматически подключить сетевые драйверы. Чтобы создать элемент автозагрузки, вот что вам нужно сделать:
- Откройте папку «Автозагрузка», расположенную в папке% ProgramData% MicrosoftWindowsStart MenuProgramsStartUp.
- Оттуда скопируйте и вставьте MapDrives.cmd.
- После этого откройте папку Scripts, расположенную в папке% SystemDrive% Scripts, скопируйте и вставьте MapDrives.ps1, а затем скопируйте и вставьте туда MapDrives.ps1.
Примечание: После выполнения описанных выше действий в папке% TEMP% будет создан файл журнала с именем «StartupLog.txt». Теперь все, что вам осталось сделать, это выйти из системы, а затем снова войти в систему. Это гарантирует, что подключенные диски открыты.
Вариант 2 — Создание запланированной задачи
Можно создать запланированное задание, которое запускается сразу после входа на компьютер. Чтобы создать запланированное задание, выполните следующие действия.
- Вам необходимо скопировать файл сценария MapDrives.ps1 в папку сценариев Windows, расположенную в папке% SystemDrive% Scripts.
- После этого откройте планировщик задач и выберите «Действие»> «Создать задачу».
- Затем введите имя и описание задачи на вкладке Общие.
- Затем нажмите кнопку «Сменить пользователя или группу», выберите локальную группу пользователей и нажмите «ОК».
- Теперь установите флажок «Запускать с наивысшими привилегиями» и переключитесь на вкладку «Триггеры».
- После этого создайте новый триггер с параметром «При входе в систему» в раскрывающемся меню «Начать задачу» и нажмите кнопку «ОК».
- После этого перейдите на вкладку «Действия» и создайте новое действие, затем выберите «Запустить программу».
- Затем введите «Powershell.exe» в поле «Программа / сценарий» и в поле «Добавить аргументы (необязательно)» введите следующее:
-windowsstyle hidden -command .MapDrives.ps1 >>% TEMP% StartupLog.txt 2> & 1
- В поле «Пуск» (необязательно) введите «% SystemDrive% Scripts» в качестве расположения файла сценария.
- Теперь на вкладке «Условия» выберите параметр «Запускать только при наличии следующего сетевого подключения», затем выберите «Любое подключение» и нажмите «ОК».
- Перезагрузите компьютер или выйдите из своей учетной записи, а затем снова войдите в систему, чтобы выполнить задачу.
Вариант 3 — Используйте настройки групповой политики
Эта опция необходима, если подключенные сетевые диски определены с помощью параметров групповой политики. Вы должны обновить действие карт дисков, чтобы заменить. В результате он удалит существующий подключенный диск и создаст сопоставление при каждом входе в систему. Однако любые параметры подключенного диска, которые изменяются из параметров групповой политики, будут пропадать при каждом входе в систему. Поэтому, если изменения не работают, вам нужно запустить команду gpupdate вместе с параметром / force, чтобы быстро обновить параметр групповой политики.
Узнать больше
Авторское право © 2023, ErrorTools, Все права защищены
Товарный знак: логотипы Microsoft Windows являются зарегистрированными товарными знаками Microsoft. Отказ от ответственности: ErrorTools.com не имеет отношения к Microsoft и не претендует на прямую связь.
Информация на этой странице предоставлена исключительно в информационных целях.
Ошибки времени выполнения, одни из тех проблем, которые преследуют пользователей компьютеров с Windows-based операционными системами. Исправление этих проблем зависит от конкретной ошибки во время выполнения, на что указывает количество и любой текст, который сопровождает сообщение об ошибке.
Что такое Runtime Error 217?
Runtime Error 217 может возникать по одной из множества причин. Эти причины включают в себя:
- Отказ зарегистрировать dll в процессе установки приложения.
- Наличие вирусов на компьютере.
- На вашем компьютере установлены неправильные региональные настройки.
- На вашем компьютере есть устаревший файл msvcrt.dll .
на вашем компьютере.
- Сломанные или отсутствующие файлы реестра.
- Наличие устаревшего MS DCOM файла на вашем компьютере.
- Отсутствует stdole32.tlb-файл на вашем компьютере.
Как исправить Runtime Error 217: неисправные установки
Если вы подозреваете, что ошибка runtime error 217 возникает из-за неправильной установки, просто переустановите приложение. Однако, если ваш источник для приложения поврежден, то Вам необходимо получить новый диск или скачать новую версию приложения перед его попыткой установки. Как только приложение будет установлено правильно, ошибка runtime больше не должна возникать.
Как исправить Runtime Error 217: вирусная инфекция
Когда вирус заражает компьютер, может возникнуть ряд проблем, в том числе ошибки времени выполнения. Если ошибка runtime error 217 появляется из-за вирусной инфекции, просто просканируйте компьютер с помощью современных антивирусных приложений, чтобы её удалить.
Как исправить Runtime Error 217: неправильные региональные настройки
Если настройки Вашего компьютера неверны, может появится ошибка Runtime Error 217. Убедитесь, что настройки даты на вашем компьютере совпадают для страны, где вы находитесь.
Как исправить Runtime Error 217: устаревшие файлы msvcrt.dll
Если ошибка происходит из-за устаревшего файла msvcrt.dll, Вам необходимо заменить файл при обновлении операционной системы. Вы можете сделать это, посетив веб-сайт корпорации Майкрософт. Пока вы там находитесь, проверьте все существующие исправления, которые были выпущены для вашей версии Windows.
Как исправить Runtime Error 217: устаревший файл MS DCOM
Если ошибка появляется из-за устаревшего файла MS DCOM, получите последние обновления для вашей операционной системы через веб-сайт Microsoft.
Как исправить Runtime Error 217: отсутствует файл stdole32.tlb
Если вам не хватает файла stdole32.tlb, Вам необходимо скачать его и заменить. В то время как вы могли бы быть в состоянии получить этот файл на нескольких различных веб-сайтах, лучше всего получить его через библиотеки Microsoft dll.
Как исправить Runtime Error 217: сломанные или отсутствующие файлы реестра
Файлы реестра, которые стали сломанными или повреждены, могут быть восстановлены при запуске авторитетных программ registry cleaner на вашем компьютере. Выберите ту программу, которую вы хотите скачать, установите её и запустите, чтобы выполнить ремонт вашей системы.
Do a Registry cleanup to get rid of this error
by Claire Moraa
Claire likes to think she’s got a knack for solving problems and improving the quality of life for those around her. Driven by the forces of rationality, curiosity,… read more
Updated on
- Runtime Error 217 is a common Windows error that occurs when an application fails to initialize properly.
- This error can be caused by an issue with your computer’s system files or corrupt registry entries.
- As such, your top picks to remedy the situation should be to clean up your Registry or repair damaged system files.
Runtime error 217 is a common error that occurs when you try to run a program or open an app on your PC. This problem is usually due to incorrect installation of the application.
Installing and uninstalling apps in Windows 11 can be tricky, especially if they’re not from the Microsoft Store. In this article, we will tell you what causes runtime error 217 and how to fix it.
What is Runtime error 217?
Runtime Error 217 is a common error that occurs during the installation of some programs and applications. It means that the application is trying to access an object that does not exist.
The error may come accompanied by various codes, such as runtime error 217 at 02524611 or runtime error 217 at 004963f9. It’s usually triggered by an incompatible application or bad settings in your computer but below are some common causes:
- Improper installation of an app – This can happen if you install faulty software or third-party apps on your PC with incomplete installation packages.
- Missing or damaged system files – These files are required for programs to run on your computer, and if they’re missing or faulty, the program won’t work properly.
- Damaged Windows registry – If there is any corruption in this registry file, it will result in an error 217 message on your screen.
- Hardware failure – If there is a problem with any hardware connected to your PC from your hard drive, CD/DVD drive, or any other piece of hardware, there’s a chance the Runtime error 217 will appear on your screen.
- Incomplete uninstallation of an app – The uninstall process of any application is not always perfect. There are times when some files and registry entries are left behind after the uninstalling process.
How do I fix Runtime error 217?
If your computer is experiencing Error 217, there are some basic things you can try before moving on to the more advanced solutions:
- Stop all running applications and close all the windows on your computer screen.
- Make sure that your hardware and software are all up to date. You should always keep your computer’s firmware updated to run smoothly with any new updates from Microsoft or other developers.
- Disable or stop the program that’s generating the error message.
- Reinstall the particular program that is causing the runtime error. Also, ensure to get rid of software leftovers in case they are corrupt.
- Uninstall any recently installed application or software from your computer if you’re unsure what application is responsible for the runtime 217 error.
- Run a DLL-fixer tool and attempt to repair or replace any missing or damaged DLL files.
1. Run the DISM and SFC scans
- Hit the Windows key, type cmd, and hit Run as administrator.
- Type the following commands and press Enter after each one:
DISM /Online /Cleanup-Image /RestoreHealth
sfc /scannow
If the sfc scannow command is not working, we have quick steps to get it up and running again.
2. Perform a clean boot
- Hit the Windows key, type msconfig, and open System Configuration.
- Switch to the Services tab and select Hide all Microsoft services.
- Click on the Disable all button, then hit the Apply button to save the changes.
- Go back and click on the Startup tab and select Open Task Manager.
- In the Startup tab of the Task Manager, Disable all the Enabled startup items.
- Close Task Manager and restart your PC.
- How to Find & View Saved Passwords on Windows 11
- Fix: Secure Boot is Greyed Out on Windows 11
- Fix: Touchpad Clicks but Doesn’t Move on Windows 11
- How to Change the Hyper-V Display Resolution [Windows 11 Guide]
3. Reset your PC
- Hit the Windows key and select Settings.
- In the left window pane, select System, then click on Recovery on the right pane.
- Click on Reset PC from the right side.
- Choose the type of factory reset you need. You can keep your files or completely delete all the files, apps, and settings on the PC.
- Select the option you want to reinstall Windows: Cloud download or Local reinstall.
- Click on Next.
- Finally, press the Reset button.
Other errors of a similar kind that you may encounter include the Runtime error R6025, but we have already addressed how to bypass it in our comprehensive guide.
If these errors appear often enough on your PC, it may be time to acquaint yourself with a runtime error repair tool. Such errors can significantly affect the performance of your PC, causing it to slow down.
That brings us to the end of this guide, and hopefully, you’ve been able to resolve the issue with runtime error 217.
Feel free to let us know what solution came through for you if you encountered this error.
Время на прочтение
10 мин
Количество просмотров 99K
Вероятно многие встречались с таким вот «партизаном» при старте или завершении приложения:
Очень информативное сообщение, сразу понятна причина ошибки, место и способ ее решения.
Впрочем, если без шуток, что это вообще такое?
Конечно-же это исключение, но ни тип исключения, ни его описание нам не доступны — просто «Runtime error 217» и адрес, а дальше сами…
Если честно, раньше я как-то даже не задумывался по поводу данного исключения, т.к. в моих проектах оно явление редкое, пока однажды у целой череды пользователей не начала воспроизводится именно 217-я ошибка.
Впрочем, даже тогда я не пошел по правильному пути и просто добавил дополнительный уровень логирования в проект, по результатам которого достаточно оперативно нашел причину и исправил ее.
Но, по сути, я просто потратил свое время…
И тратил бы его в дальнейшем, если бы на днях со мной не связался Виктор Федоренков и не рассказал о своих мыслях по поводу ошибки за номером 217.
Теория и анализ проблемы
Без теории нам никуда, иначе можем уткнуться в пределы собственных знаний.
Поэтому начнем, конечно, с теоретической части.
Для начала я немного освежил мои представления об ошибках в принципе, перечитав часть статьи «Обработка ошибок — глава 1.2.2» за авторством Александра Алексеева, откуда вынес информацию о том, что ошибка 217 будет отображена в том случае, если не инициализирован модуль SysUtils, причем это у Александра проиллюстрированно достаточно наглядно:
Открыть картинку в полный размер…
На основании данной картинки можно сделать грубый вывод: пока SysUtils жив — все исключения должны отображаться в нормальном виде, о чем идет отдельное упоминание:
Например, если вы видите сообщение о runtime-ошибке, то, судя по приведённой схеме, маловероятно, чтобы ошибка возникла в обработчиках событий на форме. Зато гораздо вероятнее, что она возникает, скажем, в какой-то секции finalization (которая выполняется после секции finalization модуля SysUtils) или в назначенной процедуре ExitProcessProc. Но, разумеется, причина ошибки может сидеть где угодно — в том числе и в упоминаемых обработчиках событий.
Ну что-ж давайте проверим, пишем код, в котором SysUtils должна быть финализирована позже модуля Unit1, в котором искусственно генерируем исключение:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
initialization
finalization
raise Exception.Create('finalization exception');
end.
Билдим, запускаем, закрываем форму и… Runtime error 217.
Утверждение о том, что 217 отображается после финализации SysUtils полностью верное, но давайте-ка посмотрим на сам код финализации:
procedure FinalizeUnits;
...
begin
...
Count := InitContext.InitCount;
Table := InitContext.InitTable^.UnitInfo;
...
try
while Count > 0 do
begin
Dec(Count);
InitContext.InitCount := Count;
P := Table^[Count].FInit;
if Assigned(P) then
...
TProc(P)();
...
end;
end;
except
FinalizeUnits; { try to finalize the others }
raise;
end;
end;
Смотрите что происходит: в процедуре FinalizeUnits вызываются все финализирующие процедуры, адреса которых расположены в массиве InitContext.InitTable^.UnitInfo в том порядке, в котором происходила их инициализация, т.е. самые первые расположены в начале массива (а финализация идет с конца).
Где-то в самом низу расположен и SysUtils + System, ну а мы, с нашим модулем Unit1 где-то в самом верху.
Но вдруг происходит исключение в нашем модуле и «бабах», порядок катарсиса нарушен.
После «бабах» FinalizeUnits вызывается повторно, пропуская наш модуль, вызвавший исключение, вследствие чего разрушается SysUtils и разные, встречающиеся по пути, class destructor-ы, до кучи грохается System с менеджером памяти (сидящий одним из первых в начале списка), после чего идет контрольный выстрел в лоб — RAISE, вот тут-то мы и приплыли — здравствуй 217.
А что если произойдет исключение в секции инициализации любого модуля?
Да все тоже самое:
procedure InitUnits;
...
begin
...
try
...
except
FinalizeUnits;
raise;
end;
end;
Делаем вывод: любое необработанное исключение в секциях инициализации или финализации будет приводить к потере описания исключения и приводить к ошибке 217.
На этом с теорией, думаю, закончим.
Имея на руках понимание о причине возникновения Runtime error 217, попробуем получить на руки более привычный нам вариант сообщения об исключении.
Отключаем финализацию модулей
В самом начале обсуждения Виктором был предложен достаточно эффективный способ обхода данной ошибки.
Его анализ заключался в следующем: общая инициализация обработчика исключений производится в процедуре InitExceptions модуля SysUtils, а финализация вызовом DoneExceptions.
Если каким либо образом отключить вызов DoneExceptions плюс не дать разрушиться менеджеру памяти, заблокировав вызов блока финализации System — на руки мы получим сообщение об исключении в приемлимом виде.
Как вариант решения был предложен следующий код, который нужно подключить к файлу проекта самым первым модулем (будет работать начиная с D2005 и выше):
unit suShowExceptionsInInitializeSections;
interface
uses
SysUtils;
implementation
uses
Windows;
//Получение структуры PackageInfo нашего приложения
//В System она находится в переменной InitTable, но не видна из других модулей
function GetInitTable: PackageInfo;
var
Lib: PLibModule;
TypeInfo: PPackageTypeInfo;
begin
Result := nil;
Lib := LibModuleList;
if not Assigned(Lib) then
Exit;
//Если загружено несколько модулей (BPL пакетов), то выходим,
//я не изучал как работает механизм загрузки/выгрузки BPL, поэтому на всякий
//случай выходим
if Assigned(Lib^.Next) then
Exit;
Typeinfo := Lib^.TypeInfo;
if Assigned(TypeInfo) then
begin
//Мы имеем TPackageTypeInfo
//Теперь по нему можно получить PackageInfo
//Воспользуемся особенностями компилятора.
//В IDA видно, что ссылка TypeInfo указывает на середину структуры
//PackageInfo программы
//Поэтому для того что бы вычислить PackageInfo нужно вычесть из адреса
//TypeInfo смещение этого поля
Result := PackageInfo(PByte(TypeInfo) - (LongWord(@PackageInfoTable(nil^).TypeInfo)));
end;
end;
//Отключить секцию финализации для всех модулей
procedure DisableAllFinalization;
var
Loop: Integer;
OldProtect: LongWord;
InitTable: PackageInfo;
Table: PUnitEntryTable;
begin
InitTable := GetInitTable;
if Assigned(InitTable) then
begin
Table := InitTable^.UnitInfo;
if Assigned(Table) then
//Разрешаем изменять структуру в которой хранятся ссылки на инициализаю/финализацию всех юнитов
if VirtualProtect(Table, SizeOf(PackageUnitEntry) * InitTable^.UnitCount,
PAGE_READWRITE, OldProtect) then
for Loop := 0 to InitTable^.UnitCount - 1 do
Table^[Loop].FInit := nil;
end;
end;
initialization
finalization
//Сейчас идет финализация всех модулей, модуль SysUtils создан раньше, поэтому
//он еще не финализирован. Наша задача здесь не дать ему финализироваться,
//Как и другим модулям которые он использует (интересует только System),
//это нужно для правильной отработки обработчиков исключений.
//Сюда мы можем попасть по двум причинам
//1. Произошел Exception во время инициализации каком-то модуля
//2. Нормальное завершение программы
//
//Мы не будем определять причину, так как процесс все равно завершается, а ОС
//сама освободит занятые ресурсы после смерти процесса.
//Но нужно иметь ввиду, данную технику использовать в DLL нельзя, что бы не
//допускать утечек памяти
if IsLibrary then
Exit;
//Мы не можем выборочно заблокировать финализацию юнитов по их имени
//так как нет соответствующих данных в RTTI. Тем не менее, мы можем отключить
//финализацию всех юнитов, которые идут в списке до этого
//модуля. Таким образом если данный модуль расположить первым в DPR файле,
//то мы минимизируем утечки.
//Вычислять адрес процедуры финализации данного юнита не обязательно,
//ведь к моменту выполнения данного кода уже финализированы все следующие юниты.
//Поэтому просто заблокируем финализцию всех оставшихся
DisableAllFinalization;
end.
Если честно — аплодировал стоя.
Вот он: хак в самом грязном виде как он есть — такие вещи могут делать только те, кто действительно понимает, чем это грозит
И данный модуль вывел работу нашего IT отдела примерно на три часа — это была жесткая дискуссия
Но, впрочем, давайте разберем логику работы данного кода:
Суть его проста, необходимо выйти на данные о загруженных модулях (включая BPL) в том виде, в котором их понимает Delphi приложение. Это было сделано посредством доступа к началу однонаправленного списка структур TLibModule. Первым элементом списка будет структура, описывающая текущий образ, откуда нам нужно всего-то и получить данные о структуре UnitInfo, которая содержит в себе данные как о количестве инициализированных модулей, так и об адресах их процедур инициализации и финализации в виде записи PackageUnitEntry.
Блокирование финализации модулей происходит посредством присвоения параметру FInit значения nil у каждой записи PackageUnitEntry.
При обниливании данного параметра FinalizeUnits не сможет произвести вызов обработчика и в итоге тот самый raise, о котором я писал выше, сможет достаточно корректно произвести отображение возникшего исключения.
Но вот дальше все сложнее.
Пытаемся причесать хорошую мысль
Идея здравая и причины понятны, но вот как-же так, ресурсы все-же не освобождены, FastMem перестанет нормально работать (она собирает утечки как раз при финализации), да и совместимости маловато, к примеру, как я и сказал выше, под Delphi 7 данный код вообще работать не сможет.
После первого часа обсуждений в IT отделе мы даже умудрились прийти и к такому выводу: «да и хрен с ними с SysUtils и System — что-то критичного они за собой не несут».
А потом, опять начали спорить — ну не устраивал нас этот подход, вроде все хорошо, но не аккуратненько как-то.
Рассматривались даже варианты прямого сплайсинга блоков финализации и до кучи деструктора Exception — но дополнительный хак, на уже существующий хак не устраивал вообще никого.
И тут, сидя в отладчике и прогоняя код по 70-му разу пришла мысля.
Дык эта… а как вообще выводится сообщение о произошедшем исключении?
А выводится оно посредством передачи управления на ExceptHandler, в коде которого нет ничего секретного.
А что мы делаем убирая финализацию модулей?
Правильно, заставляем вызваться его-же.
Попробуем-ка проэмулировать вызов ExceptHandler.
Пишем тестовый юнит и подключаем его к проекту самым первым:
unit Test;
interface
uses
SysUtils;
var
E: Exception;
implementation
initialization
finalization
E := AcquireExceptionObject;
if E <> nil then
begin
ShowException(E, ExceptAddr);
E.Free;
Halt(1);
end;
end.
Запускаем на выполнение и…
Получилось.
Встроившись в цикл финализации, мы отобразили произошедшее исключение и продолжили финализацию дальше вызовом Halt(1).
В итоге задача решена, грамотно и документировано, и совместимо с Delphi 7, но…
А не развить ли идею?
Есть такое понятие, как «наведенные ошибки», т.е. ошибки произошедшие из-за того что перед ними тоже произошла ошибка.
Ну к примеру, функция А, которая должна возвращать экземпляр некоего класса и функция Б, использующая этот экземпляр в работе. К примеру в функции А произошло необработанное исключение (например нет доступа к файлу) и она не создала класс, а потом где-то гораздо позже по коду приложения процедура Б выполняет обращение к этому экземпляру и в итоге происходит Access Violation.
Тоже самое может произойти и в процедурах инициализации/финализации, причем исключение, произошедшее в финализации скроет от нас саму причину.
Для демонстрации напишем вот такой код, в котором при инициализации приложения будет создаваться некий логер, в который будут писаться этапы работы приложения, а в финализации будет запись о завершении работы.
Для генерации исключения заставим логер создаваться по несуществующему пути:
uses
Classes;
var
Logger: TFileStream;
const
StartLog: AnsiString = 'Начало работы приложения' + sLineBreak;
EndLog: AnsiString = 'Работа приложения завершена' + sLineBreak;
implementation
initialization
Logger := TFileStream.Create('A:\MyLog,txt', fmCreate);
Logger.WriteBuffer(StartLog[1], Length(StartLog));
finalization
Logger.WriteBuffer(EndLog[1], Length(EndLog));
Logger.Free;
end.
Мало у кого в системе присутствует диск «А» поэтому результатом этого кода будет либо «Runtime error 216» (именно 216, а не 217), либо, если подключим код из предыдущей главы:
Exception EAccessViolation in module Project2.exe at 001B1593.
Access violation at address 005B1593 in module ‘Project2.exe’. Read of address 00000000.
А ведь причина то кроется в самом первом исключении, которое нами не отображается и с наскока разобраться в причине ошибки не получится.
Для того чтобы исправить эту несправедливость, можно немного причесать код и довести его до вот такого состояния:
unit ShowExceptSample;
interface
uses
SysUtils,
Classes;
implementation
type
PRaiseFrame = ^TRaiseFrame;
TRaiseFrame = packed record
NextRaise: PRaiseFrame;
ExceptAddr: Pointer;
ExceptObject: TObject;
ExceptionRecord: PExceptionRecord;
end;
var
// Указатель на вершину списка исключений
CurrentRaiseList: Pointer = nil;
// Функция возвращяет текущее исключение со стека
function GetNextException: Pointer;
begin
if CurrentRaiseList = nil then CurrentRaiseList := RaiseList;
if CurrentRaiseList <> nil then
begin
Result := PRaiseFrame(CurrentRaiseList)^.ExceptObject;
PRaiseFrame(CurrentRaiseList)^.ExceptObject := nil;
CurrentRaiseList := PRaiseFrame(CurrentRaiseList)^.NextRaise;
end
else
Result := nil;
end;
var
ExceptionStack: TList;
E: Exception;
initialization
finalization
// Смотрим, есть ли вообще исключения?
E := GetNextException;
if E <> nil then
begin
ExceptionStack := TList.Create;
try
// если есть, собираем о них информацию
while E <> nil do
begin
ExceptionStack.Add(E);
E := GetNextException;
end;
// и отображаем их в том порядке, в котором они произошли
while ExceptionStack.Count > 0 do
begin
E := ExceptionStack[ExceptionStack.Count - 1];
ExceptionStack.Delete(ExceptionStack.Count - 1);
ShowException(E, ExceptAddr);
E.Free;
end;
finally
ExceptionStack.Free;
end;
// финализируем все что осталось
Halt(1);
end;
end.
Здесь идея проста, функция GetNextException по сути повторяет вызов AcquireExceptionObject, но после своего вызова не теряет ссылку на следующее в очереди исключение, а запоминает адрес следующего фрейма во внешней переменной.
После чего все исключения заносятся в список (самое последнее будет первым в списке) и выводятся программисту с соблюдением очередности, в результате чего нам будет сразу понятно, что сначала произошло вот это:
И уже только после него пошли всякие там AV.
Теперь по поводу остальных кодов ошибок.
Почему я начал именно с «Runtime error 217»?
Ну потому что она наиболее легко воспроизводима, а так технически, используя выше приведенный модуль, мы получим на руки вполне нормальное описание всех возможных Runtime ошибок, коих в наличии у нас вон сколько:
reMap: array [TRunTimeError] of Byte = (
0, { reNone }
203, { reOutOfMemory }
204, { reInvalidPtr }
200, { reDivByZero }
201, { reRangeError }
{ 210 Abstract error }
215, { reIntOverflow }
207, { reInvalidOp }
200, { reZeroDivide }
205, { reOverflow }
206, { reUnderflow }
219, { reInvalidCast }
216, { reAccessViolation }
218, { rePrivInstruction }
217, { reControlBreak }
202, { reStackOverflow }
220, { reVarTypeCast }
221, { reVarInvalidOp }
222, { reVarDispatch }
223, { reVarArrayCreate }
224, { reVarNotArray }
225, { reVarArrayBounds }
{ 226 Thread init failure }
227, { reAssertionFailed }
0, { reExternalException not used here; in SysUtils }
228, { reIntfCastError }
229, { reSafeCallError }
235, { reMonitorNotLocked }
236 { reNoMonitorSupport }
{$IFDEF PC_MAPPED_EXCEPTIONS}
{ 230 Reserved by the compiler for unhandled exceptions }
{$ENDIF PC_MAPPED_EXCEPTIONS}
{$IF defined(PC_MAPPED_EXCEPTIONS) or defined(STACK_BASED_EXCEPTIONS)}
{ 231 Too many nested exceptions }
{$ENDIF}
{$IF Defined(LINUX) or Defined(MACOS)}
{ 232 Fatal signal raised on a non-Delphi thread }
,
233 { reQuit }
{$ENDIF LINUX or MACOS}
{$IFDEF POSIX}
,
234 { reCodesetConversion }
{$ENDIF POSIX}
,
237, { rePlatformNotImplemented }
238 { reObjectDisposed }
);
Итог
Вот таким небрежным кодом, мы можем получить то, о чем нам не хочет говорить ошибка под кодом 217.
Впрочем, я не думаю что этот подход будет незнаком опытным программистам.
Скорее всего это — здравствуй велосипед, ибо вероятнее всего данная проблема кем-то уже решалась ранее, но я просто не знал о данном решении.
А если нет — значит буду вторым.
Отдельный респект соавтору и вдохновителю данной статьи — Виктору Федоренкову.
Удачи.
Как исправить ошибку «Ошибка runtime 217 error»?
Featured
В этой статье мы расскажем вам, как избавиться от ошибки runtime 217 error at 123456.
Что делать если у вас стала возникать ошибка runtime 217 error?
Вот варианты решения проблемы:
1. Нажать комбинацию клавиш WIN+R и вставить следующее:
services.msc
нажать enter
2. Найти в открывшемся окне службу Брандмауэр Windows, вызвать контекстное меню и выбрать запустить.
Если служба была запущена или вариант не помог, то скачайте утилиту CCleaner Скачать
Установить ее и выполнить очистку и проверку реестра.