Вызывает ли последнее обновление для системы безопасности Visual Studio 2005 проблемы с библиотекой времени выполнения C при "горячем" исправлении сайтов клиентов

StackOverflow https://stackoverflow.com/questions/1238741

Вопрос

Как вам, возможно, известно, обновление для Visual Studio 2005 было автоматически обновлено на большинстве компьютеров на прошлой неделе.Это обновление включало новую версию библиотеки Visual c runtime library.В результате для любых двоичных файлов, созданных после обновления, также требуется новый распространяемый файл, установленный в клиентских системах.

Видишь http://support.microsoft.com/kb/971090/

А вот установщик для нового распространяемого:

http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=766a6af7-ec73-40ff-b072-9112bab119c2

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

Однако я действительно беспокоюсь о своей способности исправлять существующие сайты клиентов, если они обнаружат ошибку.В этом случае обычно я бы просто отправил dll или exe, которые были исправлены.

Однако, если я сделаю это сейчас, мне придется отправить этим клиентам новый распространяемый файл, и теперь я буду использовать две разные версии библиотеки времени выполнения c в одном исполняемом файле.

  • Является ли это проблемой?
  • Может ли это привести к сбою моего приложения?
  • Что произойдет, если я выделю память в одной библиотеке dll, а затем освобожу ее в другой?Обычно это работает, если используется одна и та же библиотека времени выполнения выпуска.Я просмотрел наш код около 3 лет назад, исправляя это, но я не могу быть уверен, что нашел и исправил все вхождения.
  • Выделение / освобождение в разных библиотеках dll все еще является проблемой?Теперь, в эпоху умных указателей и т.д., очень важно обеспечить соблюдение этого.
  • Могу ли я контролировать, от какой версии библиотеки времени выполнения я зависю, изменяя манифесты?

Буду признателен за любые указания или советы.

Обновленный: Я только что заметил этот вопрос VC++:KB971090 и выбор зависимостей Visual C Runtime DLL Это очень похоже, но мой вопрос больше связан с использованием двух разных версий среды выполнения в одном исполняемом файле.

Это было полезно?

Решение

Номер версии, указанный в файле / ресурсе манифеста приложения, указывает только минимальную версию, необходимую для запуска приложения.Поведение загрузчика по умолчанию заключается в том, чтобы сначала проверить папку WINDOWS \ WinSxS на наличие идентичной версии или заменяющей ее версии зависимости, указанной в манифесте приложения, и использовать эту версию независимо от того, была ли предоставлена с приложением частная сборка, содержащая зависимость.(См. http://msdn.microsoft.com/en-us/library/aa375674 (ПРОТИВ 85).aspx).

Так что, скорее всего, ваши старые двоичные файлы в любом случае также будут использовать последнюю версию библиотеки Microsoft run time library.Попробуйте запустить выпускную сборку вашего приложения (созданную до обновления Visual Studio) на полностью исправленном компьютере и используйте process Explorer, чтобы посмотреть, какие библиотеки DLL оно загружает.Единственная проблема заключается в том, что вам придется включить в свой патч новый распространяемый во время выполнения файл.

Если вы все еще беспокоитесь, вы можете попробовать метод, описанный здесь: http://tedwvc.wordpress.com/2009/08/10/avoiding-problems-with-vc2005-sp1-security-update-kb971090/

Другие советы

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

Если вы выделите память с помощью среды выполнения и попытаетесь освободить ее с помощью другой, ваше приложение выйдет из строя.Это есть и будет оставаться проблемой.

Только среда выполнения, которая зарезервировала память, может отслеживать это.Другая среда выполнения не может знать, сколько памяти вы зарезервировали.

Возможно, вы захотите прочитать это, действительно хороший пост о связывании с msvcrt.dll .

Я слышал (только по слухам), что если в манифесте указаны две версии CRT, которые отличаются только незначительным номером редакции, то приложение в конечном итоге использует только более новую версию во время выполнения.Т.е. вы не сталкиваетесь с проблемами с несколькими ЭЛТ.

Это всего лишь слухи, и я хотел бы услышать конкретный ответ на этот вопрос.

Смотрите также: Обновления безопасности Visual Studio 2005 и версии CRT DLL в манифесте

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top