Содержание
- Описание проблемы
- Решение
- Проблемы с файлами dll в DirectX или C++
- Проблема с патчем или пиратской программой
- Исключение декомпрессии
- Неправильный exe-файл был изменен вирусом
- Несовместимость игры с текущей системой
- Режим отладки программного обеспечения
- Ошибка 0xc000007b на синем экране
- Решение
- Ошибка 0x0000007b появляется на синем экране
- Драйвер видеокарты обновлен?
- Вы импортировали информацию реестра?
- Англоязычная директория
- Решение
- Включено ли прямое ускорение?
- Вы установили PhyX?
- Режим совместимости
- Ваша игра для Windows Live установлена?
- Установлен ли ваш Microsoft .NET Framework?
- Замена операционной системы
- Аппаратное обеспечение
- Часто задаваемые вопросы
Операционная система Windows — это сложный, взаимодополняющий и связанный с другим ПО комплекс эффективного распределения вычислительных ресурсов и управления устройствами. Однако не редки случаи, когда происходят проблемы. Ошибка 0xc000007b появляется у многих пользователей ПК. На этой странице мы узнаем, в чем заключается сложность её устранения, и найдем несколько способов решения.
0xc000007b означает, что код ошибки возникает из-за ненормального вызова файла dll. Часто игры или программы, которые мы планируем запустить, используют библиотеки и компоненты распространенных ПО — DirectX (часто версии 9.0) и распространяемый пакет Visual C++.
Описание проблемы
Когда возникает ошибка 0xc000007b, это может быть аппаратная проблема или проблема с программным обеспечением. Вероятность того, что электроника вызывает эту проблему, очень мала. Даже если выяснится, что дело в железе, то лучшим решением станет замена неисправного компонента ПК. В этой статье будет подробно рассказано, как решить возникшую трудность с помощью установки необходимого ПО. Это именно то, что больше всего интересует пользователей.
Решение
Часто для решения проблемы 0xc000007b, нужно установить последнюю версию компонентов DirectX и C++. Это правда, что обновление файлов один за другим поможет устранить уведомления ошибки, пользователи, которые уже искали Visual C в Интернете, наверняка знают, что их существует много версий.
Переходите по ссылке для скачивания DirectX и C++ или испробуйте все способы решения данной проблемы. Выберите необходимые вам и устанавливайте на свой ПК.
Переустановка новых версий не помогла?
Проблемы с файлами dll в DirectX или C++
Эта ситуация является наиболее распространенной. Dll-файлы компонентов DirectX или компонентов C++ в вашей системе все еще имеют аномалии. Скорее всего, версия утилиты была не полная или не последняя. Новый билд обычно обновляет пакет данных и улучшает возможность исправления 0xc000007b. Если какие-то файлы постоянно не восстанавливаются, то, скорее всего, причина в том, что файлы заняты. Рекомендуется перезагрузить компьютер и закрыть все бесполезные программы (включая антивирус, QQ, браузер и завершить процесс QQProtect.exe в диспетчере задач и т. д.).
Проблема с патчем или пиратской программой
Причина в том, что пиратское ПО для взлома изменяет некоторую информацию в исходном файле exe/dll. Игра или программное обеспечение имеют большой размер, а патч для взлома относительно невелик. Обычно, заменив exe или steam_api.dll и другие файлы, злоумышленники производят нарушения, изменив несколько МБ. Так что если причина в этом, то рекомендуется повторно скачать ваш патч, проверив контрольные суммы для исключения сторонних встроек. Если dll другой, то перейдите по ссылке, чтобы загрузить любой необходимый.
Исключение декомпрессии
Эта ситуация чаще всего возникает в установочном пакете игры. Причина такого рода проблем заключается в том, что компонент распаковки в системе неисправен. Это приводит к генерации ошибки при вызове ненормального компонента при автоматической распаковке программы.
Решение
- Найдите дистрибутив с приложением.
- Распакуйте его через правую кнопку мыши в любую папку.
- Пропустите ошибки, возникающие при работе архиватора.
Неправильный exe-файл был изменен вирусом
Эта ситуация имеет определенную вероятность возникновения, и некоторые пользователи также сталкивались с этой проблемой. В похожем случае в системе есть вирус, который заражает exe-файл. Поэтому он не может запуститься. Этот тип вируса может изменять только исполняемые файлы без цифровой подписи. Поэтому средство восстановления DirectX на вашем компьютере и некоторые небольшие программы в Интернете могут не работать. Однако собственные программы Windows и некоторые с цифровыми подписями от крупных компаний все еще могут нормально функционировать. Если ошибка 0xc000007b возникает во многих программах на вашем компьютере, скорее всего, это так.
Решение
Чтобы исправить, включите сначала стандартный защитник Windows, а потом сторонний антивирус, чтобы проверить ОС на наличие вредоносных файлов, и исправьте их или внесите в карантин.
- Наберите в строке поиска «Защита от вирусов и угроз».
- Откройте это окно безопасности Windows кликнув по найденному параметру левой кнопкой мыши.
- Включите все параметры подсвеченные как выключенные таким образом, чтобы они стали выводить галочку в зеленом кружке.
Несовместимость игры с текущей системой
Пользователи Windows 7 получают ошибки 0xc000007b при запуске некоторых последних игр (особенно игр 2020 года и более поздних версий).
Решение
- Пожалуйста, зайдите на официальный сайт игры (или steam).
- Посмотрите, что написано в графе операционная система в минимальной конфигурации, необходимой для игры.
- Сравните с той которая у вас. Если Необходимо обновить ОС, установите необходимую, например Windows 11 последней конфигурации с нашего ресурса.
- Кроме версии системы, также советуем проверить требования к оборудованию.
- Кроме покупки нового качественного «железа» выхода нет.
Режим отладки программного обеспечения
Если вы используете Visual Studio и другое программное обеспечение для разработки программ, особенно в режиме отладки, появится ошибка 0xc000007b. Её уже не решишь простым обновлением Компонентов Диеркс и C++.
- Попробуйте найти параметр «SATA Mode Selection» в интерфейсе BIOS и измените режим «AHCI» на режим «iDE».
- Для этого при включении ПК нажмите на клавишу «del, F2,F9,F12 (в зависимости от того, какой клавишей запускается загрузчик — BIOS именно у вас. Это будет на секунду написано на экране)».
- Перейдите в раздел «Advaced».
- Затем найдите «SATA Configuration». Иногда этого пункта нет, в сразу можно увидеть «SATA Mode Selection».
- Поменяйте значение на «iDE». Как показано на скриншотах из разных загрузчиков в галерее ниже.
- В командной строке орт имени администратора, введите команду «sfc /scannow». Подождите сканирования и восстановления. Это действие будет выглядеть как на скриншоте ниже галереи.
Ошибка 0xc000007b на синем экране
Такая ситуация чаще встречается в Windows 10, после перезагрузки системы внезапно обнаруживается, что вход в систему невозможен, и на синем экране появляется сообщение об ошибке 0xc000007b. Причина этого в том, что при автоматическом обновлении системных компонентов они случайно убиваются антивирусным ПО, что приводит к невозможности входа в ОС после перезагрузки.
Решение
- Предлагается переустановить систему напрямую, чтобы решить эту проблему.
Ошибка 0x0000007b появляется на синем экране
Пожалуйста, прочитайте внимательно. Эта статья отличается от пункта 7. Код ошибки имеет дополнительный ноль. Эта ошибка в основном вызвана установкой неправильного режима жесткого диска.
- Например, если у вас изначально была IDE, а вы зашли в биос и изменили его на AHCI, то перезапуск обязательно приведет к синему экрану 0x0000007b.
- Также возможно, когда вы не проявляли инициативу по изменению режима жесткого диска, а обновили BIOS и изменили режим ЖД по умолчанию.
Решение
- При включении ПК нажмите на клавишу «del, F2,F9,F12 (в зависимости от того, какой клавишей запускается загрузчик — BIOS именно у вас. Это будет на секунду написано на экране)»
- Перейдите в раздел «Advaced».
- Затем найдите «SATA Configuration». Иногда этого пункта нет, в сразу можно увидеть «SATA Mode Selection».
- Поменяйте значение на «iDE». Как показано на скриншотах из разных загрузчиков в галерее ниже.
Да, решение очень похоже на предыдущий пункт, однако сама ошибка имеет другое название, поэтому требует отдельного рассмотрения. Кроме того порядок действий, который предшествует возникновению ошибки отличается, поэтому чтобы сориентироваться было легче решение вынесли в отельную инструкцию.
Драйвер видеокарты обновлен?
Если это не последняя версия драйвера или вы не знаете, является ли она крайней.
Решение
- Перейдите на официальный веб-сайт вашей видеокарты, чтобы загрузить и установить ее.
- Либо наберите в поисковике Windows «Диспетчер устройств».
- В открывшемся окне, выберите «Видеоадаптеры».
- Кликните ПКМ и в выпадающем меню отройте «Свойства».
- Внутри щелкните по вкладке «Драйвер».
- Нажмите «Обновить».
Вы импортировали информацию реестра?
Вообще говоря, версия игры имеют один или несколько файлов информации реестра с расширением *.reg. Эти документы необходимо показать для правильной работы приложений. Особенно после переустановки компьютера.
Решение
Запустите его, чтобы импортировать информацию. В противном случае может быть невозможно запустить игру.
Часто все очень просто и достаточно кликнуть два раза левой кнопкой мыши и дать разрешение на изменение реестра.
Англоязычная директория
Иногда игра должна быть помещена в каталог полностью на английском языке, прежде чем она сможет нормально работать.
Решение
- Например, измените название пути на «C:/game/…».
- Вы должны убедиться, что пользователь Windows, которого вы используете в настоящее время, именован английскими символами.
- Иначе рекомендуется создать нового пользователя.
Включено ли прямое ускорение?
Часто прямое ускорение компьютера отключается по необъяснимым причинам, что приводит к сбою многих игр. Подсказка в это время может быть такой, как «Пожалуйста, установите DirectX 8.0 или выше» или «Ускорение DirectX недоступно». В настоящее время для запуска игры необходимо вручную включить прямое ускорение.
Решение
- Зажимаем «Win+R».
- Вводим «dxdiag».
- Переходим в вкладку «Дисплей».
- Находим поле «Возможности DirectX».
- Все должно быть включено так, как на картинке ниже.
Если что то выключено, то проблема скрывается в в следующем:
- Битые драйвера;
- Проверьте в «Диспетчере устройств» и обновите все драйвера через меню «Свойства».
- Не новый Дирекс;
- Обновите до версии указанной в системных требованиях.
- Ускорение железа;
- Сторонние программы для ускорения;
- Электронные компоненты перестали работать или не соответствуют требованиям.
Вы установили PhyX?
Многие игры теперь поддерживают PhyX, хотя только NVIDIA могут его включать.
Решение
Для пользователей видеокарт ATI для запуска игры необходимо всего лишь установить драйверы PhyX. Сам physxloader.dll подставится автоматически при установке драйвера.
- Иногда physxloader.dll нужно скопировать в корень с игрой, заменив уже существующий и в системную папку «C:WindowsSystem32».
- После чего это «*.dll» необходимо зарегистрировать, для этого:
- Нажмите «Win+R».
- Введите «regsvr32.exe physxloader.dll».
Режим совместимости
Некоторые старые игры не запускаются. Потому что при программировании не учитывались особенности новой версии Windows. Поэтому можно попробовать запустить игру в режиме совместимости.
Решение
- Конкретный метод заключается в том, чтобы щелкнуть правой кнопкой мыши значок игры.
- Выбрать «Свойства».
- Найти вкладку «Совместимость».
- Установить флажок «Запустить эту программу в режиме совместимости».
- Выбрать, какую операционную систему использовать.
Ваша игра для Windows Live установлена?
Сейчас многим старым играм нужна поддержка Game For Windows Live, и их надо установить (не запускать через ОЗУ, как раньше), чтобы играть. Иначе в некоторых системах будет указано, что файл xlive.dll отсутствует, в то время как в других системах будет указано 0xc000007b. Так что Game For Windows Live нельзя игнорировать.
Установлен ли ваш Microsoft .NET Framework?
В оригинальные Vista, и в Windows 7 встроен .NET Framework, а вот о пиратской версии сказать сложно. Взломки часто кастрируют некоторый контент, и никто не может узнать, как это повлияет на структуру системы. Так что если ваша система не официальная, то вы можете попробовать установить Фреймворк самостоятельно.
Решение
Кликните на ссылку и скачивайте .NET Framework с нашего сайта или испробуйте все способы из приведенной инструкции и перейдите на страницу загрузки платформы внизу инструкции.
Замена операционной системы
По запросам заметно, что эта проблема очень распространена на 64-битных компьютерах, и в редких случаях она встречается и на системах x32. Поэтому рассмотрите возможность перехода на 32-битную ОС. Вероятность этой проблемы будет значительно снижена.
Аппаратное обеспечение
Если эта проблема все еще возникает даже после смены операционной системы, она может быть вызвана оборудованием.
Как уже упоминалось в начале статьи, эта проблема может быть вызвана со стороны электронных компонентов. Если вышеуказанные шаги по-прежнему не работают, вы можете подумать, есть ли проблема с оборудованием. Рекомендуется вытащить видеокарту и разомкнуть другие контакты. Протереть их начисто перед тем, как вставить обратно, что может решить проблему.
Часто задаваемые вопросы
Игры, которые я запускаю, имеют спецэффекты DirectX 11, будет ли это иметь какое-то отношение к Дирекс 9?
На самом деле, ради совместимости приложений компании часто разрабатывают игрушки на основе 9-ой версии, а затем добавляют специальные эффекты от 10-ки и 11-ой.
Есть ли проблема с DirectX, которая влияет на последние игры?
Да, дело в том, что Windows старых версий поддерживают самые основные компоненты Дирекс, а игре часто нужны более продвинутые (такие как d3dx9_42.dll, xinput1_3.dll…). В системе отсутствуют эти ключевые файлы, из-за чего игра не запустится или появится ошибка 0xc000007b.
Некоторые люди могут спросить: я уже установил DirectX 9.0 и C++, но они все равно не работают?
Здесь кроется важная вещь: 32-битные системы должны устанавливать 32-битные файлы библиотек DirectX и C++, а 64-битные системы должны устанавливать файлы библиотек с типом разрядности данных как x32-а, так и x64-е бита, что является ключом к решению этой проблемы.
Коэффициенты предоставлены
Нет ничего хуже, чем установить новую игру, кликнуть на ярлык и…увидеть всплывающую ошибку! К сожалению, такая проблема возникает очень часто. Одна из самых распространенных ошибок называется 0xc000007b, а точнее:
«Ошибка при запуске приложения (0xc000007b). Для выхода из приложения нажмите кнопку ОК».
Чаще всего это происходит во время запуска игр, но также ошибка может вылезти при открытии программы. Так как же ее исправить? Об этом – в нашем гайде.
Почему эта ошибка вообще вылезает?
Чтобы исправить ошибку, нужно понять ее природу. Давайте перечислим, какие могут причины ошибки 0xc000007b:
- Совместимость. Например, на 32-разрядном ПК вы хотите открыть программу, предназначенную на 64-разрядный компьютер.
- Права администратора. Порой, причина в том, что ту или иную программу нужно открывать с правами администратора.
- Антивирус. В некоторых случаях антивирус или брандмауэр может блокировать запуск определенных программ или игр.
- Некорректная установка программы.
- Повреждены или отсутствуют библиотеки. Такие библиотеки, как DirectX, Visual C++, net.Framework, нужны, чтобы открывать большую часть программ. Если с библиотеками что-то не так – может вылезти та самая ошибка.
- Драйвера. Если они давно не обновлялись или неправильно работают. Особенно часто ошибка возникает из-за драйверов видеокарты.
Сразу стоит сказать, что от данной ошибки не существует панацеи. Поэтому мы распишем аж 7 способов устранения данной ошибки. Какой из них поможет именно вам – неизвестно. Но один из методов точно должен помочь!
Способ №1
Самое очевидное – проверить совместимость программы и вашего ПК. Возможно, стоит скачать версию программы или игры, рассчитанную юна 32-разрядную версию.
Если же суть в том, что вы на условном Windows 7 запускаете игру, разработанную для Windows 10, то вам нужен способ запуска программы в режиме совместимости. Для этого нужно зайти в свойства программы, выбрать вкладку «Совместимость», найти опцию «Запустить программу в режиме совместимости» и выбираем нужную нам операционную систему.
Способ №2
Возможно, у вас просто недостаточно прав, чтобы открыть игру или программу. ПКМ по ярлыку, выбрать «Запуск от имени администратора».
Способ № 3
Просто отключите антивирус или брандмауэр Windows!
Способ № 4
Как вариант, произошел коллапс во время установки игры или приложения. В таком случае попробуйте удалить все файлы, связанные с этой игрой/программой и установите ее заново. Если ошибки не исчезли, то, возможно, проблема в установочном файле. Скачайте официальную версию программы.
Способ №5
Библиотеки файлов DirectX, Visual C++, net.Framework обязаны быть установлены на любом ПК с Windows! Как проверить, есть ли они и работают ли они правильно? Заходим в «Панель управления» – «Все элементы панели управления» – «Программы и компоненты». Здесь вы увидите списки библиотек – все они должны быть в актуальном состоянии.
Кстати, если у вас 64-битная версия, то рекомендуем поставить Microsoft Visual C++ для 64 bit и 32 bit.
DirectX — это комплект необходимых API — программных интерфейсов приложений. Незаменимы для воспроизведения большинства игр и мультимедиафайлов.
- DirectX версия 9 для Windows XP.
- DirectX версия 10 для Windows Vista.
- DirectX версия 11 для Windows Vista, 7, 8, 10.
- DirectX версия 12 для Windows 10.
Microsoft Net.Framework — это цифровая среда Windows для приложений и игр, установить которую можно через Центр обновлений Windows. В списке «Программы и компоненты» должны быть версии 4.7.1 и 3.5.
Способ №6
Драйвера. Как всегда, дело может быть именно в них. Как проверить? Мой компьютер – Свойства – Диспетчер устройств – Видеоадаптеры.
Нажмите ПКМ по устройству и проверьте обновления драйвера. Если Windows не хочет или не может найти обновление, то надо поискать на официальном сайте разработчика.
Способ №7
- Установите Dependency Walker 64bit, который можно скачать здесь.
- В программе выберите View – Full paths. Откройте файл .exe той игры, где у вас возникает ошибка.
- В разделе module прокрутите до самого низа – увидите определенные значения в столбиках.
- В столбике CPU все DLL файлы должны быть 64-битные для игры. Если есть х86 DLL-файл, то он будет в красной колонке CPU. Именно он – причина ошибки.
- Найдите 64-битную DLL файла и поместите его в папку с игрой и в C:Windowssystem32. Проблема должна быть решена.
Теперь вы знаете, как справиться с ненавистной ошибкой!
Ошибки Windows 11 – основные ошибки Виндовс 11, как исправить, гайд
Как обновиться до Windows 11 – гайд, способы обновления до Виндовс 11
Не так давно я столкнулся с одной, достаточно редко встречающейся в моей практике, ошибкой. Она носит название «Ошибка при запуске приложения (0xc000007b)» и влечет за собой отказ в запуске приложения в операционной системе Windows. Проще говоря, некоторые приложения перестают запускаться вообще, либо всё же запускаются, но далеко не всегда. Щелкаешь в проводнике по имени запускного exe-модуля, либо пытаешься запустить исполняемый файл из командной строки, и наблюдаешь следующую картину:
Забавно, но что то в этой ошибке c000007b показалось мне знакомым, моя дырявая долговременная память сохранила смутные образы подобных проблем еще с незапамятных времен, при этом не оставив никаких ясных обстоятельств. Изучая информацию по данной ошибке в Сети я начал припоминать, что наблюдал подобные ошибки еще во времена Windows 2000, но на самом то деле характерны они были для исполняемых бинарных модулей аж со времен Windows 98, просто формулировались иначе. Начиная с версии Windows 2000 и по сей день ошибка c000007b выглядит в точности так, как представлено выше, и, скорее всего, на протяжении нескольких поколений ОС имеет родственные причины возникновения. Специфика найденного мной в Сети материала заключалась в том, что давались многочисленные рекомендации по исправлению, однако не было никакой конкретики по причинам, в связи с чем появилось желание попытаться изучить проблему самостоятельно.
Знаете, мне порой достаточно сложно так вот «с ходу» понять происходящее, я думаю вся загвоздка тут заключается в ограниченности моих знаний по архитектуре операционной системы, их явно не достаточно для того, чтобы понять, где находится источник ошибки, на каком уровне кода она возникла, какая подсистема обработала и вывела ошибку на экран. В конечном счете ведь именно подобные, глубокие знания системы и позволяют нам понимать принципы функционирования и причины тех или иных системных ошибок. Поэтому, сегодня мы будем изучать данный вопрос сообща, так сказать «на живую», так что будьте готовы ко всякого рода неточностям. Что мы можем сказать о проблеме? Судя по всему, она может лежать как внутри так и вне конкретного исполняемого образа, поскольку в наблюдаемой мной однажды, затронутой проблемой системе, ошибка возникала при запуске абсолютно разных приложений. К сожалению, проблемную систему необходимо было «поднимать» в кратчайшие сроки, поэтому не было возможности продолжить детальное изучение, и позже я вынужден был воспроизводить ошибку на другой, абсолютно здоровой системе.
Данная статья представляет собой всего-лишь теоретические выкладки по исследованию загрузчика образов операционной системы Windows. Изучение проводилось с целью создать базис для предполагаемого дальнейшего изучения особенностей кода загрузчика. На данный момент рекомендаций по исправлению ошибки c000007b в данной статье не предоставлено, поскольку практика показала неоднозначность популярных решений с использованием утилит Dependency Walker и Process Monitor.
Формат исполняемых файлов
Приступим. Для начала давайте посмотрим, что же нам сообщают разработчики об ошибке со статусом c000007b на официальной странице значений NTSTATUS? Ошибка носит символическое имя STATUS_INVALID_IMAGE_FORMAT
(НЕКОРРЕКТНЫЙ ФОРМАТ ОБРАЗА), а в описании к ней присутствует следующая формулировка: «Образ либо не предназначен для выполнения в Windows или содержит ошибку..», ну и далее даются общие рекомендации. Как всегда, довольно пространное определение, не содержащее в себе значимых подробностей, однако уже позволяющее нам сделать как минимум два предположения:
- ошибка может содержаться в служебных структурах заголовка основного запускаемого модуля (exe-файл);
- ошибка может содержаться в подключаемых образах (dll-библиотеках);
Ну хорошо, а что же в себе таит утверждение о некорректном формате? Возможно, подразумевается некое повреждение структуры PE-образа? Но ведь близких по природе ошибок в PE-образе, чисто теоретически, может быть великое множество, и скорее всего так оно и есть. Одним словом, это утверждение о повреждении структуры исполняемого образа требует проверки и аргументации!! В свою очередь, для проверки следовало бы отследить, какой именно код ядра и на каком этапе выводит данное сообщение. Вероятно, если мы наблюдаем подобную ошибку до запуска приложения, то от момента щелчка правой кнопкой мыши по бинарному исполняемому файлу (например: exe-файл) в проводнике Windows (explorer.exe) и до непосредственного начала выполнения кода приложения, проходит некая скрытая от глаз пользователя работа на уровне ядра операционной системы и вот как раз эта самая работа иногда завершается с ошибкой. Одни вопросы порождают другие. Думаю, для лучшего понимания того, какая именно логика скрывается за безмолвием загрузки, надо сперва задаться вопросом «что же вообще такое представляет из себя исполняемый файл в среде Windows и как он загружается»? Всякий бинарный исполняемый файл в Windows построен на основе формата под названием PE
(Portable Executable, переносимый исполняемый), который содержит в себе великое множество разнообразных секций, предназначенные для подготовки участков файла (они же блоки кода и данных), критичных для непосредственного выполнения приложения.
Portable Executable (PE) — формат исполняемых файлов и динамических библиотек, используемый в операционных системах Microsoft Windows. Фактически это довольно сложная структура данных, в которой содержится информация, необходимая системному загрузчику исполняемых образов, то есть коду ядра, который производит всю необходимую работу по подготовке исполняемого файла к непосредственному запуску (создание адресного пространства процесса, отображение файла в память, создание всех необходимых для функционирования системных конструкций и прч). В операционных системах Windows описываемый формат PE применяется при создания таких исполняемых файлов как:
.exe
,.dll
,.sys
и некоторых других.
Выходит, в системе имеется некий загрузчик образов (PE-загрузчик), естественно, ведь кто-то должен подготавливать код и данные к непосредственному исполнению. Это отлично укладывается в логику функционирования операционной системы, к тому же я про него время от времени краем уха слышал. Но это, извините, закопано где-то системе, с чего нам начать? Давайте начнем с малого, с формирования тестовой среды:
- Операционная система: Windows 7 Профессиональная (Русская), 32-разрядная (6.1.7601) (32-битную среду я выбрал для простоты, дабы WOW64 не вносил свои коррективы);
- Простой исполняемый модуль lasterr.exe из комплекта примеров FASM (EXAMPLESDLL) с минимумом подключаемых библиотек. Опять же, для простоты;
- Отладчик WinDbg (версия 10.0.14321.1024) из комплекта Debugging Tools for Windows (x86);
- Утилита Process Monitor;
Процесс загрузки образа
В моем случае, при отсутствии необходимых знаний, придется двигаться с самого начала, при этом интуитивно выискивая направления по косвенным признакам. Все те данные, которыми мы обладаем на текущий момент, подводят нас к мысли, что надо каким-то образом зацепиться за этот пресловутый загрузчик образов, но как? Единственное, что приходит в голову, так это использовать всеми нами любимую утилиту Process Monitor. Зная специфику программы, можно заранее предположить, что это будут лишь поверхностные сведения, поскольку утилита не покажет нам подробности многих этапов загрузки образа на выполнение. Но ведь что-то она нам все же даст, ведь пока мы идем в темноте и пытаемся нащупать хотя бы какие-то ориентиры для дальнейшего продвижения. Просто будем надеяться, что информация, предоставляемая нам утилитой Procmon поможет нам двинуться дальше, найти зацепку в виде каких-нибудь малозаметных деталей. Тут стратегия у нас будет достаточно простая, ничего необычного.
- Из-под учетной записи с правами локального администратора запускаем утилиту Procmon;
- В разделе Filter создаем фильтр на наше приложение lasterr.exe;
- Останавливаем захват событий (Ctrl+E или иконка лупы на панели);
- Очищаем лог (Ctrl+X или значок ластика на панели);
- Снова включаем захват (Ctrl+E) событий;
- Стартуем наблюдаемое приложение lasterr.exe, как обычно двойным щелчком из проводника;
Основной экран программы Procmon моментально заполняется событиями.
Изучая получившийся у нас лог событий, можно увидеть следующие этапы запуска приложения:
- Образ приложения lasterr.exe загружается в адресное пространство собственного процесса по адресу
0x400000
. То есть мы наблюдаем какой-то из этапов уже работающего загрузчика образов; - Образ системной библиотеки ntdll.dll загружается в адресное пространство процесса по адресу
0x77c30000
. Эта библиотека всегда загружается первой? - Активизируется ускоритель
prefetcher
. В системной директории C:WindowsPrefetch проверяется.pf
-файл(ы) для запускаемого приложения; - Чуть ниже мы можем увидеть группу событий по операциям (
CreateFile
,SetBasicInformationFile
,QueryAttributeTagFile
,CreateFileMapping
,QueryStandardInformationFile
) с библиотеками ntdll.dll, kernel32.dll, apisetschema.dll, kernelbase.dll, locale.nls, errormsg.dll, user32.dll и прочими. Судя по всему это не проецирование образов, а события, генерируемые prefetcher’ом; - Ниже по списку мы наблюдаем первые события с операцией
Load Image
, которые знаменуют собой загрузку необходимых приложению DLL библиотек в адресное пространство процесса; - Еще ниже по списку событий мы наблюдаем чтение ветки HKLMSOFTWAREMicrosoftWindows NTCurrentVersionImage File Execution Options. Имеется в виду механизм, которых позволяет запускать образы под отладчиком;
- Далее мы видим считывание ключа реестра HKLMSOFTWAREMicrosoftWindows NTCurrentVrsionWindowsLoadAppInit_DLLs. Ключ ответственен за механизм AppInit_DLLs, который позволяет определить списки DLL, загружаемые в адресное пространство «каждого» процесса;
- Далее идет работа с различными языковыми опциями и MUI;
Это все, что предоставляет нам Procmon. Но на самом деле в приведенном выше списке мы видим очень малую часть логики, так сказать её вершину. Обусловлено это тем, что Process Monitor показывает лишь то, до чего может сам дотянуться, и не отображает всего многообразия операций по подготовке приложения к запуску. (прим.: хотя, возможно я забыл отключить какие-то встроенные фильтры). Но даже малое порой представляет собой большое, все дело в точке зрения Давайте посмотрим, о чем на могут рассказать захваченные Process Monitor’ом события? Например, событие Load Image
применительно к образу lasterr.exe по загрузке себя же самого по базовому адресу 0x400000
в адресное пространство процесса, определенно будет нам интересно. Щелкнем по нему пару раз и перейдем во вкладку Stack. Стек вызовов начинается с функции RtlUserThreadStart
, которая является частью системной библиотеки ntdll.dll. Библиотека ntdll.dll предоставляет собой «родной» интерфейс (Native API) пользовательского режима для функций ядра, это своеобразный «мост» между функциями библиотек пользовательского режима и кодом, который реализует соответствующий функционал в ядре. Функция RtlUserThreadStart
именуется подобным образом не спроста, название говорит само за себя, намекая нам на назначение данной функции. Предположительно она предназначена для старта потока внутри процесса, при содержит функционал части пользовательского режима.
RtlUserThreadStart
— общая стартовая функция для всех потоков в Windows.
Вот уже есть у нас какая-никакая а зацепка в виде данной функции, с которой стартуют все потоки в Windows. Проходим далее по списку событий и в общем потоке обращаем своё внимание на событие Load Image
, которое относится к загрузке библиотеки kernel32.dll. Поступаем аналогичным образом, выполняем двойной щелчок левой кнопкой мыши, открываем дополнительную информацию о событии, переходим на вкладку Stack и наблюдаем следующее:
Тут уже у нас в начале стека вызовов присутствует фрейм функции LdrInitializeThunk
из библиотеки ntdll.dll. Странно, в этот раз стек начинается с другой функции, хотя, поскольку нам не известна взаимосвязь функций в библиотеке ntdll.dll, это мало нам о чем-то говорит, поскольку LdrInitializeThunk
может вызываться позже, то есть во многих случаях мы можем иметь дело с одной и той же логикой.
LdrInitializeThunk
— функция обратного вызова (режим ядра -> режим пользователя) в составе библиотеки ntdll.dll, которая не столько обратный вызов, сколько точка входа, с которой все потоки пользовательского режима начинают свое выполнение. Другими словами, создание любого потока пользовательского режима всегда происходит посредством данной функции. В некоторых источниках фигурирует как процедура инициализация загрузчика, начальный его этап, отвечает за инициализацию непосредственно загрузчика, менеджера кучи, таблиц FLS, NLS, TLS, структур критической секции. Судя по всему они сRtlUserThreadStart
работают в связке, но как именно, пока не ясно.
Мы получили имена двух функций, которые, судя по всему, имеют отношение к созданию потока и подготовке его к выполнению. Теперь можно переходить непосредственно к практической части исследования. Надеюсь, перед началом экспериментов у Вас уже готова тестовая среда и установлены Debugging Tools for Windows из комплекта Windows SDK и в системную переменную Path добавлен путь к необходимой версии каталога с отладчиками. Теперь задача перед нами стоит не совсем тривиальная, поскольку нам необходимо поймать момент запуска приложения, до его непосредственного выполнения и даже до момента подготовки адресного пространства процесса. К превеликой нашей радости, основными отладчиками от Microsoft поддерживаются фильтры событий, которые включают отладочный сценарий начальной стадии загрузки приложения. Насколько я понял, он может быть активирован двумя путями:
- Настройка отладчика через GUI: через меню Debug — Event Filters. На фильтре события Create process указываем опцию Execution: Enabled. После перезапуска процесса отладчик остановится до функции
LdrInitializeThunk
. - Запуском отладчика со специальными опциями командной строки.
Например, следующая команда позволяет изучить процесс и установить точку останова до того, как код пользовательского режима запустится:
windbg.exe -xe ld:ntdll.dll lasterr.exe
опция xe
подразумевает останов после того, как библиотека ntdll.dll будет загружена в адресное пространство процесса. И не спроста, потому как в самом отладчике, в командной строке, мы должны поставить точку останова:
bp ntdll!LdrInitializeThunk
а затем продолжить выполнение командой «g». Для чего это все? А для того, чтобы пропустить некоторое количество кода, которое выполняется до функции LdrInitializeThunk
. Мы бы в любом случае вышли на неё, однако потратили бы дополнительное время.
Отладчик останавливается на точке остановка в самом начале функции:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
ntdll!LdrInitializeThunk: 77c934a6 8bff mov edi,edi 77c934a8 55 push ebp 77c934a9 8bec mov ebp,esp 77c934ab ff750c push dword ptr [ebp+0Ch] ss:0023:0006fd1c={ntdll!`string‘ (ntdll+0x0) (77c30000)} 77c934ae ff7508 push dword ptr [ebp+8] 77c934b1 e816000000 call ntdll!LdrpInitialize (77c934cc) 77c934b6 6a01 push 1 77c934b8 ff7508 push dword ptr [ebp+8] 77c934bb e8101cfeff call ntdll!ZwContinue (77c750d0) 77c934c0 50 push eax 77c934c1 e87f37feff call ntdll!RtlRaiseStatus (77c76c45) 77c934c6 cc int 3 77c934c7 90 nop 77c934c8 90 nop 77c934c9 90 nop 77c934ca 90 nop 77c934cb 90 nop |
Ну, судя по всему, функция LdrInitializeThunk
содержит (на верхнем уровне) вызовы всего трех функций: LdrpInitialize
, ZwContinue
, RtlRaiseStatus
, причем, я так понимаю, две последних функции являются для нас не значимыми. Выполнив отладчиком по клавише F10 команду call ntdll!LdrpInitialize
я убедился, что приложение запустилось. Получается, вся работа происходит в глубинах функции Ldrpinitialize
, надо идти внутрь. Первым параметром в функцию LdrpInitialize
передается адрес дампа PE-файла в адресном пространстве процесса, а вторым адрес какой-то неизвестной структуры (?). Судя по всему, когда я впервые остановился на точке останове в начале функции, в первом параметре я увидел адрес подмапленной в память библиотеки ntdll.dll, поскольку она загружается самой первой. С этого момента я опускаю ряд подробностей нахождения мест кода, которые могли быть ответственны за генерацию ошибки c000007b, поскольку описание всего процесса отладки превратило бы повествование в бесконечное. Скажу лишь, что всю работу по анализу кода я проводил при помощи отладчика WinDbg и дизассемблера IDA.
Первая причина
Первая удача сопутствовала мне при обработке функции LdrpSnapIAT
. Очередной раз анализируя код я поставил точку останова на данную функцию, и при выполнении отладчик остановился на следующем коде:
ntdll!LdrpSnapIAT: 77c94ca1 6a24 push 24h 77c94ca3 68f808c877 push offset ntdll! ?? ::FNODOBFM::`string‘+0x542 (77c808f8) 77c94ca8 e847dbfeff call ntdll!_SEH_prolog4 (77c827f4) 77c94cad 8d45d8 lea eax,[ebp—28h] 77c94cb0 50 push eax 77c94cb1 6a00 push 0 77c94cb3 6a01 push 1 77c94cb5 8b7508 mov esi,dword ptr [ebp+8] 77c94cb8 ff7618 push dword ptr [esi+18h] 77c94cbb e8caa7ffff call ntdll!RtlImageDirectoryEntryToData (77c8f48a) 77c94cc0 8945d4 mov dword ptr [ebp—2Ch],eax 77c94cc3 85c0 test eax,eax 77c94cc5 0f843dc50100 je ntdll!LdrpSnapIAT+0x26 (77cb1208) |
Самое последнее условие je ntdll!LdrpSnapIAT
должно уводить нас на следующую ветку кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
77cb1208 a17473c877 mov eax,dword ptr [ntdll!LdrpLogLevelStateTable (77c87374)] 77cb120d 83c801 or eax,1 77cb1210 8505c0f9d077 test dword ptr [ntdll!LdrpDebugFlags (77d0f9c0)],eax 77cb1216 7422 je ntdll!LdrpSnapIAT+0x58 (77cb123a) 77cb1218 83c624 add esi,24h 77cb121b 56 push esi 77cb121c 688491c777 push offset ntdll! ?? ::FNODOBFM::`string‘ (77c79184) 77cb1221 6a00 push 0 77cb1223 687891c777 push offset ntdll! ?? ::FNODOBFM::`string’ (77c79178) 77cb1228 6877080000 push 877h 77cb122d 688c8ec777 push offset ntdll! ?? ::FNODOBFM::`string‘ (77c78e8c) 77cb1232 e813e10100 call ntdll!LdrpLogDbgPrint (77ccf34a) 77cb1237 83c418 add esp,18h 77cb123a a1c0f9d077 mov eax,dword ptr [ntdll!LdrpDebugFlags (77d0f9c0)] 77cb123f 85057873c877 test dword ptr [ntdll!LdrpLogLevelStateTable+0x4 (77c87378)],eax 77cb1245 7401 je ntdll!LdrpSnapIAT+0x66 (77cb1248) 77cb1247 cc int 3 77cb1248 b87b0000c0 mov eax,0C000007Bh 77cb124d e9f93afeff jmp ntdll!LdrpSnapIAT+0x129 (77c94d4b) |
Понятное дело, что в штатном режиме управление туда не передается, поэтому я просто взвел флаг zero
, чтобы принудительно инициировать переход. Ну и в самом конце фрагмента кода мы видим долгожданную команду mov eax, 0C000007Bh
, после чего я запускаю выполнение командой g
и.. вот оно:
Первая ласточка! Теперь осталось выяснить, что же это за фрагмент кода и что проверяют данные условия. Изначально условия перехода на код с генерацией ошибки содержат проверку возвращаемого из функции RtlImageDirectoryEntryToData
значения.
Судя по описанию с MSDN, данная функция ищет запись внутри PE-заголовка и возвращает адрес данных для этой записи (при наличии возвращает заголовок секции (
IMAGE_SECTION_HEADER
)) и длину, а случае ошибки возвращает ноль. Используется для поиска различных таблиц в PE-файлах.
Получается эта функция предназначена для получения секций подключаемых библиотек? Ничего не понятно, необходимо как то понять все происходящее в целом, так сказать откатиться назад, а для этого нам надо посмотреть стек вызовов:
ntdll!LdrpSnapIAT+0x2b ntdll!LdrpHandleOneOldFormatImportDescriptor+0x120 ntdll!LdrpHandleOldFormatImportDescriptors+0x1f ntdll!LdrpProcessStaticImports+0x25c ntdll!LdrpLoadDll+0x33d ntdll!LdrLoadDll+0xaf ntdll!LdrpInitializeProcess+0xfe7 ntdll!_LdrpInitialize+0x78 ntdll!LdrInitializeThunk+0x10 |
Похоже что за инициализацию процесса отвечает функция LdrpInitializeProcess
, которая, на определенном этапе своей работы начинает загружать библиотеки, необходимые для работы основного приложения, при помощи функции LdrLoadDll
, а та, в свою очередь, начинает просматривать таблицу импорта и заполнять Import Address Table (IAT) через функцию LdrpSnapIAT
. Однако стек не всегда остается подобным, при прогоне программы по команде g
и остановке на точке останова, стек вызовов иногда меняется, показывая, что код загружает модули, присутствующие в таблице импорта.
Функция LdrpSnapIAT «связывает» таблицу адресов импорта с импортируемыми DLL библиотеками, перезаписывает каждую запись в таблице адресов импорта актуальным адресом импортируемой функции.
В коде функции LdrpSnapIAT
имеется вызов функции RtlImageDirectoryEntryToData
, которая, в свою очередь, использует RtlImageDirectoryEntryToDataEx
, а та вызывает функцию RtlpImageDirectoryEntryToData32
, которая уже проверяет следующие условия:
- Если значение входного параметра
DirectoryEntry
(Порядковый номер требуемой записи каталога) больше или равно (>=) значенияPeHeader.OptionalHeader.NumberOfRvaAndSizes
(число записей в массиве DataDirectory. обычно имеет значение 16); ПосколькуDirectoryEntry
может иметь только определенные значения: IMAGE_DIRECTORY_ENTRY_ARCHITECTURE (7), IMAGE_DIRECTORY_ENTRY_BASERELOC (5), IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT (11), IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR (14), IMAGE_DIRECTORY_ENTRY_DEBUG (6), IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT (13), IMAGE_DIRECTORY_ENTRY_EXCEPTION (3), IMAGE_DIRECTORY_ENTRY_EXPORT (0), IMAGE_DIRECTORY_ENTRY_GLOBALPTR (8), IMAGE_DIRECTORY_ENTRY_IAT (12), IMAGE_DIRECTORY_ENTRY_IMPORT (1), IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG (10), IMAGE_DIRECTORY_ENTRY_RESOURCE (2), IMAGE_DIRECTORY_ENTRY_SECURITY (4), IMAGE_DIRECTORY_ENTRY_TLS (9), он действительно не должен быть >=16! - Если значение поля
PeHeader.DataDirectory.Export
библиотеки = 0. В коде функции для поиска местоположения структуры Object Table используется yнивеpсальная формула: pe_header_offset + rva_entries_number*8 + 78h; здесь: pe_header_offset — смещение от начала файла до PE-заголовка (смещение 3Ch), rva_entries_number — количество записей в таблице объектов. После вычисления мы попадаем на первую запись структуры IMAGE_DATA_DIRECTORY, которая содержит относительный адрес (RVA) таблицы экспорта. Предположение: в уже загруженной в адресное пространство процесса DLL, которая должна предоставлять экспортируемые функции нашей основной программе (иначе бы она не была загружена), отсутствует таблица экспорта? Подобная ситуация не допустима и явно ошибочна.
Вот по этим то условиям на выходе мы и видим ошибку c000007b. Чтобы понять что же происходит в глобальном плане, следует принимать во внимание, что нашему приложению требуются внешние DLL, которые содержат функции, необходимые для выполнения. В свою очередь сама подключаемая DLL может импортировать функции из других библиотек, что создает своеобразный каскад загрузок. Загрузчик должен пройти по таблице импорта каждой библиотеки и понять её зависимости. Вот именно на определенных моментах этих проходов и возникают описанные выше проверки различных структур библиотек.
Когда после запуска исследуемого приложения под отладчиком, при первом останове на функции LdrpSnapIAT
пытаешься принудительно выйти на данную ветку кода, то ошибка не появляется! Могу предположить, что при первом вызове функции анализируется какая-то важная системная библиотека, поскольку из данных Procmon было видно, что первой загружается ntdll.dll, то можно предположить что так оно и есть. Соответственно, отказ в загрузке её самой (вероятно) не может быть завершен ошибкой, и загрузка приложения lasterr.exe в этом случае просто «тихо» завершается не выводя никаких сообщений, иными словами приложение не запускается без каких-либо ошибок, просто ничего не происходит. Поэтому, я несколько раз выполнил команду g и начал анализировать функцию со второго и последующих её вызовов, что дало видимые результаты.
В дополнение к вышеизложенному, ветвления кода, приводящие к генерации приложением ошибки c000007b удалось найти в следующих функциях:
Наименование функции | Предполагаемая причина |
---|---|
LdrpResGetMappingSize | Проверка кода NTSTATUS при возврате из функции RtlImageNtHeaderEx . Если он не нулевой (ошибочный), то проверяются первые два байта опционального заголовка на значение 10Bh (32-битный заголовок) и 20Bh (64-битный заголовок), если не соответствует ни одной из них — ошибка. |
LdrpResGetResourceDirectory | Код функции уходит на ошибку после нулевого результата выполнения вложенной функции LdrpSectionTableFromVirtualAddress , которая возвращает 0 в случае нулевого смещения PE-заголовка (в нормальной ситуации должно быть 00400080) и нулевого значения слова по смещению в заголовке = начало PE заголовка (00400080) + SizeOfOptionalHeaders + 18h, то есть первое слово Таблицы Секций (Section Table). Опять же, если мы получили Section Table, далее выполняется еще несколько проверок уже непосредственно над полями самой секции, и c000007b генерируется если некоторые поля (SizeOfRawData и прочие) в Section Table некорректны. |
LdrpResCompareResourceNames | Ошибка генерируется внутри функции по нескольким условиям, в основном это некорректные значения смещений и имен (длин имен) секций ресурсов. |
LdrpResSearchResourceInsideDirectory | Ошибка генерируется внутри функции по нескольким условиям, в основном это некорректные значения смещений и имен (длин имен) секций ресурсов. |
RtlImageNtHeaderEx | Ошибка генерируется внутри функции по нескольким условиям, скорее всего сюда же попадает попытка загрузки библиотеки «иной» (нежели основной модуль) разрядности. Предположение: при попытке запуска 64-битного приложения, у которого в импорте оказывается функция из 32-битной библиотеки или наоборот? |
Код, подобный тому, что был обнаружен в описанных выше функциях, при определенных условиях приводящих к ошибке c000007b, я встречал и в других функциях библиотеки ntdll.dll, однако не смог заставить его сгенерировать ошибку. Поэтому, количество причин, приводящих к возникновению ошибки, может быть несколько больше, что-то я мог и упустить. Однако даже те условия, которые были мной озвучены, уже могут подвести нас к определенным выводам.
Общее решение
Можно встретить две основные рекомендации по устранению ошибки c000007b:
- В некоторых случаях для решения подобной проблемы предлагается использовать утилиту Dependency Walker, которая позволяет просматривать импортируемые и экспортируемые сбойным модулем библиотеки, и, соответственно, выявить библиотеки, которые по тем или иным причинами не смогли подгрузиться. Но средство позволяет выявить лишь часть причин возникновения ошибки c000007b, поскольку:
как было показано выше, ошибка c000007b может генерироваться по нескольким условиям внутри кода загрузчика исполняемых образов операционной системы Windows, и не все из этих условий напрямую связаны с [недоступностью] импортируемых и экспортируемых функций подключаемых к модулю библиотек.
..к тому же, DW грешит еще и тем, что иногда не обнаруживает всех импортируемых модулем библиотек.
- Еще одним решением служит утилита Process Monitor, которая позволяет собирать события по деятельности загрузчика исполняемых модулей и выявлять некоторые проблемы. Но и он зачастую не видит всех деталей работы кода загрузчика, к тому же не способен найти проблемы в ресурсных секциях и заголовках.
Тем не менее, описанные инструменты позволяют обнаруживать большинство причин возникновения ошибки c000007b, они могут быть использованы в качестве стартового инструментария, и уже при невозможности решить проблему с их помощью, единственным средством остается отладчик. Лишний раз хочется кинуть камень в огород разработчиков, поскольку они могли бы значительно облегчить определение причины ошибки c000007b путем расширения статусных кодов и введения подробного описания, однако это потребовало бы доработки загрузчика образов. Но поскольку подобная глобализация множества разнородных ошибок под одним статусным кодом в программах под Windows характерна еще со времен Windows 2000, думаю, что ситуация в ближайшее столетие не поменяется
Ошибка 0xc000007b возникает при запуске приложений Windows, программ или игр. Код не сообщает рядовому пользователю ничего о том, что произошло, почему так, и как исправить ситуацию. Если человек не обладает достаточной компетенцией, будет сложно определить, что же пошло не так.
В статье пойдет речь об этой ошибке, природе возникновения и вариантах решения проблемы. После прочтения пользователь разберется в причинах сбоев запуска и сможет исправить ошибку. Информация прошла несколько проверок на достоверность и после этого была использована для написания статьи. Так или иначе, она помогает, если появляется ошибка при запуске приложения 0xc000007b.
Причины возникновения
Ошибки данного типа свидетельствуют о проблемах программного обеспечения. В основном это связано с повреждениями файлов запускаемых приложений или файлами библиотек, а также ограничениями непонятной природы. Последние берут прямое участие в исполнении алгоритма запуска. Но бывают и другие не связанные напрямую причины. Все возможные причины укладываются в следующий список:
- Неполадки совместимости;
- Ограниченный доступ к запуску, приложение требует исключительных полномочий;
- Повреждения файлов программы или игры при установке, прерванная установка;
- Ограничения антивируса на запуск приложения;
- Повреждения файлов библиотек;
- Повреждения файлов драйверов;
В зависимости от причины, которая приводит к сбою, применяется определенный метод решения проблемы. Часто возникает данная ошибка при запуске приложения. Например, часто мешает запуску itunes .
Как исправить ошибку 0xc000007b при запуске игры или программы? Методы решения
Каждый вариант, исправляющий ошибку, представлен списком от простых методов к сложным, и зависит от причины возникновения проблемы. Инструкции для удобства расположены сразу же, в описании метода решения. Так, как устранить ошибку?
Метод 1
Проблемы совместимости приложения вызваны конфликтом между операционной системой пользователя и запускаемым приложением, когда программа или игра создана для одной операционной системы, а устанавливается на другую. Например, игра предназначена для Windows XP, но установка и запуск производится на Виндовс 7. Тогда идет речь о причине, связанной с неполадками совместимости.
Исправить проблему легко: правой кнопкой на исполняемом файле(.exe) приложения — строка “Свойства” — вкладка “Совместимость” — поставить галочку рядом с надписью “Запуск в режиме совместимости” — выбрать из списка нужный вариант. Если не помогает один, то перепробовать все, что имеется в списке.
Метод 2
Ограниченный доступ и необходимость исключительных полномочий администратора приложением может проявляться по-разному, в том числе и данной ошибкой. Пробуйте запустить приложение от имени администратора. Для этого: правый клик на том же файле — строка “запуск от имени администратора” — подтвердить запрос на выполнение.
Метод 3 (самый распространенный)
Проблема возникает именно при повреждении архивов и файлов библиотек, необходимых для исполнения алгоритма запуска. В данном случае это — неисправности, конфликты, отсутствие файлов Visual C++, DirectX, .net Framework. Указанные библиотеки служат средством запуска большинства приложений, поэтому вероятность, что ошибка вызвана проблемой внутри них, стремится к 100%.
Для решения нужно установить/обновить отсутствующие библиотеки. Хочется отметить, что нужно устанавливать не самую последнюю версию, а все. Например библиотека Visual C++, должна быть установлена от 2005 версии до 2015. (Более подробнее на самой странницы с библиотекой). Также, обратите внимания, что библиотеки могут уже быть установленными, но работают не правильно из-за отсутствующих или поврежденных файлов. В таком случаи, рекомендуем удалить все версии через «Программы и компоненты», и установить всё снова.
Метод 3 стоит использовать, если возникла ошибка в игре Teamspeak 3, – это рекомендация производителя по исправлению. В этом случае также можно попробовать установить другую версию приложения, например, не 64х-, а 32х-разрядную.
Метод 4
При неправильной, прерванной установке приложения следует удалить его и запустить процесс заново. Если не помогло, найти другой источник установщика, ибо возможно, что текущий содержит ошибки и, как следствие этого, возникают ошибки при запуске.
Метод 5
Антивирусы — вещь хорошая и полезная, но изредка они могут принимать обход взломщиками ограничений производителя на использование приложений, как вирус. Поэтому, запуская пиратские копии, могут проявляться ошибки без предупреждений о вирусной атаке. Стоит экспериментировать с отключением экранов антивируса на время запуска. Плюс ко всему, антивирусы работают по неизвестным алгоритмам и могут препятствовать запуску пиратских копий программ.
Метод 6
Повреждения файлов драйверов приводят к подобным ошибкам. Отдельное внимание уделить ПО на видеокарту. Пробуйте обновить драйвера на сайте производителя. Если не помогло, удалите драйвер и установите его “чистым” способом. Для этого нужно предварительно скачать драйвера на Nvidia или ATI Radeon, в зависимости от производителя и модели видеокарты.
Заключение
Список причин и решений помогает в тех или иных случаях, и содержит информацию о природе ошибок. Содержащиеся инструкции используются для устранения неисправностей, когда появляется ошибка 0xc000007b при запуске игры или программы.
Если у Вас остались вопросы, можете задавать их в форме комментариев чуть ниже
Видео: Ошибка при запуске приложения 0xc000007b — как исправить?
Отсутствие хоть каких-то комментариев — главная проблема всех ошибок Windows. Код никогда не сообщает пользователю, что именно сломалось. Система дает непонятный набор цифр и букв с посылом «Гугл есть? Нагуглишь!». Из-за этого большинство людей даже не догадывается, что именно пошло не так.
Чаще всего появляется код 0xc000007b при запуске игры, утилиты или любой другой программы. Связано это с поврежденными файлами и другими ошибками ПО. Чтобы наконец-то избавиться от проблемы и запустить желанное приложение, мы подготовили 11 различных проверенных решений.
Возможные причины возникновения
Ошибка 0xc000007b при запуске игры связана с проблемами программного обеспечения. Значит, какие-то файлы приложения или библиотек повреждены. К тому же, запуску могут мешать непонятные ограничения. Вот список всех возможных проблем, которые вызывают ошибку:
- Отсутствие совместимости;
- Нет доступа к запуску — приложению не хватает определенных прав;
- Неправильная установка программы и повреждение ее файлов;
- Блокировка приложения антивирусом;
- Проблема с файлами библиотек;
- Неполадки с файлами драйверов.
Способ исправления ошибки напрямую зависит от причины. Но мы советуем проверить все варианты, если она вам неизвестна.
Мы подготовили 11 решений проблемы: от простого к сложному. Каждое из них представлено в виде удобной инструкции с вспомогательными скриншотами и советами. Уверены, статья точно поможет разобраться и найти подходящий метод.
Исправление совместимости
Самый первый и простой метод — проверить совместимость приложения и компьютера. Проблема может быть в другой разрядности. Сравните версию системы и скачанной программы — они должны совпадать. Для этого откройте «Проводник», нажмите правой кнопкой мыши на «Этот компьютер» и выберите «Свойства».
Еще один вариант — программа работает только на Windows 7, а вы запускаете ее на Windows 11. Чтобы исправить проблемы с совместимостью, зайдите в свойства программы — клик по иконке правой кнопкой мыши. Откройте вкладку «Совместимость» и выставьте нужную версию ОС.
Конфликт с антивирусом
Еще один простой вариант — проверить антивирус. Зачастую, он блокирует запуск программы из-за установки из неизвестных источников. Чтобы узнать наверняка, отключите его и вновь попробуйте запустить программу. Если все получилось — дело было именно в антивирусе.
Чтобы в дальнейшем не было проблем с запуском — добавьте программу в исключения. Мы не можем дать инструкцию для каждого антивируса — их слишком много. Но можем рассказать про «Безопасность Windows»:
- Откройте меню Пуск и найдите кнопку «Параметры».
- Зайдите в «Обновления и безопасность», а после в «Безопасность Windows» и «Открыть службу безопасности Windows».
- Выберите раздел «Защита от вирусов и угроз», а в нем строку «Управление настройками».
- В разделе «Исключения» выберите строку «Добавление или удаление исключений».
- Добавьте к списку необходимую программу или целую папку.
Недостаток прав
Иногда бывает, что приложению не хватает разрешений или оно запускается только от лица администратора. Чтобы убедиться — нажмите на иконку программы правой кнопкой мыши и выберите «Запуск от имени администратора». После чего, в открывшемся окне, подтвердите свой выбор.
Неправильная установка
Если вы заметили, что некоторые файлы распаковались некорректно или же установка не была завершена до конца — это явный знак. Кроме ошибки 0xc000007b, такая ситуация сопровождается сообщением о прерванной установке. Так можно узнать, что именно произошло.
Решить такую проблему легко — удалите приложение со всеми файлами со своего компьютера. После этого скачайте и установите программу заново. Если на этот раз ничего не изменится — поищите другой вариант программы, с другого сайта.
Чтобы полностью удалить игру с компьютера, выполните следующие шаги:
- Зажмите одновременно клавиши Win и R.
- В командную строку введите запрос «appwiz.cpl» и подтвердите с помощью клавиши Enter.
- В списке установленных приложений найдите нужное и нажмите по нему правой кнопкой мыши.
- Выберите «Удалить».
Старайтесь скачивать приложения только из официальных или хотя бы проверенных источников. Иначе рискуете не только нарваться на вирусы, но и потерять множество ценной информации или доступ к компьютеру.
Устаревшие драйвера
Случай довольно редкий, но многие игры не запускаются из-за устаревших драйверов для видеокарты. Но почему редкий? Все дело в том, что Windows сама ищет обновления для драйверов и автоматически их устанавливает. Без какого либо вмешательства со стороны пользователя.
Чтобы проверить наличие обновлений — откройте вкладку с видеокартами вашего ПК. Для этого:
- Одновременно зажмите клавиши Win и R.
- Введите в открывшуюся строке команду «devmgmt.msc» и нажмите «Ок».
- В Диспетчере устройств найдите пункт «Видеоадаптеры».
- Разверните стрелочку и нажмите правой кнопкой мыши на видеокарту.
- Выберите «Обновить драйвер».
Если Windows автоматически обновит драйвер после этих шагов — запускайте игру и проверяйте. А если обновления не были найдены — проверьте их на официальном сайте видеокарты: AMD или NVIDIA. Вероятно, придется качать вручную.
Если ошибка 0xc000007b возникла с популярной игрой — загляните на сайт разработчика. Зачастую компания или другие игроки пишут советы по исправлению ошибок в игре. Так можно легко сэкономить время и не пробовать все 11 способов.
Слишком новые драйвера
У драйверов вечно появляются самые разные проблемы. Не обновил — плохо. Обновил — не всегда хорошо. Зачастую новая версия наоборот ломает систему и вызывает каскад самых разных ошибок. В том числе 0xc000007b. И хорошо, если у вас просто не запускается игра, а не вылез экран смерти.
Чтобы избавиться от проблемы — откатите систему назад. Всего есть два способа: побыстрее и помедленнее. Начнем с первого.
- Найдите в поиске «Диспетчер устройств» и в нем список видеоадаптеров.
- Выберите нужный драйвер, нажмите по нему правой кнопкой мыши и кликните на «Свойства».
- Выберите кнопку «Откатить».
Обычно этого варианта достаточно, но есть и второй — более замудренный, с возможностью выбрать версию драйвера на свой вкус:
- Повторите все действия из прошлого способа, но выберите не «Свойства», а «Обновить драйвер».
- В открывшемся окне выберите «Выполнить поиск драйверов на этом ПК».
- Вместо указания места в строке выберите «Выбрать драйвер из списка доступных».
- Выберите драйвер из списка, ориентируясь по датам и названиям.
- Дождитесь завершения установки и проверьте, помог ли способ.
Сломанные библиотеки
На каждом компьютере с ОС Windows можно найти библиотеки Visual C++, net.Framework и DirectX. Если в них появилась ошибка, отсутствует файл или нет новой версии — игры будут некорректно работать. Или же вообще не запускаться, выдавая всевозможные ошибки.
Чтобы проверить целостность библиотек, откройте «Панель управления»:
- Разверните меню «Пуск» и найдите в окне поиска «Панель управления».
- Откройте утилиту и вбейте в окно поиска — в правом верхнем углу — «Программы и компоненты».
- Разверните вкладку и найдите в списке библиотеки файлов.
Учтите, все библиотеки должны быть с актуальными версиями. А Visual C++ со всеми возможными, начиная с 2005 года. Это нужно для старых игр. К тому же, если у вас 64-битная Windows — качайте пакеты Visual C++ как 64-bit, так и 32-bit. Лучше всего делать это с официального сайта.
Что касается библиотеки DirectX, вам понадобятся:
- DirectX 9 для Windows XP;
- DirectX 10 для Windows Vista;
- DirectX 11 для Windows 7-10;
- DirectX 12 для Windows 10.
Качаются они также с официального сайта Microsoft.
Для библиотеки Microsoft Net.Framework даже не нужно искать ссылку. Все обновления устанавливаются через «Центр обновлений Windows». Нас интересуют только Net.Framework 4.7.1 и 3.5. Остальные версии включены в них.
Файл xinput1_3.dll
Еще один вариант исправления проблемы — обновление библиотеки DLL. Очень часто ошибка 0xc000007b появляется из-за поврежденного файла xinput1_3.dll. Он может быть просто сломан или переписан другой несовместимой версией. Для его замены на правильный вариант и придется обновить DLL:
- Скачайте файл xinput1_3.dll для 32-разрядной системы и извлеките его из архива.
- Откройте «Проводник», разверните «Диск С» и найдите папку Windows.
- В папке отыщите другую с названием SysWOW64.
- Откройте папку и найдите в ней файл xinput1_3.dll.
- Скопируйте его или сделайте резервную копию на всякий случай.
- Возьмите скачанный из интернета файл и поместите в папку SysWOW64.
- Выберите «Копировать с заменой».
Неисправный жесткий диск
Проверили драйвера, библиотеки и права? Теперь самое время взглянуть на жесткий диск. Из-за его поломки выскакивает не только ошибка 0xc000007b, но и она в том числе. Для проверки нужно не так много — просто открыть командную строку Windows с правами администратора.
- Для этого нажмите на иконку поиска на панели задач.
- Введите в поле «Командная строка» или «cmd».
- Нажмите правой кнопкой мыши на иконку строки и выберите «Запуск от имени администратора».
- В открывшуюся строку введите команду «chkdsk c: /f /r» и дождитесь результата.
Если нужно будет перезапустить ПК — система сама об этом напишет. В случае возникновения ошибок — перейдите к их исправлению. Только учтите, что нельзя выключать компьютер во время исправления ошибок жесткого диска.
Утилита Eassos Recovery free
Далее поговорим не просто о способах решения, а о специальных программах. Первая из них — Eassos Recovery free. Утилита служит для восстановления файлов и данных, потерянных из-за ошибок системы. Причем она рассматривает все устройства для хранения данных, а не только жесткий диск или карту памяти.
Если корень ошибки 0xc000007b именно в потерянных файлах, то программа легко с этим поможет. К тому же, у нее есть бесплатная версия — как раз для одноразового использования.
Программа Dependency Walker 64bit
Еще одна утилита для исправления ошибки — Dependency Walker 64bit. По своей сути она просто анализирует библиотеку DLL и ищет неисправные или старые файлы. Как и в случае с xinput1_3.dll, вам придется самостоятельно найти их в интернете и закинуть в папку.
- Скачайте программу Dependency Walker 64bit с официального сайта.
- Запустите утилиту и откройте раздел View, а после Full paths.
- Выберите файл запуска игры, с которой возникли проблемы.
- Откройте раздел module и прокрутите в самый низ списка ошибок.
- Обратите внимание на колонку CPU. Все красные файлы в ней — неправильные и вызывают ошибку.
- Найдите их по названиям в интернете и скачайте 64-битную версию.
- Закиньте новые файлы в «C:Windowssystem32» с заменой старых.
Что еще можно сделать
Существует еще несколько способов решения проблемы. Советуем использовать их только в том случае, когда предыдущие варианты не помогли.
Первым делом попробуем восстановить систему, если ошибка появилась совсем недавно. Например, после обновления или переустановки драйверов. Для этого откройте Панель управления и найдите в поиске «Восстановление системы». После чего отметьте галочкой пункт «Показать другие точки восстановления» и запустите процесс.
Следом проверим компьютер на вирусы. Иногда и они становятся причиной ошибок: удаляют важные файлы или ломают их. Для этого воспользуйтесь любым бесплатным и популярным антивирусом: Kaspersky, Dr.Web или Avira. У большинства из них есть пробный период на неделю или месяц.
Ну и самый последний вариант — исправление ошибок в реестре. Если вы не нашли вирусы, с драйверами все в порядке, библиотеки переустановлены, а ошибка продолжает появляться — воспользуйтесь CCleaner. С помощью утилиты можно быстро убрать ошибки из реестра. Причем для этого хватит и бесплатной версии.
Надеемся, вы воспользовались одним из наших советов и нашли решение проблемы. Чаще всего ошибку 0xc000007b исправить довольно легко. Хватает простого обновления библиотек или замены DLL файла. А если проблема не решилась, попробуйте радикальный способ — переустановку Windows.
Другие статьи по теме
- Ошибка 31 4302 в Genshin Impact — что делать
- Ошибка 279 в Roblox — что значит и как исправить
- Как устранить ошибку msvcr100 dll
- Что значит ошибка 267 в Роблокс и как ее исправить
- Что делать, если Steam не запускается
Заглавное фото: wall.alphacoders.com
Краткая аннотация
В подавляющем большинстве случаев, причиной появления ошибки 0xc000007b являются:
- Запуск приложения неподходящей разрядности (32/64-bit)
Скачайте версию приложения, совместимую с Вашей ОС. Если у Вас установлена 32-разрядная ОС, используйте только 32-разрядные дистрибутивы. В случае, если у Вас 64-разрядная версия ОС, попробуйте использовать обе версии приложения: и 32-разрядную, и 64-разрядную. - Повреждение библиотек Visual C++, DirectX или .NET Framework
Необходимо переустановить данные библиотеки: для 32-разрядной ОС только 32-разрядные дистрибутивы, а для 64-разрядной ОС – и 32-разрядные дистрибутивы, и 64-разрядные. - При запуске игр или приложений, использующих отрисовку графики (растровые, векторные, 3D и видео-редакторы) – обновление или переустановка драйвера GPU
Иногда приложения, использующие мощности видеоадаптера, несовместимы с работой с определённой версией драйвера GPU. Рекомендуем обновить драйвер видеоадаптера с «чистой» установкой, то есть удалением предыдущей версии драйвера и установкой новой.
Для дополнительной информации читайте полный текст статьи.
Среди причин, из-за которых данная ошибка может проявляться:
- Несовместимость разрядности программы и ОС
- Несовместимость программы или игры и версии Windows
- Ограничение доступа к компонентам, необходимым для запуска программы
- Повреждение необходимых для работы программы библиотек
- Повреждение файлов программы
- Повреждение файлов операционной системы
- Ограничение запуска антивирусным программным обеспечением
- Повреждение файлов драйверов или конфликт драйверов с программой
- Продвинутый способ: Диагностика ошибки программой Dependency Walker
Несовместимость разрядности
Для начала стоит вкратце и совсем немного углубиться в дебри низкоуровневой работы компьютера. Процессор обрабатывает команды от операционной системы с помощью так называемых «машинных слов» определённой длины. На момент написания статьи, в подавляющем большинстве процессоров реализована поддержка машинных слов длиной 64 бита, однако всё ещё встречаются процессоры с поддержкой только 32-битных машинных слов.
Windows использует два типа разрядности ОС: 32 бита (32-bit или x86) и 64 бита (64-bit, x64, x86_64). Современное программное обеспечение так же создаётся под определённую разрядность операционной системы, и в современном мире разработчики зачастую создают два дистрибутива программы: и под 32 бита, и под 64.
Исходя из написанного выше, можно понять, что программы и игры, написанные под 64-разрядную ОС запустятся только на 64-разрядной ОС и не запустятся на 32-разрядной версии Windows. С 32-разрядными программами дела обстоят немного иначе: такие программы запустятся как на 32-разрядной системе (так как изначально и написаны под 32-разрядную систему), но также она запустится и на 64-разрядной системе, правда с использованием встроенной в 64-разрядные редакции Windows подсистемы WoW64 (Windows on Windows 64-bit), позволяющей запускать такие приложения.
Итогом данного экскурса становится вывод: если у Вас установлена 32-разрядная система, Вы сможете запустить 32-разрядное приложение, но не сможете запустить 64-разрядное приложение. Если у Вас установлена 64-разрядная система, то Вы сможете запустить 64-разрядное приложение и в 99% случаев сможете запустить 32-разрядное приложение.
«Почему 99%?». Дело в том, что WoW64 хоть и практически всегда подходит для запуска 32-битных приложений в 64-битных системах, однако встречаются случаи индивидуальной несовместимости программы и подсистемы WoW64. Как правило, это затрагивает узкоспециализированное программное обеспечение или совсем старые игры. Обусловлено это специфически реализованными алгоритмами внутри программы или игры и отсутствием поддержки таких алгоритмов со стороны подсистемы WoW64.
Для того, чтобы узнать, какой разрядности у Вас установлена система, необходимо зайти в свойства компьютера. В Windows 10 это делается через приложение «Параметры», раздел «Система», подраздел «О программе». В графе «Тип системы» указано, какой разрядности ОС у Вас установлена, и какой разрядности процессор установлен в ПК.
В других версиях ОС (но и в Windows 10 также можно) можно узнать, нажав правой кнопкой мыши по пустому месту в окне «Мой компьютер», «Компьютер» или «Этот компьютер», после чего – «Свойства»:
Также данное окно можно открыть нажатием комбинации клавиш на клавиатуре: Windows+Pause/Break.
Узнать разрядность программы или игры можно, поискав данную информацию на сайте разработчика, на установочном носителе или в сторонник источниках в Интернете.
Так же стоит заметить, что совместимость совсем старых 16-битных и 8-битных приложений вовсе не предусмотрена в ОС Windows.
Что же делать, если произошла несовместимость разрядности? Вариант лишь один: использовать эмулятор или виртуальную машину с необходимыми параметрами. В данном случае на Вашем компьютере запустится ещё один, виртуальный компьютер. С большой долей вероятности это поможет Вам запустить необходимое приложение.
Несовместимость программы с версией ОС
Данный конфликт возникает в том случае, если программа или игра была создана для одной версии операционной системы, а попытка запуска происходит на другой версии ОС Windows. Например, игра или программа была выпущена под Windows XP или Windows 7, а попытка запуска происходит на Windows 8 или 10.
В данном случае можно попытаться запустить программу с помощью режима совместимости. Для этого нажмите правой кнопкой мыши на ярлык или исполняемый файл программы, после чего нажмите на «Свойства»:
Перейдите на вкладку «Совместимость», установите галочку на «Запустить программу в режиме совместимости с:», выберите в выпадающем списке необходимую версию Windows и нажмите «ОК». Попробуйте запустить программу.
В списке будут указаны версии Windows, выпущенные до той, которая установлена у Вас. То есть в Windows 7 список будет состоять из версий Windows 2000, Windows XP; в Windows 8 к ним добавится Windows Vista и 7. Так же и с Windows 10, однако она не поддерживает совместимость с Windows XP и более старыми версиями Windows.
Также стоит понимать, что чем старее версия, в режиме совместимости с которой Вы пытаетесь запустить приложение, тем меньше шанс, что данное приложение запустится.
В случае, если Вы попробовали несколько режимов совместимости, но это не привело к работоспособности необходимой программы или игры, можно попробовать запустить средство устранения проблем с совместимостью с помощью одноимённой кнопки на панели «Совместимость» в свойствах программы.
В случае, если это не помогло, остаётся лишь один вариант: виртуальная машина или эмулятор.
Ограничение доступа к компонентам, необходимым для запуска программы
Данный вариант часто встречается, если программа была установлена в режиме Администратора компьютера, но текущий запуск программы происходит с правами Пользователя. В таком случае программа просто не может получить доступа к данным, необходимым для её работы, так как операционная система не даёт их считывать или изменять.
В этом случае попробуйте нажать по необходимой программе правой кнопкой мыши, после чего нажать «Запуск от имени администратора»:
В случае появления окна Контроля учётных записей (User account control) с запросом: «Разрешить этому приложения вносить изменения на вашем устройстве?» – согласитесь, нажав кнопку «Да» и проверьте работу программы.
В случае, если программа запустилась и работает корректно, чтобы каждый раз не нажимать «Запуск от имени администратора», Вы можете перейти в свойства исполняемого файла (или ярлыка), раздел «Совместимость», и установить галочку на «Запускать эту программу от имени администратора», после чего нажать «ОК».
Повреждение необходимых для работы программы библиотек
Данная проблема является самой распространённой причиной возникновения ошибки 0xc000007b, поэтому рекомендуем уделить этому разделу как можно больше внимания.
Большинство программ, созданных для Windows, используют для своей работы три типа библиотек:
- Microsoft Visual C++
- DirectX
- Microsoft .NET Framework
Иногда, при установке других программ, эти библиотеки устанавливаются автоматически, при этом заменяя старые файлы уже установленных библиотек. Однако встречаются случаи, когда файлы этих библиотек в установочном пакете повреждены или были некорректно установлены. В этом случае лучшим решением будет их переустановка.
Перед переустановкой библиотек необходимо вручную удалить старые версии библиотек Visual C++ в Панели управления, далее «Программы и компоненты».
После удаления перезагрузите компьютер.
Далее необходимо зайти в папку C:Windows
и с помощью поля поиска найти в данной папке и подпапке C:WindowsSysWOW64
следующие файлы и удалить их, если имеются:
- msvcr*0.dll
- msvcp*0.dll
- d3dx9_42.dll
- D3DCompiler_42.dll
В первых двух файлах вместо звёздочки может быть числа от 1 и выше (до обозначения актуальной для данной ОС версии Visual C++), то есть «msvcr20.dll», «msvcr80.dll», «msvcr110.dll» и так далее.
Если файлы не удаляются из-за ошибки «Этот файл открыт в другой программе» – необходимо загрузить операционную систему в безопасном режиме, после чего удалить эти файлы.
Далее переходим к установке библиотек.
-
Microsoft Visual C++
Visual C++ можно скачать бесплатно с официального сайта Microsoft по этой ссылке:
https://support.microsoft.com/ru-ru/topic/последние-поддерживаемые-версии-visual-c-для-скачивания-2647da03-1eea-4433-9aff-95f26a218cc0
Скачайте установочные файлы по ссылкам на странице и запустите их, после чего следуйте инструкциям установщика.
Также обратите внимание: для 32-разрядных систем необходимо устанавливать версии, имеющие в названии x86 или x32, а для 64-разрядных – обе версии: и x86/x32, и x64, так как 64-разрядные библиотеки используются для запуска 64-разрядных приложений, а 32-разрядные – для запуска 32-разрядных приложений с помощью подсистемы SysWOW64.
Установить все пакеты (включая старые, которые Microsoft перестал распространять в свободном доступе) разом можно, скачав пакет «All-in-one» от разработчика W1zzard из TechPowerUp:
https://www.techpowerup.com/download/visual-c-redistributable-runtime-package-all-in-one/
Скачайте архив, обязательно распакуйте его и запустите от имени администратора файл
install_all.bat
, после чего дождитесь появления в окне Командной строки сообщения «Installation completed successfully».После установки перезагрузите компьютер.
-
DirectX можно скачать с страницы на официальном сайте Microsoft:
https://www.microsoft.com/ru-ru/download/details.aspx?id=35
Данный вариант актуален для систем Windows 7 и более старых версий, но этот пакет можно установить и на Windows 10, не дожидаясь его автоматической установки с обновлениями.Помимо этого, Windows 8 и старше автоматически устанавливают и обновляют DirectX при обновлении операционной системы. Чтобы проверить актуальность обновлений системы, в том числе DirectX, перейдите в приложение «Параметры», далее «Обновление и безопасность», далее «Центр обновления Windows», после чего нажмите на кнопку «Проверить наличие обновлений». В случае, если обновления будут найдены, начнётся скачивание и фоновая установка обновлений.
Так же обновления могут быть в том же окне, в разделе «Доступно необязательное исправление». В случае, если такие обновления есть, нажмите «Загрузить и установить».
-
Microsoft .NET Framework
Скачать Microsoft .NET Framework можно из раздела DotNet официального сайта Microsoft:
https://dotnet.microsoft.com/download/dotnet-framework
На данной странице выберите версию, которую хотите скачать, и перейдите на страницу выбора типа скачиваемого файла. Выбирайте версии из столбца «Run apps – Runtime». В строке «Web installer» указывается ссылка на файл, который автоматически скачает версию подходящей локализации. В строке «Offline installer» указывается ссылка на установочные пакеты, который впоследствии можно будет использовать для установки данной версии .NET Framework без доступа к Интернету. В строке «Language packs» указываются ссылки на установочные пакеты с конкретной локализацией установщика.
Обратите внимание: скачивать нужно все доступные версии, так как неизвестно, на какой из версий .NET Framework создана необходимая Вам программа.
Узнать о совместимости версий .NET Framework и версий операционных систем можно по ссылке:
https://docs.microsoft.com/ru-ru/dotnet/framework/migration-guide/versions-and-dependencies
Также, если Вы устанавливаете старое приложение или игру, стоит уделить внимание версиям 2.0-3.5. В Windows 10 эти версии .NET Framework уже встроены, но отключены. Чтобы включить их, перейдите в Панель управления, далее «Программы и компоненты», далее «Включение или отключение компонентов Windows», найдите в списке «.NET Framework 3.5 (включает .NET 2.0 и 3.0)», установите галочку на этом пункте и нажмите «ОК», после чего дождитесь завершения установки компонента.
Повреждение файлов программы или игры
Виновником ошибки 0xc000007b может быть и повреждённые или недостающие файлы программы или игры. Вариантов, как могли повредиться файлы, много:
- Ошибка при создании дистрибутива (относится, по большей части, к файлам, распространяемым через Torrent)
- Ошибки в процессе скачивания файла установки или ошибки чтения файлов с устройства хранения данных (например, в случае повреждения CD/DVD-диска)
- Отмена установки программы, из-за чего часть файлов не распаковалась в необходимые каталоги
- Ошибка в процессе установки
- Недостаток прав для правильной установки
- Некорректное обновление или ошибка установки обновления приложения
- Подмена файлов нежелательным программным обеспечением или ручная подмена файлов, например, при активации нелицензионной копии программы
- Ошибка сохранения и последующего чтения данных в процессе работы программы из-за ошибки в алгоритме работы программы
- Аппаратная ошибка
В любом случае, первым делом необходимо переустановить нерабочую программу/игру и попробовать запустить её снова. Кроме того, хорошим вариантом будет получение файла установки из другого источника (например, попробовать другой диск или скачать файл установки с другого сайта). Если Вы скачиваете программу с сайта разработчика, попробуйте скачать чуть более старую версию из архива версий – возможно, эта ошибка возникает только в новой версии.
В случае, если переустановка не помогла, рекомендуем проверить аппаратное обеспечение на корректность работы. В частности, рекомендуем проверить работу жёсткого диска/SSD (например, тестами через Victoria или MHDD) и работу оперативной памяти (встроенной утилитой «Средство устранения неполадок оперативной памяти»/«Средство проверки памяти Windows» или MemTest).
Повреждение файлов операционной системы
Со временем, работа операционной системы становится нестабильной из-за накопления ошибок в её работе. Это так же может являться причиной появления ошибки 0xc000007b. Для того, чтобы проверить систему на наличие ошибок и устранить их, необходимо открыть Командную строку от имени администратора. Самый простой способ сделать это в Windows 10:
- Откройте Диспетчер задач
- Нажмите «Файл»
- Нажмите «Запустить новую задачу»
- В открывшемся окне «Создание задачи», в поле «Открыть» введите «cmd»
- Поставьте галочку «Создать задачу с правами администратора»
- Нажмите «ОК»
После запуска командной строки введите следующие команды:
sfc /scannow
Данная команда проверяет целостность системных файлов и заменяет повреждённые файлыdism /online /cleanup-image /restorehealth
Данная команда проверяет целостность компонентов системыchkdsk %systemdrive% /f /r
Данная команда проверит системный раздел на наличие ошибок. После ввода команды подтвердите проверку диска при следующем запуске системы вводом буквы «Y» и нажатием Enter, после чего перезагрузите компьютер.
Либо введите следующую команду и дождитесь перезагрузки ПК:
sfc /scannow & dism /online /cleanup-image /restorehealth & echo y | chkdsk %systemdrive% /f /r & shutdown /r /f /t 5
Ограничение запуска антивирусным программным обеспечением
Так как выбор антивирусного программного обеспечения весьма обширен, а базы сигнатур вирусов у каждого антивируса немного отличаются, может случиться так, что антивирус, установленный на Вашем компьютере, ошибочно блокирует запуск или чтение файла, необходимого для запуска программы, принимая его за потенциально опасный.
Обычно в данном случае антивирус сигнализирует о том, что нашёл угрозу, и в интерфейсе антивируса можно увидеть, какой именно файл ему не понравился. Рекомендуем проверить данный файл с помощью бесплатного сервиса https://www.virustotal.com, и в случае, если данный файл помечен как вирус только при проверке одним антивирусом (что скорее всего означает ошибочное срабатывание), можно добавить файл в исключения антивируса и попытаться запустить программу вновь.
Однако может случиться и такое, что антивирус блокирует файл скрыто, без показа каких-либо уведомлений. В данном случае можно временно отключить все функции антивируса и проверить, не он ли является виной появления ошибки.
Также обратите внимание: если у Вас установлена Windows 10 и Вы не устанавливали стороннее антивирусное ПО, то по умолчанию в Вашей системе включен «Защитник Windows» – встроенный антивирус от Microsoft. Чтобы перейти в его настройки, запустите приложение «Параметры», далее «Обновление и безопасность», далее «Безопасность Windows» и нажмите на кнопку «Открыть службу “Безопасность Windows”».
Повреждение файлов драйверов
Следующая часто встречающаяся проблема – проблема с файлами драйверов или их несовместимость с запускаемой программой. В подавляющем большинстве случаев ошибка 0xc000007b при запуске игр возникает из-за ошибок драйвера видеокарты. Основных причин проблем с драйвером видеокарты две:
- Повреждение файлов драйверов в процессе эксплуатации компьютера
При установке драйвера на видеоадаптер, установщик вносит определённые изменения в работу системы. В будущем другие программы или обновления ОС могут видоизменить внесённые установщиком изменения, из-за чего некоторые программы могут некорректно работать с данными изменениями. - Несовместимость драйвера и запускаемой программы
Бывает и такое, что определённая программа корректно работает только с новыми версиями драйвера, и может выдавать ошибку 0xc000007b при попытке запуска программы с устаревшим драйвером. А бывает и наоборот: например, старая игра может запуститься на версии драйвера до какой-то определённой устаревшей версии, но не может запуститься на новой версии драйвера.
Обусловлено это тем, что из версии в версию алгоритмы работы драйвера меняются и оптимизируются. Некоторые функции удаляют как устаревшие, а новые функции добавляют.
В данном случае мы рекомендуем:
- Обновить драйвер видеоадаптера
- Драйверы видеокарт Nvidia обновляются через программу Geforce Experience, которая устанавливается при первой установке драйвера видеокарты.
Также драйвер можно скачать и установить в ручном режиме с официального сайта Nvidia: https://www.nvidia.ru/Download/index.aspx?lang=ru - Драйверы видеокарт AMD/ATI обновляются через программу AMD Radeon Settings, которая также устанавливается при первой установке драйвера видеокарты.
И так же драйвер можно взять на официальном сайте AMD: https://www.amd.com/ru/support - Драйвер на встроенную в процессор (APU) графику Intel можно скачать с официального сайта Intel: https://www.intel.ru/content/www/ru/ru/support/articles/000005629/graphics.html
- Драйвер на встроенную в процессор (APU) графику AMD можно скачать с официального сайта AMD: https://www.amd.com/ru/support
Не забудьте перезагрузить ПК после обновления видеодрайвера.
- Драйверы видеокарт Nvidia обновляются через программу Geforce Experience, которая устанавливается при первой установке драйвера видеокарты.
- В случае, если обновление завершилось неудачно или обновление не помогло, попробуйте выполнить чистую установку драйвера, предварительно удалив старую версию драйвера.
Если ошибка 0xc000007b возникает при попытке запуска старой игры, обновление может не помочь, так как может быть нужен именно старый драйвер видеокарты. Для этого необходимо найти информацию, какая последняя версия драйвера видеокарты поддерживается конкретной игрой, после чего в архиве на сайте производителя видеоадаптера найти подходящую версию и установить её, предварительно удалив более новую версию драйвера.
В случае, если обновление (или откат) драйвера видеоадаптера не помог, рекомендуем обновить все драйверы. Скачать их можно с сайта производителя оборудования или установить пакетными установщиками драйверов (Driver Booster, DriverHub, DriverPack, Driver Genius и подобные).
Диагностика ошибки программой Dependency Walker
Как показывает практика, в большинстве случаев данная ошибка возникает тогда, когда определённый файл из библиотеки, необходимой для запуска, повреждён или отсутствует. Для определения, какой именно файл мешает запуску программы с ошибкой 0xc000007b, нам поможет программа Dependency Walker. Скачать её можно здесь: https://www.dependencywalker.com. Необходимо скачать файл для той разрядности системы, которая установлена у Вас.
- Распакуйте скачанный архив в любое место и запустите файл
depends.exe
. - В открывшемся окне программы нажмите «File», далее «Open»
- Выберите исполняемый файл или ярлык на исполняемый файл программы, при запуске которой возникает ошибка 0xc000007b
- Подождите инициализации исполняемого файла
-
При появлении ошибки проигнорируйте её и нажмите «ОК»
- Нам необходима следующая часть интерфейса программы, в которой отображаются загружаемые модули:
Ошибки файлов, имена которых начинаются на API- и EXT- можно игнорировать.Обратите внимание на столбец «CPU»: в нашем случае, у файла MSVCR100.dll значение «x86» окрашено в красный. Это означает, что в каталоге находится файл неподходящей разрядности, он загружается, но не может быть использован для работы.
В Вашем случае проблемным файлом может оказаться любой иной файл: смотрите в список загружаемых модулей и ищите проблемные значения.
- Нажмите на клавиатуре F9 для показа полных путей к файлам, чтобы знать, где именно лежит повреждённый файл.
- Далее необходимо найти в Интернете подходящий файл и заменить им повреждённый, после чего перезагрузить компьютер и попытаться запустить программу вновь.
Стоит сразу внести несколько пояснений:
- Файлы, имена которых начинаются на MSVC
Данные файлы принадлежат к библиотекам пакетов Microsoft Visual C++. Узнать, к какой версии Visual C++ относится конкретный файл можно, перейдя в свойства данного файла (ПКМ — Properties), в раздел «Подробно»
-
Файлы, имена которых начинаются на DX
Чаще всего данные файлы относятся к DirectX. Загрузка обновления DirectX может решить проблему. - В случае, если у Вас установлена 64-разрядная система, то проблемный файл в каталоге
C:Windows
будет означать, что Вам необходимо устанавливать 64-разрядный дистрибутив программы. Если же указан каталогC:WindowsSysWOW64
– устанавливать следует 32-разрядный дистрибутив. А для верности лучше переустановить оба.