배포 방법 선택

업데이트: 2007년 11월

대부분의 경우 Windows Installer 배포를 사용하여 Visual C++ 응용 프로그램을 배포합니다. Visual Studio 내에서 지원되는 배포 방법 및 대안에 대한 자세한 내용은 배포 전략 선택대체 배포 방법을 참조하십시오. Visual Studio 2005에서는 Visual C++ 네이티브 응용 프로그램을 ClickOnce로 배포하는 기능을 지원하지 않습니다. 그러나 명령줄에서 ClickOnce를 통해 Visual C++ 응용 프로그램을 배포할 수는 있습니다. 자세한 내용은 Visual C++ 응용 프로그램의 ClickOnce 배포를 참조하십시오.

side-by-side 어셈블리로서의 Visual C++ 라이브러리

Visual Studio 2005에서는 Visual C++ 라이브러리를 공유 side-by-side 어셈블리로 설치합니다. 기본적으로 Visual Studio 2005에서 빌드한 모든 응용 프로그램은 매니페스트가 리소스로 포함되거나 최종 이진 파일에 외부 파일로 첨부된 격리된 응용 프로그램으로 빌드됩니다. Visual C++가 설치되지 않은 컴퓨터에서 Visual C++ 응용 프로그램을 실행하려면 응용 프로그램과 함께 Visual C++ 어셈블리를 재배포하여 대상 컴퓨터에 설치해야 합니다.

Visual C++ 라이브러리 재배포

세 가지 방법으로 Visual C++ DLL을 재배포할 수 있습니다.

  1. Visual C++ 재배포 가능 병합 모듈을 사용하여 특정 Visual C++ 라이브러리를 네이티브 어셈블리 캐시(WinSxS 폴더)에 공유 side-by-side 어셈블리로 설치합니다. Visual C++ 라이브러리를 재배포할 때는 이 방법을 사용하는 것이 가장 좋습니다. 이 폴더에 액세스하려면 관리자 권한이 있는 사용자가 설치 관리자 응용 프로그램을 실행해야 합니다. 자세한 내용은 병합 모듈을 사용하여 재배포를 참조하십시오. 이러한 배포 예제를 보려면 방법: 설치 및 배포 프로젝트 배포를 참조하십시오.

  2. Visual C++ 재배포 가능 패키지(VCRedist_x86.exe, VCRedist_x64.exe, VCRedist_ia64.exe)를 사용하여 모든 Visual C++ 라이브러리를 네이티브 어셈블리 캐시(WinSxS 폴더)에 공유 side-by-side 어셈블리로 설치합니다. Visual Studio에서는 이 패키지를 %WindowsSdkDir%\Bootstrapper\Packages\ 폴더에 설치합니다. Microsoft 다운로드 사이트 Microsoft Visual C++ 2005 Redistributable Package (x86)에서 이 패키지를 다운로드할 수도 있습니다. Visual C++ Express로 응용 프로그램을 빌드한 경우 및 모든 Visual C++ 라이브러리를 한 번에 배포해야 하는 경우 이 패키지를 사용하여 Visual C++ 라이브러리를 다시 배포하는 것이 좋습니다. 이 패키지를 사용하는 방법에 대한 예제는 방법: XCopy를 사용하여 배포를 참조하십시오.

  3. Program Files\Microsoft Visual Studio 8\VC\Redist 디렉터리에 제공된 파일을 사용하여 특정 Visual C++ 어셈블리를 응용 프로그램 전용 어셈블리로 설치합니다. 관리자 권한이 없는 사용자가 응용 프로그램을 설치하는 경우나 공유 위치에서 응용 프로그램을 실행할 수 있어야 하는 경우 이 방법을 사용하는 것이 좋습니다. 이 방법에 대한 예제를 보려면 방법: XCopy를 사용하여 배포를 참조하십시오.

참고:

Windows Server 2000에서는 재배포 가능 병합 모듈을 사용하여 Visual C++ 라이브러리를 재배포하는 방법만 권장되고 지원됩니다.

재배포 가능 병합 모듈을 사용하여 Visual C++ 라이브러리를 설치하면 어셈블리가 네이티브 어셈블리 캐시(WinSxS 폴더)에 공유 side-by-side 어셈블리로 배포됩니다. 이 폴더에 액세스하려면 관리자 권한이 있는 사용자가 설치 관리자 응용 프로그램을 실행해야 합니다.

관리자 권한이 없는 사용자가 설치를 실행하면 Visual C++ 어셈블리가 배포되지 못하고 응용 프로그램이 실행되지 않습니다. 또한 일부 제품은 사용자별로 설치할 수 있지만 병합 모듈은 공유 위치에 라이브러리를 설치하므로 시스템의 모든 사용자에게 영향을 줍니다. 이들 두 시나리오 및 유사한 시나리오에서는 필요한 어셈블리를 특정 사용자 응용 프로그램의 전용 side-by-side 어셈블리로 설치하는 방법이 지원됩니다.

이 방법에서는 종속 어셈블리의 DLL 및 매니페스트가 있는 폴더를 응용 프로그램의 로컬 폴더로 복사하기만 하면 됩니다. 응용 프로그램이 실행되어도 운영 체제 로더는 WinSxS 폴더에서 종속 어셈블리부터 찾습니다. 그러나 해당 어셈블리를 찾을 수 없는 경우 로더는 이 하위 디렉터리에서 전용 어셈블리를 로드합니다.

Visual C++ 라이브러리를 잘못 재배포하면 이러한 라이브러리에 의존하는 응용 프로그램을 실행할 때 런타임 오류가 발생할 수 있습니다. 발생 가능한 오류 및 해결 방법의 목록을 보려면 C/C++ 격리된 응용 프로그램 및 side-by-side 어셈블리 문제 해결을 참조하십시오.

필수 매니페스트

매니페스트 없이 빌드된 C/C++ 응용 프로그램은 재배포할 수 없습니다. C/C++ 응용 프로그램을 Visual C++ 라이브러리에 바인딩하는 매니페스트가 없으면 응용 프로그램에서 이 라이브러리를 사용할 수 없습니다. Visual C++ 2005에서 빌드된 모든 C/C++ 이진 파일은 Visual C++ 라이브러리에 대한 종속성을 설명하는 매니페스트를 포함해야 합니다. 이는 Visual Studio의 기본 프로젝트 설정이며 개체 코드에서 최종 이진 파일을 빌드하는 링커의 기본 동작입니다.

매니페스트는 항상 내부에 포함하는 것이 좋습니다. 그러나 EXE 파일의 경우 매니페스트를 외부에 둘 수 있습니다. 이러한 시나리오는 지원되지만 권장되지는 않습니다.

응용 프로그램 로컬 폴더나 환경 변수에서 지정하는 폴더에 종속 DLL이 있어야 하는 응용 프로그램은 보안 관련 공격에 취약할 수도 있습니다. 또한 이러한 응용 프로그램은 배포한 후 서비스하기가 보다 어렵습니다.

정적 링크 대비 동적 링크의 장점

Visual C++ 라이브러리에 정적으로 링크하는 C/C++ 응용 프로그램은 재배포하지 않는 것이 좋습니다. 프로그램을 Visual C++ 라이브러리에 정적으로 링크하면 응용 프로그램의 성능이 크게 개선된다고 오해하는 경우가 많습니다. 그러나 거의 모든 경우 Visual C++ 라이브러리를 동적으로 로드하더라도 성능에는 큰 영향이 없습니다. 또한, 정적 링크를 사용하면 응용 프로그램 작성자 또는 Microsoft가 응용 프로그램 및 종속 어셈블리를 서비스할 수 없습니다. 예를 들어 특정 라이브러리에 정적으로 링크된 응용 프로그램이 클라이언트 컴퓨터에서 새 버전의 라이브러리와 함께 실행된다고 가정합니다. 응용 프로그램에서는 여전히 이 라이브러리의 이전 버전 코드를 사용하므로, 강화된 보안 기능과 같은 라이브러리의 향상 내용을 활용할 수 없습니다. C/C++ 응용 프로그램 작성자는 종속 라이브러리에 정적으로 링크하기로 결정하기 전에 서비스 시나리오에 대해 충분히 고려한 다음 가능하면 동적 링크를 사용하는 것이 좋습니다.

참고 항목

개념

배포 전략 선택

배포 예제

기타 리소스

배포(C++)

Windows Installer 배포 개요

ClickOnce 배포