Подтвердить что ты не робот

Должен ли я перераспределять msvcrt.dll с моим приложением?

Должен ли я перераспределять файл msvcrt.dll с моим приложением и использовать частную dll, если какая-либо из прикладных библиотек динамически зависит от msvcrt.dll? То есть возможны ли какие-либо проблемы несовместимости с системой msvcrt.dll(dll hell)? Приложение предназначено для систем Windows Server.

4b9b3361

Ответ 1

msvcrt - динамическая библиотека для среды выполнения Microsoft Visual С++.

Существует два варианта использования среды выполнения C в Windows:

  • ссылка на статические библиотеки времени выполнения.
    Используйте опцию /MT или /MTd для cl.exe. В этом случае у вас не будет зависимости от DLL msvcrt, и поэтому вам не придется перераспределять ее. В Visual Studio щелкните правой кнопкой мыши Project или Solution, Properties > C/С++ → Code Generation- > Runtime library, используя Multigreaded и Multithreaded debug соответственно. Это самый простой способ. Недостатком является то, что итоговый исполняемый файл больше.

  • ссылка на динамическую библиотеку времени выполнения.
    Вы будете использовать опцию /MD или /MDd для cl.exe.
    В Visual Studio щелкните правой кнопкой мыши Project или Solution, Properties > C/С++ → Code Generation- > Runtime library, используя Multigreaded Dynamic Link и многопоточную динамическую связь. Это приводит к меньшему EXE, но недостатком является то, что вы должны установить необходимый MSVCRT при установке приложения.


Каждая версия компилятора VС++ поставляется с версией C runtime (CRT). Visual Studio 2005 поставляется с v8 компилятора и v8 CRT. Фактической DLL для v8 была msvcrt80.dll. Для VS2008 это был v9, а динамический CRT был msvcrt90.dll. Но CRT обновляется и исправляется чаще, чем компилятор C/С++. Разработчик может загрузить обновленный CRT и построить против него.

При компиляции с динамической библиотекой CRT вы ДОЛЖНЫ загружать распространяемый пакет для необходимой версии среды выполнения с microsoft.com и выполнять (потенциально бесшумную) установку во время установки приложения,


До VS2005 разработчики создали приложения, зависящие от MSVCRT, который был в операционной системе Windows. Это даст преимущество DLL (малый размер изображения), в то время как не будет требовать доставки DLL CRT в установку приложения. До Windoes 2000 разработчики даже установили новую MSVCRT.dll в папку установки Windows. Но совместное использование CRT во многих приложениях и ОС тоже оказалось очень плохой идеей. С WinXP SP2 CRT, входящий в состав Windows, значительно изменился, и все приложения, зависящие от этой версии CRT, рискуют сломаться.

В этот момент Microsoft сообщает разработчикам, что MSVCRT.dll, входящий в состав Windows, является частью ОС и может быть в любое время обслуживаться или исправляться. Не поддерживается создание приложения против него. Поэтому приложения должны использовать один из вышеперечисленных методов.

Литература:

Ответ 2

Вы должны отправить msvcrt с вашим приложением. Это не гарантированная часть операционной системы. Если какая-то конкретная версия Windows имеет его, то только потому, что в ней используется что-то в Windows.

Приложения сломались, когда в новых версиях Windows не оказалось файлов с именами, к которым пришло Windows. Приложения нарушили, когда пользователь решил не устанавливать WinFax, а это значит, что msvcrt не был установлен с ним.

Из Раймонд Чен:

В зависимости от версии Windows вы работаете, может быть множество поддержки DLL для вещей, которые не являются формальных компонентов продукта, но которые просто для езды.

...

Эта проблема сохраняется и сегодня. Люди идут скручивание двоичных файлов, которые приходят с Windows ищет что-то они могут remora. А потом они удивляются, когда эти двоичные файлы полностью или полностью исчезают.

От KB326922 - Перераспределение общего компонента времени выполнения C в Visual С++:

... CRT DLL больше не рассматривается поэтому системный файл распределяет CRT DLL с любым приложением, которое опирается на это. Потому что больше нет системный компонент, установите его в свой приложения Каталог программных файлов с другим кодом приложения. Это предотвращает ваше приложение от используя другие версии ЭЛТ библиотеки, которая может быть установлена ​​на системных путей.

Вы должны отправлять msvcrt с вашим приложением, если вы ссылаетесь на MSVCRT.

Подробнее

было принято решение просто отказаться и объявить его операционной системой DLL, которая будет использоваться только компонентами операционной системы.

Хотя MSVCRT.DLL долгое время являлась DLL операционной системы, и была зарегистрирована как неактивная для приложений, там все еще много людей, которые рассматривают его как поставку времени выполнения C канал, и эти программы создают много горя для команды разработчиков.

Вы должны перераспределять время выполнения Microsoft Visual C с вашим приложением, поскольку Windows не поставляется с какой-либо Microsoft Visual C Runtime. Может быть, DLL называется MSVCRT.DLL (что не гарантируется), это не MSVCRT.

Ответ 3

Ответ Криса не должен быть отклонен, потому что оба правильные.

Дело в том, что существуют два разных набора MSVCRT. Один из них - msvcrt80.dll, msvcrt90.dll и т.д., Который поставляется с Visual Studio. Это то, что люди обычно используют. И они должны быть перераспределены, как говорится в других ответах.

Другим является msvcrt.dll(без номеров в имени файла) в папке System32, которая должна использоваться ТОЛЬКО самой ОС с некоторого времени назад. И приложения никогда не должны заменять/переустанавливать. Однако некоторые приложения ссылаются на него по некоторым причинам, например, чтобы удалить дополнительные зависимости для установки. Но имейте в виду, что он не гарантированно будет доступен в будущей версии Windows.

Ответ 4

msvcrt.dll стал дефактовой частью дистрибутива ОС. В Windows 98 и 95 и, возможно, в NT4 можно было установить ОС без него, если вы решили снять приложения из WordPad из установки.

Учитывая его ubiquty, и тот факт, что, поскольку эти ОС очень немногие разработчики приложений потрудились отправить его, по крайней мере, с Windows 2000 он был официальной частью ОС.

У Microsoft есть инструмент который вы можете использовать, чтобы дважды проверить, какие файлы DLL поставляются с.

Выполните поиск, например , и вы увидите, что msvcrt.dll vsrsion 7.0.3790.0 был частью выпуска Windows Server 2003.