Visual Studio Распространяемый пакет x64 необходим для выполнения 64-битного приложения? - PullRequest
2 голосов
/ 06 декабря 2011

Предположим, что на машине (64-битной) нет Visual Studio 2008 и распространяемого пакета x64, 1. Чтобы запустить 64-битное приложение (созданное в Visual Studio 2008 sp1) на этой машине, нужен ли на ней пакет Redistributable?

Предположим, что на компьютере (64-битном) установлена ​​Visual Studio 2008, но нет распространяемого пакета x64, 2. Чтобы запустить 64-битное приложение (созданное в Visual Studio 2008 sp1) на этом компьютере, нужен ли пакет Redistributable начто?

какова связь между распространяемым пакетом x64 и 64-битными приложениями?

Ответы [ 2 ]

2 голосов
/ 06 декабря 2011

Во-первых, это требование существует как для 32-битного, так и для 64-битного кода. Просто вам чуть больше повезет с 32-битным кодом, и кто-то другой установит его перед вами. Как это было на вашем компьютере разработчика с помощью установщика VS.

Это вызвано настройкой компилятора. Project + Properties, C / C ++, генерация кода, настройка библиотеки времени выполнения. Все шаблоны проектов в VS имеют этот параметр в / MD. Вы можете изменить его на / MT и больше не зависеть от библиотек времени выполнения, таких как msvcr90.dll. Код библиотеки времени выполнения будет связан с вашей программой вместо того, чтобы полагаться на библиотеки DLL, которые будут присутствовать на целевой машине.

Вы должны быть осторожны, однако, настройка / MD является безопасной настройкой. Это гарантирует, что у вас не возникнет проблем, когда вы создадите свои собственные библиотеки DLL и напишите код, который возвращает объекты C ++ (например, std :: string) или указатели, которые должны быть освобождены вызывающей стороной. Это не будет работать хорошо, если у DLL и EXE есть своя собственная копия CRT. Они будут использовать разные кучи, освобождение указателя на кучи не может работать должным образом. Тихая утечка в XP, сбой в Vista и выше.

Распространяемый .exe фактически подразумевается как загружаемый установщик, который ваш клиент может использовать, когда вы забудете написать установщик для вашей программы. Гораздо лучшим решением для вас будет написать установщик, который будет копировать и устанавливать все правильно. Это займет не более минуты, чтобы сделать один. Добавьте проект установки и развертывания + настройки в свое решение. Щелкните правой кнопкой мыши по нему, Добавить, Вывод проекта. Project + Properties, Prerequisites и установите флажок «Библиотеки среды выполнения Visual C ++ (x64)». Если вы предпочитаете создать свой собственный установщик, вы можете использовать модули слияния в C: \ Program Files (x86) \ Common Files \ Merge Modules

Да, и разверните сборку выпуска, а не сборку отладки. Отладочная версия CRT не распространяется.

1 голос
/ 06 декабря 2011

Во многих случаях вы можете статически связать вашу программу с библиотекой времени выполнения C. В этом случае распространяемый пакет не нужен, поскольку все необходимые функции копируются в исполняемый файл вашего приложения. Однако если вы динамически ссылаетесь на него, вам следует доставить распространяемый пакет вместе с приложением. Хотя многие другие приложения также делают это, нет гарантии, что в целевой системе будет доступно необходимое время выполнения.

Вы можете изменить способ связи со средой выполнения в диалоговом окне настроек вашего проекта в разделе «C / C ++> Генерация кода> Библиотека времени выполнения».

В следующей статье MSDN объясняется, как вы перераспределяете необходимые файлы VC ++: http://msdn.microsoft.com/en-us/library/ms235299%28v=vs.80%29.aspx

...