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

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

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

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

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

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

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

1mfc[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, которая содержит последние версии файлов.

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

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

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

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

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

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

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

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

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

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

1vc_redist.x64.exe /install /passive /norestart

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

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

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

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

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