Корректный способ распределить VC ++ файлы во время выполнения

У меня есть приложение MFC, которое я пытаюсь упаковать для развертывания. Это, кажется, зависит от файлов 'msvcr90.dll', 'msvcp90.dll' и 'mfc90.dll'. Что корректный путь состоит в том, чтобы распределить эти файлы?

Я не могу использовать модули слияния, поскольку мой установщик не поддерживает их. Я знаю, что могу выполнить VCRedist_x86.exe, но я не хочу делать это по различным причинам.

Насколько я вижу, что моя единственная альтернатива должна установить файлы как Частные Бок о бок блоки. Это корректно?

Согласно http://msdn.microsoft.com/en-us/library/ms235317 (По сравнению с 80) .aspx корректный способ установить приватную сборку состоит в том, чтобы скопировать папки 'Microsoft. VC90. CRT' и 'Microsoft. VC90. MFC' в ту же папку как исполняемый файл. Действительно ли это - корректный способ решить проблему? Это работает, но это кажется небольшими 1990-ми для копирования системных файлов этим способом. Кто-либо может показать мне пример другого приложения (или по крайней мере демонстрационный проект), который делает это?

Наконец, когда я должен волноваться о распределении .manifest файла для моего приложения? Я, как предполагается, явно устанавливаю XML-файл, или он встраивается в мой исполняемый файл так или иначе?

7
задан Hoppyx 3 February 2010 в 13:25
поделиться

3 ответа

Вы также можете рассмотреть статически связанные с помощью MFC, так и ЭЛТ, тогда вам нужно только отправить файлы exe. Есть плюсы и минусы к этому, хотя.

1
ответ дан 7 December 2019 в 16:42
поделиться

Обычно я бы сказал, что вы должны установить требуемый дистрибутив на целевую машину, так как это "чистый путь". Но вы также можете сделать это в стиле 90-х годов. Это сильно зависит от того, какую библиотеку CRT/MFC вы используете для сборки приложения. Это можно проверить в файле манифеста. Вы также можете заставить приложение привязать его к определенной lib. Без определения VS2008 обычно связывает 9.0.21022.8, с

#define _BIND_TO_CURRENT_VCLIBS_VERSION 1

взятыми последними освобождениями. Вы также можете связать приложение с указанной версией:

#define _CRT_ASSEMBLY_VERSION "9.0.30729.1"

и/или

#define _MFC_ASSEMBLY_VERSION "9.0.30729.1"

Так что, если вы хотите сделать это в стиле 90-х, скопируйте файлы с C:\Windows\Winsxs\ и возьмите DLL из той папки, с которой вы связали приложение, например, с amd64_microsoft. vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.1_none_99b61f5e8371c1d4, если вы используете CRT для x64 приложения или эквивалент x86_microsoft. vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.1_none_99b61f5e8371c1d для x86 версии CRT.

1
ответ дан 7 December 2019 в 16:42
поделиться

Я бы сказал, что этого достаточно, чтобы поместить эти dll вместе с вашим exe, потому что текущий путь - это то место, где они в первую очередь ищут.

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

1
ответ дан 7 December 2019 в 16:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: