Распространяемые Visual C ++ без использования VCRedist_x86.exe - PullRequest
15 голосов
/ 07 октября 2008

Я занимаюсь разработкой в ​​условиях жестких ограничений, но разработчики также имеют жесткий контроль над ними.

VCRedist_x86.exe - распространяемый 4Mb - неинтересный (четыре часа на передачу). Я бы действительно предпочел просто перераспределить MFC90.dll, msvcm90.dll, msvcp90.dll и msvcr90.dll - это больше похоже на 2Mb. Однако Перераспределение файлов Visual C ++ говорит:

Не поддерживается распространение приложений C / C ++, созданных без манифеста. Библиотеки Visual C ++ не могут использоваться приложениями C / C ++ без манифеста, связывающего приложение с этими библиотеками. Для получения дополнительной информации см. Выбор метода развертывания .

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

Мое следующее предположение - собрать записи реестра, необходимые для заполнения файлов в каталоге WinSxS, и заполнить его самостоятельно (а не с помощью программы 4 Мб).

[править] Программное обеспечение часто обновляется, поэтому библиотеки DLL настоятельно предпочтительнее статических ссылок. [/ edit]

Как я могу успешно распространять необходимые файлы, но при этом снижать накладные расходы?

Ответы [ 4 ]

27 голосов
/ 06 ноября 2008

[Я являюсь текущим сопровождающим SxS в Microsoft]

Я бы настоятельно рекомендовал против удаления атрибута publicKeyToken из манифестов. При частном развертывании библиотеки dll будет работать нормально с этим атрибутом без изменений. Однако его удаление не позволит вашему приложению получать выгоду от обновлений безопасности, если на целевом компьютере будет установлена ​​более новая версия CRT, поскольку зависимости больше не будут совпадать.

Итак, подведем итог: встроить манифест безопасно по умолчанию. Скопируйте файлы манифеста CRT + DLL прямо в каталог вашего исполняемого файла, без изменений. Вот и все. Совместимый Win2k +.

13 голосов
/ 07 октября 2008

Мы используем это: Howto: развертывание приложений VC2008 без установки vcredist_x86.exe

По существу

  • Не вставляйте манифест в ваши exe-файлы.
  • Скопируйте библиотеки DLL C ++ и их манифесты в каталог вашего приложения.
  • Удалите «publicKeyToken» из всех манифестов (ваших и Microsoft).
  • При необходимости измените информацию о версии в файлах манифеста вашего приложения в соответствии с файлами манифеста Microsoft (или наоборот)
4 голосов
/ 07 октября 2008

Укажите / MT (многопоточность) для параметра «библиотека времени выполнения» на странице свойств компилятора. Это статически связывает с библиотекой времени выполнения, поэтому вам не нужно устанавливать распространяемый.

1 голос
/ 07 октября 2008

Установите их как частные сборки. Смотрите здесь:

http://msdn.microsoft.com/en-us/library/ms235291.aspx

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

...