2010-04-14 6 views
4

Нужно ли нам по-прежнему беспокоиться о vcredist.exe при распространении собственных приложений Windows? Кто-нибудь из них поставляется в комплекте с Win-7?CRT, нам все еще нужно перераспределять его?

Если нет, есть ли какие-либо технические причины, по которым они не отправляются людям через, например, обновление windows - вместо того, чтобы позволить нам обременять клиентов еще одним-то-то-м-м-работой? (Хорошо, это может показаться спорным, но мне действительно интересно, почему эти библиотеки не установлены или обновлены по умолчанию на машинах Windows).

+1

Не все работает Центр обновления Windows. – RichieHindle

ответ

2

Я думаю, это зависит от того, как и с чем вы связаны. Если вы напрямую связаны с kernel32.dll и т. Д., То это, конечно, не имеет значения (т. Е. Встроена библиотека времени выполнения), но Microsoft не рекомендует этот метод распространения.

Если вы связаны через msvcr80/90/whatever 2010 is.dll, вам может потребоваться распространить эту библиотеку времени выполнения, как на XP, она не входит в стандартную комплектацию. msvcr80 приходит на Vista, но msvcr90 не я не думаю, хотя он может быть добавлен обновлением Windows. Тем не менее, вы не можете полагаться на то, что в этом случае отказоустойчивость должна иметь копию на всякий случай.

Насколько я знаю, msvcrt.dll (эта ссылка) распространяется со всем> xp. Ссылка vc6 на это? Тогда у меня не было VC++.

Взгляните на исполняемый файл с помощью depends.exe из Windows SDK и определите, что он поставляется с выше и выше компонентов Windows API.

+0

Время выполнения C - это msvcrt.dll. Это не имеет никакого отношения к kernel32.dll. +1 для depend.exe. –

+0

Это, но msvcrt.dll ссылки на kernel32.dll. Если вы ссылаетесь на статическую библиотечную версию msvcrt, вы напрямую связаны с kernel32.dll. В любом случае, вы делаете ссылку на kernel32.dll, нравится вам это или нет. Моя точка зрения заключалась в том, на чем вы зависите (то есть, что ваша программа просит загрузить) зависит от того, как вы связаны. Это будет либо через msvcrt, msvcrXX.dll, либо прямо в API, если он статически связан. – 2010-04-14 21:01:45

+0

А-а - это отнюдь не понятно из вашего ответа - вы не связываетесь через библиотеку времени выполнения C. Вы все еще связаны с kernel32.dll, даже если вы используете DLL-версию среды выполнения C. –

1

Да, вы это делаете. В противном случае ваша программа будет потрясающе срабатывать, когда вы попытаетесь запустить ее. Многие пользователи не запускают Win7, и даже тогда нет способа гарантировать, что они будут установлены во время выполнения без включения его в ваш установщик.

В качестве альтернативы вы можете ссылаться на статическую сборку среды выполнения, избегая необходимости беспокоиться о распространении среды выполнения C.

+0

Microsoft препятствует статической привязке к их времени выполнения, потому что если они обнаруживают уязвимость во время выполнения, они могут обновлять DLL, и ваше приложение также защищено - в противном случае вам нужно перестроить. Я не знаю ни одного вулкана в среде исполнения msvcrt, но есть определенная причина для того, чтобы они выносили этот совет, так что вот оно. – 2010-04-14 21:30:45

+0

@Ninefingers: Да, но некоторые из нас не могут оправдать принуждение пользователей устанавливать пакеты перенастройки ~ 20 МБ. Если вам нужно одно развертывание EXE XCOPY, у вас мало выбора. –

0

При компиляции с GCC я всегда связываюсь с MSVCRT.DLL, который всегда присутствует на XP и новее.

+0

Вы должны установить связь с временем выполнения Microsoft C, чтобы использовать GCC? Странный. –

+0

@Billy хорошо, что нет, но это единственный stdio.h и т. Д., Настроенные для распространения в потоке. – Joshua

+0

Я считаю, что это поведение по умолчанию и имеет смысл - вы связаны с glibc на Linux. Почему бы просто не использовать «libc» от Microsoft в Windows? Вот и все, это гарантированно будет в значительной степени, в качестве бонуса. – 2010-04-14 20:59:13

0

Это в ответ на комментарий Ларри Остермана от 14 апр в 23:29:

Вы говорите:

msvcrt.dll не C во время выполнения. Это внутренний компонент Windows, который никогда не должен быть , используемый сторонними приложениями. Вы заметите, что вы не можете найти ссылки на MSDN, чтобы использовать эту DLL. . Когда-то давно сторонние приложения использовали это, но это не был случай сроком на 10 лет. - Ларри Остерман 14 апр в 23:29

Это, казалось, идти против всего помещения системы MinGW, которая основана на доступ msvcrt.dll и комментарий позволило мне лучше понять, как MinGW работает. Оказывается, mingw по-прежнему использует msvcrt.dll, который был отправлен в 1998 году! Смотрите эту ссылку:

http://www.mingw.org/wiki/C99

Спасибо,

Тодд

+1

«msvcrt.dll теперь является« известной DLL », что означает, что это системный компонент, который принадлежит и построен Windows. Он предназначен для будущего использования только компонентами системного уровня». (от http://msdn.microsoft.com/en-us/library/abx4dbyh.aspx) – Lucas

+0

Спасибо, Лукас, я не знал о концепции «известной библиотеки DLL». Интересно, будет ли mingw работать с msvcr100.dll вместо msvcrt.dll? – Sabuncu

Смежные вопросы