Programming/MFC2008. 11. 14. 10:45
배포전에 Dependency를 이용 꼭 필요한 파일의 목록을 확인한다.(8버젼 부터는 안먹히기도 하나 그래도 꼭 확인한다)
VC에 있는 Dependency툴은 단일파일로 실행되고 한번만 실행해주면
윈도우 탐색기 컨텍스트 메뉴에 자동으로 View Dependencies를 추가해준다.

VC 6 이하(~ VS 6)
 MSVCRT, MFC42 등의 MFC버젼과 관련된 DLL과 추가로 사용한 DLL을 같이 배포한다.
 98이후부터는 운영체제에 포함되어 있다.
참고로 http://activex.microsoft.com/controls/vc/mfc42.cab로 관련 DLL을 다운받을 수 있으며
ActivX 배포시 inf파일에 추가해서 자동으로 설치되게 만들 수도 있다.

VC 7(VS 2003)
MSVCR71, MFC71
이 DLL은 최신 운영체제라고 해서 더는 기본 내장을 해 주지않기 때문에 응용 프로그램이 알아서 자기 디렉터리나 윈도우 시스템 디렉터리에다 구비해야 한다.

VC 8이후(VS 2005~)
side by side asembly라는 기술이 도입되어 windows 디렉토리에 밑에 WinSxS(Windows Side-by-Side) 폴더에 추가 작업을 해야한다.
Dependency를 사용해서 관련 DLL을 같이 배포해도 제대로 실행된다는 보장을 할 수 없다.
관련 DLL들은 C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT(이하 2005기준)에서 얻을수 있으며
MFC를 안쓰고 release버전만 배포한다면 Microsoft.VC80.CRT.manifest, msvcp80.dll, msvcr80.dll만 배포해도 된다.
(msvcm80.dll은 매니지드C++용 crt라 native를 쓰는 경우는 배포하지 않아도 된다.)

배포방법으로는
1. 재배포 패키지를 이용한다. 링크에서 다운받아 설치해도 되며 다른 배포방법도 설명하고 있다.

설치 디렉토리에서 얻기
C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86

Microsoft Visual C++ 2005 SP1 재배포 가능 패키지(x86)
http://www.microsoft.com/downloads/details.aspx?familyid=200B2FD9-AE1A-4A14-984D-389C36F85647&displaylang=ko

Microsoft Visual C++ 2008 재배포 가능 패키지(x86)
http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&DisplayLang=ko

2. 정적 라이브러리를 사용한다(포함) -> CRT(/MT), MFC, ATL 등
실행파일이 커지긴 하나 제일 간단하다. MFC 라이브러리를 사용시는 MFC라이브러리를 정적으로 포함하면 CRT도 자동으로 /MT로 변경된다. 고로 어디서든 기존보다 더 간단하다. 귀찮아서 ActiveX를 이렇게 배포한적있음 ㅡ.ㅡ;

용량은 기본 MFC 다이얼로그 프로젝트가 아무것도 추가안하고 52k정도에서 308k 정도로 커진다.


3. 인스톨쉴드(Install Shield), 설치 프로젝트를 이용한다.

4. .Net Framework를 설치한다.
managed 로 컴파일했다면 .Net Framework는 필수이다.

-> 추가! MFC,ATL을 사용안한 프로젝트에 한해서만 먹힙니다. 프레임웍만 깔면 WinSxS에 VC80.CRT관련만 설치되네요.

    VC90도 똑같습니다. 재배포 패키지를 설치하셔야 MFC,ATL관련이 깔립니다.

위 방법 외에도 몇가지가 더 있으며 재배포 패키지 링크에 연결된 설명들과 아래 링크들을 참조하기 바란다.
http://www.codeproject.com/cpp/vcredists_x86.asp(codeproject에 소개된 방법)
http://www.serious-code.net/moin.cgi/RedistributingVisualCppRunTimeLibrary

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

재배포 패키지를 이용한 OCX(ActiveX) 배포 (2005 ~)
Cab 파일들어갈 파일 내용은 다음과 같다.
자신이 만든 ocx파일
inf 파일
재배포패키지

INF파일의 내용은 다음과 같다.

[Setup Hooks]
hook1=hook1

[hook1]
run=%EXTRACT_DIR%\vcredist_x86.exe

[version]
signature="$CHICAGO$
AdvancedINF=2.0

[Add.Code]
mytest.ocx=mytest.ocx
vcredist_x86.exe=vcredist_x86.exe

[vcredist_x86.exe]
file-win32-x86=thiscab
DestDir=11
RegisterServer=no

[mytest.ocx]
file-win32-x86=thiscab
DestDir=11
FileVersion=1,0,0,3
clsid={1DF754CB-D85F-490B-9011-BDCB0BFDC430} <= 이건 아시져?
RegisterServer=yes

inf파일의 [Add.Code]는 나열된 순서의 반대로 설치가 되는 점을 유의하며 위와같이 하면
vc2005 재배포 패키지가 실행된후 맨 마지막으로 ocx가 설치된다.


출처 - DEVPIA slipy1님이 쓰신글

Posted by skensita