Админу на заметку - 32. Visual C++ Redistributable или устраняем ошибки "отсутствует DLL"

  • Автор:

Visual-C++-Redistributable-000.pngРаспространяемые пакеты Microsoft Visual C++ Redistributable требуются довольного многим приложениям, но не всегда входят в пакет установки, вызывая ошибки типа "отсутствует MFC110.dll" или "MSVCP120.dll". К сожалению, не все понимают причину возникновения подобных ошибок, а следовательно правильные пути их устранения. В данной статье мы рассмотрим, что такое Распространяемые пакеты Microsoft Visual C++ Redistributable, для чего они нужны и как устранить связанные с ними ошибки.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Начнем с того, что это за пакеты и для чего нужны. Для этого нам придется немного окунуться в разработку ПО. При написании кода на C++ в среде Microsoft Windows разработчик может использовать уже готовые библиотеки, которые содержат наиболее часто используемые стандартные функции, либо отвечают за взаимодействие с системой. Эти библиотеки поставляются вместе со средой разработки и не включаются в готовое приложение. Это сделано для того, чтобы их можно было обновлять отдельно от приложения, а также избежать многократного дублирования одних и тех же файлов.

При этом они не входят в состав ОС по умолчанию, а входят в состав Распространяемых пакетов Microsoft Visual C++ Redistributable, которые обычно поставляются вместе с дистрибутивом ПО, но очень часто вы можете получить дистрибутив и без них. В этом случае при попытке запуска такого ПО вы получите ошибку об отсутствии одной или нескольких библиотек DLL.

Visual-C++-Redistributable-001.pngК сожалению, сообщение об ошибке неинформативно и не способно подтолкнуть пользователя в правильном направлении. Самым худшим решением в этом случае будет поиск и скачивание необходимых библиотек с сомнительных ресурсов в сети интернет, поэтому давайте разбираться, как правильно интерпретировать подобные ошибки и устранять их.

Следует отметить, что не все подобные сообщения связаны с Microsoft Visual C++ Redistributable, поэтому сразу научимся отличать их. Полный список библиотек входящих в состав пакета приведен в документации:

Определение библиотек DLL для распространения

Отличительной их чертой является двух или трехзначный номер версии от 80 до 140 по шаблону:

mfc[version].dll

Если в сообщении об ошибке фигурирует подобная библиотека, то вы с высокой вероятностью имеете дело с Microsoft Visual C++ Redistributable. Для определения необходимой версии отбрасываем последнюю цифру и получаем номер версии. Ниже представлены номера версий и публичные наименования пакетов:

  • Visual Studio 2005 (VC++ 8.0)
  • Visual Studio 2008 (VC++ 9.0)
  • Visual Studio 2010 (VC++ 10.0)
  • Visual Studio 2012 (VC++ 11.0)
  • Visual Studio 2013 (VC++ 12.0)

Таким образом MFC110.dll относится к пакету 2012 года, а MSVCP120.dll к пакету года 2013 и вам нужно скачать и установить Microsoft Visual C++ Redistributable 2012 и 2013 соответственно.

Версию пакета с внутренним номером 13 в Microsoft пропустили, и следующая версия 2015 года получила номер 14. Затем последовал еще ряд пакетов с номерами:

  • Visual Studio 2015 (VC++ 14.0)
  • Visual Studio 2017 (VC++ 15.0)
  • Visual Studio 2019 (VC++ 16.0)
  • Visual Studio 2022 (VC++ 17.0)

Но версии библиотек так и остались на уровне 14, точнее были введены подверсии 140, 141, 142 и 143, а сами библиотеки стали нумероваться в стиле 14.х, где x - номер подверсии. Например, Visual Studio 2019 версии 16.7 (версии файлов, начиная с 14.27), т.е. 142 подверсия. Еще более запутывает то, что имена библиотек остались прежними и MSVCP140.dll может указывать на любую из версии от 2015, до 2022.

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

Visual-C++-Redistributable-002.pngЕще раз обратим ваше внимание, что несмотря на заголовок 2015-2022 вы устанавливаете последнюю версию библиотек, что видно из номера 14.36 (143 подверсия, 2022 пакет). Также вы можете столкнуться с отдельными пакетами для более старых версий, ниже показан пакет для 2017 выпуска.

Visual-C++-Redistributable-003.pngМожно ли устанавливать такие пакеты? Можно, но следует понимать, что с такими версиями библиотек смогут работать только приложения требующие 2015 или 2017 выпуски распространяемого пакета, и не будут работать более новые.

Если ли смысл ставить последовательно все версии от 2015 до 2022? Нет, так как более новые библиотеки содержат все возможности более старых и установки последней версии будет достаточно.

Пакеты версий до 2015 обратной совместимости не имеют и вам нужно будет установить именно тот пакет, который требует установленное приложение.

Еще одна тонкость есть в 64-разрядных системах: разрядность распространяемого пакета Microsoft Visual C++ Redistributable должна соответствовать разрядности приложения, так если у вас требуются библиотеки для 32-разрядного приложения, то вам потребуется установить x86 версию, хотя система у вас x64.

Скачать все пакеты Microsoft Visual C++ Redistributable, начиная с 2005 можно на официальной странице:

Последние поддерживаемые загрузки Microsoft Visual C++ распространяемого компонента

Все распространяемые пакеты поддерживают параметры командной строки, к которым относятся:

  • install - установка
  • repair - восстановление
  • uninstall - удаление

Дополнительные параметры позволяют влиять на процесс установки:

  • passive - отображает ход установки, но не требует взаимодействия с пользователем
  • quiet - не отображает пользовательский интерфейс и не требует взаимодействия с пользователем
  • norestart - подавляет попытки перезагрузки после установки

Например, установить пакет, отображая ход установки без взаимодействия с пользователем и перезагрузки можно командой:

vc_redist.x64.exe /install /passive /norestart

Надеемся, что данная статья оказалась вам полезной и вы сможете осмысленно работать с Распространяемыми пакетами Microsoft Visual C++ Redistributable и грамотно устранять связанные с ними проблемы.

Онлайн-курс по устройству компьютерных сетей
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Помогла статья? Поддержи автора и новые статьи будут выходить чаще:

Поддержи проект!

Или подпишись на наш Телеграм-канал: Подпишись на наш Telegram-канал



Loading Comments