Должен ли я использовать vcredist.exe или msm для установки библиотеки времени исполнения Visual С++

Каковы плюсы и минусы использования vcredist.exe по сравнению с файлами msm для установки библиотек времени исполнения Visual С++ 8.0?

Ответ 1

MSM предоставит вам лучший оптимизированный опыт, а затем vcredist, он будет интегрироваться с индикатором выполнения и откатится от ошибки (или отменит).
Со стороны разработчика вам будет полезно узнать журнал msm в главном файле журнала установки, и он будет выполнять свои действия бок о бок с действием установки (с помощью vcredist вам нужно будет выполнить его самостоятельно).

Из-за всех вышеприведенных причин я обычно предпочитаю использовать msm (и его более или менее один Liner Liner для его использования).

Ответ 2

Модули слияния не могут быть обновлены (если только они не решили, что в Windows Installer) после их установки, поэтому я бы посоветовал придерживаться vcredist.exe.

Ответ 3

Еще одна проблема с модулями слияния, с которыми я недавно столкнулся, заключается в том, что они устанавливают свойство ALLUERS для установщика MSI равным 1, что означает "для каждой машины". Это заставляет всю вашу установку быть на компьютере, что является проблемой, если вы хотите, чтобы она была для каждого пользователя. Есть ли способ иметь установщик для каждого пользователя, который включает в себя модуль слияния CRT, которого я не знаю, но я еще не нашел его.

Ответ 4

Единственным недостатком модулей слияния является то, что вы не можете развернуть несколько версий модуля слияния VC80 или VC90 в одном и том же msi, поскольку идентификаторы файлов перекрываются. Вы можете развернуть один из них. Например, если вы хотите развернуть RTM версию VC80 и версию SP1, вы получите ошибки, если они находятся в одном и том же msi (я использую WiX).

Другая проблема: поведение сборки отличается от VS 2005/2008, поскольку оно относится к применению пакета обновления или обновления.

2005 Если вы устанавливаете пакет обновления 1 на вашей машине сборки, ваша программа автоматически свяжется с обновленными файлами. Пакет обновления также обновит модули слияния, поэтому, если вы укажете своему установщику на использование обновленных файлов, все в порядке. Однако это может быть проблемой, если вы используете сторонние скомпилированные статические библиотеки, для которых может потребоваться более старая версия среды выполнения.

2008 Поведение здесь - полная противоположность. Если вы устанавливаете SP1, модули слияния обновляются до уровня SP1, но ваша программа будет скомпилирована против версий RTM, если вы не установите макрос препроцессора для каждого проекта: _BIND_TO_VCLIBS_CURRENT_VERSION = 1. Это можно установить либо в stdafx.h, либо в определениях "Preprossor" для вашего проекта, или если вы используете старый проект nmake, вам придется передавать его везде, где есть параметры командной строки, например CFLAGS.

Это означает, что если вы используете msm, предоставленный визуальной студией, и вы применяете SP1, развертывание вашего проекта прерывается до тех пор, пока вы не определите макрос.

Еще одна оговорка к макросу: если вы используете проект 2005 года, который ссылается на статическую библиотеку 2008 года, установка макроса нарушит проект 2005 года из-за символа, который не существует в версии компилятора 2005 года. В этом случае я обычно разделяю проект, к которому я привязываюсь, к версии решения 2005 и 2008 годов.

Ответ 5

Чтобы указать на очевидное, Merge Modules на самом деле не являются хорошим решением, если вы не собираетесь использовать установщик MSI. Vcredist абсурдно прост в использовании, независимо от процесса установки, который вы используете.

Ответ 6

Считаете ли вы, что вместо статической ссылки? Тогда у вас нет проблемы с перераспределением.