Распространяемые файлы Visual C ++ без использования VCRedist_x86.exe

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

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

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

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

Решение

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

По существу

  • Не вставляйте манифест в свои exe-файлы.
  • Скопируйте библиотеки DLL C ++ и их манифесты в каталог вашего приложения.
  • Удалите "PublicKeyToken" из всех манифестов (ваших и Microsoft).
  • При необходимости измените информацию о версии в файлах манифеста вашего приложения, чтобы она соответствовала файлам манифеста Microsoft (или наоборот).

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

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

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

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

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

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

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

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

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