Почему бы не устанавливать Msvcr71.dll в system32?

При поиске авторитетного источника для пропавших без вести Msvcr71.dll это необходимо нескольким старым приложениям, я споткнулся через Перераспределение статьи MSDN общего компонента во время выполнения C в Visual C++. Совет, данный разработчикам, состоит в том, чтобы бросить DLL в каталог приложения вместо system32 так как DLLs в этом каталоге рассматривают перед системными путями.

Что может/, идут не так, как надо, если я (как администратор, не разработчик) решаю выбрать путь ленивое и установку Msvcr71.dllMsvcp71.dll в то время как я в нем) в system32 каталог (Windows XP на 32 бита или систем Windows 7) вместо того, чтобы поместить копию в каталог каждого приложения? Там другое хорошее решение состоит в том, чтобы предоставить приложениям необходимый DLLs, который не включает копирование материала к каталогам приложения?

добавленный после первых ответов: Я понимаю, что несовместимые изменения API, возможно, были внесены в упомянутый DLLs, но в значительной степени каждое упоминание о несовместимостях, я нашел Google использования, имело отношение к играм или видеокодекам. Прямо сейчас я ожидаю, что риск поломки является довольно маленьким. Я пропускаю что-то?

3
задан 30.12.2010, 18:37

3 ответа

Основное (только?) проблемой является совместимость между различными версиями Msvcr71.dll. Скажем, 7.10.0 является немного несовместимым с 7.10.1, и приложение App1 зависит от старого поведения, и приложение App2 зависит от нового поведения. Дополнительно оба приложения не поставляют это время выполнения C++ само. В этом случае одно из этих двух приложений перестанет работать.

Как часто те случаи? Я действительно не знаю, но я сказал бы, что они редко.

В зависимости от различий между версиями msvcr71.dll приложению не удалось бы запуститься, или конкретная функция не будет работать.

Другое хорошее решение: владейте ПУТЕМ для каждого приложения. Например, Вы могли записать пакет как это:

PATH=c:\PathToMSVCR71.DLL_Version_7.10.0
myapp1.exe

Таким образом, можно снова использовать тот же DLL в нескольких приложениях и обновить его легче.

РЕДАКТИРОВАНИЕ почти невозможно оценить опасность коллизии версии тем более, что Вы не упомянули приложения, которые Вы используете. Именно поэтому я искал все различные версии на своем ПК (Windows 7/x64). Я нашел следующие файлы: alt text

Все файлы являются просто копиями этих двух: 7.10.3052.4 и 7.10.6030.0. 7.10.3052.4 также, что предлагает dll-files.com.

Я также сравнил вывод dumpbin /imports /exports msvcr71.dll для этих версий и ни экспорт, ни импорт не изменились (как ожидалось).

5
ответ дан 07.12.2019, 23:09

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

Например, скажем, App1 требует, чтобы версия 2.1 Msvcr71.dll для ее функции SpinMyRainbowPinWheel работала. Разработчики App1 установили Msvcr71.dll в каталоге программных файлов App1.

Если Вы приедете и поместите версию 2.0 Msvcr71.dll в system32, то App1 начнет использовать системный файл вместо того, что было установлено в его каталоге программных файлов. Функция SpinMyRainbowPinWheel не будет больше работать, и Вы будете gett вызов от генерального директора, потому что завихрение не вращается на его мониторе, когда он дует в свой микрофон. Бизнес резко останавливается!

4
ответ дан 07.12.2019, 23:09

Не делайте, и я, никогда повторяюсь не заменяют или добавляют DLLs в масштабе всей системы. Я не понимаю, почему Вы не можете просто связать его? Именно поэтому Вы создаете пакеты установщика. Я знаю, что Microsoft имеет инструмент создания установки с VS6, и если у Вас нет его затем, Вы могли бы использовать что-то как innosetup. И причина, почему они говорят Вам помещать DLL в ту же папку, состоит в том, потому что это - то, где, afaik, приложение сначала ищет DLL.

Кроме этого, приходят на ум две вещи:
1) DLL может уже быть в рассматриваемой системе
2) Я уверен, что Microsoft обеспечивает установочный пакет для установки необходимого DLLs, если они не присутствуют. То, которое является тем, что я был бы, рекомендовало использовать вместо того, чтобы просто случайно заменить/добавить файлы DLL.

Идеальным примером того, почему Вы не должны касаться DLLs в масштабе всей системы, является мой опыт с GTK. Различные приложения используют различные версии GTK. Я помню, что одно приложение решило быть "ленивым" и установить DLL в масштабе всей системы для GTK. Другие приложения, которые использовали GTK, больше не работали.

0
ответ дан 07.12.2019, 23:09

Теги

Похожие вопросы