Правильный способ распространения файлов времени выполнения VC ++ - PullRequest
7 голосов
/ 03 февраля 2010

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 03 февраля 2010

Вы также можете рассмотреть статическое связывание как с MFC, так и с CRT, тогда вам нужно только отправить свои EXE-файлы. Хотя есть плюсы и минусы.

1 голос
/ 03 февраля 2010

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

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

1 голос
/ 03 февраля 2010

Обычно я бы сказал, что вы должны установить требуемый распространяемый файл на целевой машине, поскольку это «чистый путь». Но вы также можете сделать это в стиле 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 для версии CRT x86.

...