Выбор метода развертывания
Обновлен: Ноябрь 2007
В большинстве случаев развертывание приложений Visual C++ выполняется развертыванием с помощью установщика Windows. Дополнительные сведения о методах развертывания, которые поддерживаются в Visual Studio, и об альтернативных методах развертывания, см. в разделах Выбор стратегии развертывания и Альтернативные способы развертывания. Развертывание ClickOnce для собственных приложений Visual C++ не поддерживается в Visual Studio 2005, однако, имеется возможность развернуть приложения Visual C++ в командной строке посредством ClickOnce. Дополнительные сведения см. в разделе Развертывание с помощью технологии ClickOnce для приложений Visual C++.
Библиотеки Visual C++ являются параллельными сборками.
С помощью Visual Studio 2005 выполняется установка библиотек Visual C++ как совместно используемых параллельных сборок. По умолчанию, все приложения, построение которых выполнялось с помощью Visual Studio 2005, строятся как изолированные приложения с манифестом, который внедрен как ресурс, или дополняет конечный двоичный файл как внешний файл. Чтобы убедиться, что приложение Visual C++ будет выполняться на компьютере, на котором отсутствуют установленные библиотеки Visual C++, возможно, придется распространить сборки Visual C++ с приложением и убедиться в том, что эти сборки установлены на целевом компьютере.
Распространение библиотек Visual С++
Существуют три способа распространения DLL-библиотек Visual C++:
С помощью распространяемых модулей слияния Visual C++, чтобы установить определенную библиотеку Visual C++ как совместно используемые параллельные сборки в собственном кэше сборок (папка WinSxS). Это основной рекомендуемый способ распространения библиотек Visual C++. Для доступа к этой папке необходимо, чтобы приложение установщика выполнялось от имени пользователя с правами администратора. Дополнительные сведения см. в разделе Распространение с использованием модулей слияния. Пример подобного развертывания можно найти в разделе Практическое руководство. Развертывание проекта установки и развертывания.
С помощью распространяемого пакета Visual C++ (VCRedist_x86.exe, VCRedist_x64.exe, VCRedist_ia64.exe), чтобы установить все библиотеки Visual C++ как совместно используемые в собственный кэш сборки (папка WinSxS). Этот пакет установлен с помощью Visual Studio в папку %WindowsSdkDir%\Bootstrapper\Packages\, также этот пакет можно загрузить из Центра загрузки Майкрософт Microsoft Visual C++ 2005 Redistributable Package (x86). Повторное распространение библиотек Visual C++ с помощью пакета рекомендуется для приложений, построенных с помощью Visual C++ Express, а также в тех случаях, когда желательно развертывание всех библиотек Visual C++ сразу. Пример использования этого пакета см. в разделе Практическое руководство. Развертывание с помощью Xcopy.
Установите конкретную сборку Visual C++ как закрытую сборку для приложения, использующего файлы, которые находятся в каталоге Program Files\Microsoft Visual Studio 8\VC\Redist\. Этот способ рекомендуется для того чтобы дать возможность установки приложений пользователям, у которых нет прав администратора, или для того чтобы выполнять приложения с совместно используемого ресурса. Пример см. в разделе Практическое руководство. Развертывание с помощью Xcopy.
Примечание. |
---|
В операционной системе Windows Server 2000 имеется только один рекомендуемый и поддерживаемый способ повторного распределения библиотек Visual C++ — использование распространяемых модулей слияния. |
При установке библиотек Visual C++ с использованием распространяемых модулей слияния, сборки разворачиваются как общие параллельные сборки в собственном кэше сборок (папка WinSxS). Для доступа к этой папке необходимо, чтобы приложение установщика выполнялось от имени пользователя с правами администратора.
Если установка выполняется пользователем, который не имеет прав администратора, то развертывание сборок Visual C++ даст сбой во время установки и приложение не будет выполняться. Также, в некоторых продуктах разрешена установка для отдельных пользователей, но модули слияния выполняют установку библиотек в места совместного доступа и оказывают влияние на всех пользователей системы. В двух последних и подобных сценариях, поддерживаемый метод состоит в установке необходимых сборок как закрытых параллельных сборок для определенного пользовательского приложения.
С помощью этого метода достаточно скопировать папку с DLL-файлами и манифестами для зависимых сборок в локальную папку приложения. При выполнении приложения загрузчик операционной системы сначала выполняет поиск зависимых сборок в папке WinSxS; однако, если соответствующую сборку не удается найти, загрузчик загружает закрытую сборку из данного вложенного каталога.
Неверное распространение библиотек Visual C++ может привести к ошибкам времени выполнения при выполнении приложения, которое зависит от этих библиотек. Список потенциальных ошибок и разрешений для этих ошибок, см. в разделе Устранение неполадок в изолированных приложениях и параллельных сборках C/C++.
Требуемый манифест
Распространение приложений C/C++, при построении которых не был использован манифест, не поддерживается. Библиотеки Visual C++ не могут использоваться приложениями C/C++ без манифеста, который выполняет привязку приложений к этим библиотекам. Все двоичные файлы C/C++, построенные в Visual C++ 2005 должны включать манифест, описывающий их в зависимости от библиотек Visual C++. Это проект установки по умолчанию в Visual Studio и поведение по умолчанию компоновщика, выполняющего построение конечных двоичных файлов из объектного кода.
Во всех случаях рекомендуется, чтобы манифест был внутренним. Однако, в случае EXE-файла, манифест может быть внешним (этот сценарий поддерживается, но не рекомендуется).
Приложения, для которых необходимо, чтобы зависимые DLL-файлы были представлены в локальной папке приложения или в папке, указанной в переменной среды, могут также быть уязвимы перед потенциально вредоносными программами. Кроме этого, после развертывания такие приложения сложнее обслуживать.
Динамическая компоновка предпочтительнее статической
Не рекомендуется распространять приложения C/C++, которые статически привязаны к библиотекам Visual C++. Часто ошибочно полагают, что при статической привязке программ к библиотекам Visual C++, возможно значительно усовершенствовать производительность приложения. Однако, почти во всех случаях влияние, которое оказывается на производительность вследствие динамической загрузки библиотек Visual C++ незначительно. Более того, в случае статической привязки не позволяется обслуживание приложения и его зависимых библиотек даже автором приложения или Microsoft. Например, рассмотрим приложение, которое статически привязано к определенной библиотеке и выполняется на клиентском компьютере с новой версией этой библиотеки. В приложении по-прежнему используется код из предыдущей версии этой библиотеки. Приложение не получает преимуществ от усовершенствований библиотеки, таких как усовершенствование безопасности. Разработчикам приложений С/C++ настоятельно рекомендуется рассмотреть сценарии обслуживания перед тем, как принимать решение о статической привязке к зависимым библиотекам, и при любой возможности использовать динамическую привязку.
См. также
Основные понятия
Другие ресурсы
Общие сведения о развертывании с помощью установщика Windows