배포 시나리오 예제

업데이트: 2007년 11월

MyApplication.exe와 MyLibrary.DLL이 있고 이 둘은 모두 MFC를 사용하여 빌드한 것으로 가정합니다. MyApplication.exe는 MyLibray.DLL에 의존하며 이 둘은 모두 공유 DLL에서 MFC를 사용합니다. 이 둘은 모두 네이티브 또는 혼합(/clr) 이진 파일일 수 있습니다. 가장 간단하게는 기본 설정을 변경하지 않은 채 마법사를 사용하여 두 파일을 모두 생성하는 경우가 있습니다. 이 단원의 예제에서는 Visual Studio가 설치되어 있지 않은 다른 컴퓨터에 이 응용 프로그램을 배포하는 방법에 대해 설명합니다. 이 단원에서는 주로 응용 프로그램의 릴리스 버전을 배포하는 방법을 다루지만 디버그 버전의 응용 프로그램을 배포하기 위해 내용을 변경해야 하는 경우 관련 정보도 함께 제공합니다.

참고:

이 EULA에서는 디버그 Visual C++ 프로그램을 재배포할 수 없도록 규정하고 있습니다. 그러나 디버깅을 위해 이러한 프로그램을 임시로 배포할 수는 있습니다. 자세한 내용은 Visual Studio 2008의 EULA(소프트웨어 사용 약관)를 참조하십시오.

초기 설정

이 시나리오에는 세 가지 컴퓨터가 등장합니다.

개발 컴퓨터는 응용 프로그램이 빌드되는 컴퓨터입니다. 이 컴퓨터에는 Visual Studio 2005(STD, PRO 또는 TS)가 설치되어 있습니다.

두 대의 배포 대상 컴퓨터에는 Visual Studio 2005가 설치되어 있지 않습니다. 배포 대상 1은 매니페스트를 기반으로 응용 프로그램을 종속 라이브러리에 바인딩하는 기능을 지원하는 운영 체제(Windows XP Home Edition, Windows XP Professional, Windows Server 2003, Windows Vista)가 실행되는 컴퓨터입니다. 배포 대상 2는 이러한 기능을 지원하지 않는 운영 체제(Windows 2000)가 실행되는 컴퓨터입니다.

이 시나리오의 목표는 개발 컴퓨터에서 응용 프로그램을 빌드하고 두 대상 컴퓨터에 이를 배포한 다음 실행하는 것입니다.

준비 사항

다른 컴퓨터에서 실행할 Visual C++ 이진 파일을 빌드한 경우 이 이진 파일에 필요한 DLL을 확인해야 합니다. Dependency Walker를 사용하면 이 작업을 쉽게 수행할 수 있습니다. 이 시나리오에서는 Visual C++ DLL, 특히 CRT와 MFC를 고려해야 합니다. Visual Studio에서 디버그 버전의 MyApplication.exe를 열고 그 리소스를 살펴보면 RT_MANIFEST 리소스를 확인할 수 있습니다. 이는 이진 파일에 포함되는 매니페스트입니다. 이를 내보내고 XML 파일로 열면 다음과 같은 내용이 표시됩니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.xxxxx.yy" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugMFC" version="9.0.xxxxx.yy" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

즉, 이 응용 프로그램은 다음과 같은 어셈블리에 종속되어 있습니다.

  • Assembly Microsoft.VC90.DebugCRT, version 9.0.xxxxx.yy for x86

  • Assembly Microsoft.VC90.DebugMFC, version 9.0.xxxxx.yy for x86

  • Assembly Microsoft.Windows.Common-Controls, version 6.0.0.0 for x86

릴리스 이진 파일에는 다음과 같은 내용이 표시됩니다.

<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.xxxxx.yy" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.MFC" version="9.0.xxxxx.yy" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

즉, 이 응용 프로그램은 다음과 같은 어셈블리에 종속되어 있습니다.

  • Assembly Microsoft.VC90.CRT, version 9.0.xxxxx.yy for x86

  • Assembly Microsoft.VC90.MFC, version 9.0.xxxxx.yy for x86

  • Assembly Microsoft.Windows.Common-Controls, version 6.0.0.0 for x86

디버그 버전과 릴리스 버전 모두에 대해 MyLibrary.dll에서도 비슷한 매니페스트를 확인할 수 있습니다. 매니페스트 ID는 EXE의 경우 1이고 DLL의 경우 2입니다. 또한 매니페스트가 이진 파일에 포함되지 않은 경우 이는 <binaryname>.<extension>.manifest로 저장됩니다. 이 경우에도 파일 내용은 동일합니다.

참고:

Visual Studio 2005에서는 매니페스트 없이 C++ 응용 프로그램을 빌드하고 %PATH%를 사용하는 이전 방식으로 Visual C++ 라이브러리에 바인딩할 수 없습니다. 또한 Visual C++ DLL에서 이 사실을 발견하면 DLL이 로드되지 않습니다. 이 경우 지원되지 않는 시나리오를 시도했다는 메시지가 변경해야 할 사항과 함께 표시됩니다. /manifest:no를 사용하거나 매니페스트를 삭제하지 않도록 해야 합니다.

배포 방법

이 예제에서는 사용자가 설치 과정에서 지정할 수 있는 %TARGET% 폴더에 MyApplication.exe를 설치합니다. MyLibrary.dll은 %TARGET%\MyLibrary에 설치되고 \MyLibrary가 경로에 추가됩니다.

VC++ 응용 프로그램을 배포하기 위한 두 가지 방법을 검토합니다.

  1. 설치 및 배포 프로젝트를 사용하여 설치 패키지 빌드

  2. XCopy 배포

각 방법에 대해 두 가지 시나리오가 있습니다.

  1. 공용 어셈블리로 Visual C++ 라이브러리 배포

  2. 전용 어셈블리로 Visual C++ 라이브러리 배포

시나리오 1에서 WinSxS 폴더에는 Visual C++ DLL의 복사본이 하나만 있습니다. 시나리오 2에서는 Visual C++ DLL의 복사본이 응용 프로그램 EXE 및 DLL의 로컬 폴더에 하나씩 모두 두 개가 설치됩니다.

참고:

Windows 2000에서는 시나리오 2가 지원되지 않습니다. 응용 프로그램의 로컬 폴더에 배포하면 응용 프로그램을 사용할 때 문제가 발생하기 때문입니다.

참고 항목

작업

방법: 설치 및 배포 프로젝트 배포

방법: XCopy를 사용하여 배포

개념

배포 예제