인터넷 설치를 할경우, 익스플로러의 보안 세팅에 의해서, 사인이 없는경우 설치가 되지 않는다는 오류가 난다. 원래는 베리사인등에서 정식 사인을 받아야만 가능하다고 하지만(아직 해본적은 없지만.. 아무나 해본사람은 이글에 추가를..) 개발을 위해서 테스트용 인증 사인이 가능하며, 실제로 국내의 많은 컴포넌트들은 이 테스트 인증만으로 배포되고 있다. 단, 이것은 설치만을 위한 인증이고 COM 자체가 자신이 안전한 콘트롤임을 보장해야 한다. VisualCPP/SafeComControl 참고.




                ActiveX Control 패키징 & 인터넷을 통한 배포
                        
                                (초벌문서)
                from MSDN: Packaging ActiveX Controls
                mk:@MSITStore:\\ANTI\MSDN2001JULY\MSDN\inet.chm::/workshop/components/activex/packaging.htm

                                                        written by kinam



        1. Cabinet file
                인터넷 배포를 위해 쓰이는 수단중 한가지.
                caparc.exe 를 통해 제작가능

        2. HTML 내에서의 사용, 배포

                <OBJECT CLASSID="clsid:dcf0768D-ba7a-101a-b57a-0000c0c3ed5f"
                        CODEBASE="http://webserver/time.cab"
                        ALIGN="CENTER"
                        WIDTH=270
                        HEIGHT=26
                        ID="T1">
                                <PARAM NAME="Interval" VALUE=1000>
                                <PARAM NAME="Enabled" VALUE=1>
                </OBJECT>

                - object 태그가 쓰일경우, 지정된 컴포넌트가 등록되지 않았거나,
                  또는 버전이 명시된것보다 낮은경우 CODEBASE 값을 통해서 인터넷 설치 를 하게된다.

                  - 등록이 일어나는 순서.
                        1. codebase url 에서 파일 다운로드
                        2. \windows\occache\ 에 압축 해제( 이 폴더는 디폴트값 )
                        3. object 등록
                        4. COM 객체 createinstance


        
        3. Signing Cabinet files
                .cab 파일도 activeX 파일과 마찬가지로 서명이 가능하다.


        
        4. Multiple Platform support
                
                익스4.0 또는 최신버전의 ActiveX 는 다른 플래폼으로 포팅되어있으므로
                다중플래폼을 지원하게 되었다.
                
                - Multiple .cab files with .inf in separate .cab
                - Multiple .cab files with .inf and x86 binary bundled in single .cab
                - Single .cab file
        

        5. Creating .INF file


                - example


                [version]
                    signature="$CHICAGO$"
                    AdvancedINF=2.0
                 [Add.Code]
                    time.ocx=time.ocx
                    msvcrt.dll=msvcrt.dll
                    mfc42.dll=mfc42.dll
                    olepro32.dll=olepro32.dll
                 [time.ocx]
                    file-win32-x86=thiscab
                    clsid={DCF0768D-BA7A-101A-B57A-0000C0C3ED5F}
                    FileVersion=1,0,0,0
                    RegisterServer=yes
                 [msvcrt.dll]
                    FileVersion=4,20,0,6164
                    hook=mfc42installer
                 [mfc42.dll]
                    FileVersion=4,2,0,6256
                    hook=mfc42installer
                 [olepro32.dll]
                    FileVersion=4,2,0,6068
                    hook=mfc42installer
                 [mfc42installer]
                    file-win32-x86=http://activex.microsoft.com/controls/vc/mfc42.cab
                    run=%EXTRACT_DIR%\mfc42.exe


        
        6. Building .CAB file

                cabarc -s 6144 N time.cab time.ocx time.inf

                사인을 위해 6144 바이트 확보



        7. Signing the .CAB file
                
                setreg 1 true
                
                makecert -u:mykey -n:CN=mysoftwarecompany cert.cer

                cert2spc root.cer cert.cer cert.spc

                signcode -prog mycab.cab -spc cert.spc -pvk mykey                       

데브피아에서 갈무리한 문서

인터넷 다운 설치를 위한 캐비닛/보증서 만들기
---------------------------------------------

엑티브 컨트롤의 캐비닛/보증서 만들기

준비물 :
컨트롤 test.ocx
캐비닛 보증서만들기 위한 SDK ( CAB SDK/ INet SDK )

캐비닛 파일을 만들기
--------------------

캐비닛 파일은 MS에서 만든 Zip방식의 (LZX) 압축 파일이다.
이 압축파일은 MS 윈도 플랫폼의 자동설치를 위해서 쓰인다.

캐비닛 파일을 만들기 위해선 CAB SDK를 구해야 한다.
편리하게 CAB을 만들기위한 툴인 CAB Man (Cab Manager, MS )
나 CabPack (프리웨어)를 쓰면 된다.

캐비닛 파일을 단지 압축용으로 쓴다면 inf파일 첨부없이
압축을 하면 되지만 압축이 풀릴 디렉토리 ActiveX컨트롤시
RegisterServer할것인지를 명시할때는 inf파일로 압축 풀기시
풀기 세팅을 맞출수 있다.

다음은 간단한 INF 예제이다.

-------------------[ test.inf ]---------------------------
[version]
signature="SCHICAGOS"
AdvanceINF=2.0

[Add.Code]
test.ocx=test.ocx

[test.ocx]
file-win32-x86=thiscab
classid={D558994B-F7F4-11D2-9559-0060971DB6FE}
FileVersion=1,0,0,0
RegisterServer=yes
;end of file
--------------[ test.ocx만 cab만들기 ]--------------------

file-win32-x86은 x86플랫폼에 이 파일이 있는 곳을 정해주는것으로
thiscab은 이 cab에 있다는 말이고,
file-win43-x86=http://www.bro.com/mydir/test.ocx
로 하면 그 사이트로 가서 다운을 받게 된다.
FileVersion은 해당 파일의 오른클릭후 등록정보메뉴에서 버전탭을
보면 알 수 있다.

만일 ocx 파일 외에 다른 dll 파일도 있다고 한다면

-------------------[ test2.inf ]---------------------------
[version]
signature="SCHICAGOS"
AdvanceINF=2.0

[Add.Code]
test.ocx=test.ocx
test.dll=test.dll

[test.dll]
file-win32-x86=thiscab
FileVersion=1,0,0,0
DestDir=11
RegisterServer=yes

[test.ocx]
file-win32-x86=thiscab
classid={D558994B-F7F4-11D2-9559-0060971DB6FE}
FileVersion=1,0,0,0
RegisterServer=yes
;end of file
-----------[ test.ocx와 test.dll로 cab만들기 ]-----------------

이렇게 해주면 된다. 이때 DestDir은
11은 윈도시스템디렉토리( WINDOWS\SYSTEM 또는 WINNT32\SYSTEM32)
10은 윈도우 디렉토리 (WNIDOWS 또는 WINNT32)
DestDir을 지정안하면 OCCACHE 디레고리로 지정된다.


캐비닛 파일 만들기

inf파일이 필요 없이 그냥 만들때는 CabPack이나 CABMan같은것으로
쉽게 만들고 (물론 안에도 기능으로 inf파일 첨부 할수있다. )

다음은 CAB SDK를 써서 할 경우 이다.
cabarc -s 6144 n test.cab test.ocx test.inf
또는
cabarc -s 6144 n test.cab test.ocx test.dll test2.inf

을 하게 되면 test.cab이 생기게 된다.
-s 크기 : 디지털 서명을 위한 영역의 크기(6114는 6K바이트)
n : 새로운 캐비닛 파일을 만듬

이제 test.cab파일이 생겼다.


디지털 서명 보증서 만들기
---------------------------

INet SDK 에 있는 프로그램으로 보증서를 만들게 되는데 이는 원래
VerSign같은 인증기관(CA,Certification Authority)로 부터 SPC
(Software Publisher Ceritificate)를 얻어야 하는데, 상업용 SPC를
얻길 원하면 http://digitalid.versign.com/cdesign.htm을 가보자.

테스트용 SPC를 만들기

1. 보증 확인 과정을 제어하는 레지스트리 키 설정

SETREG 1 TRUE

2. 테스트용 x.509 보증서를 생성하기

MAKECERT -n "CN=조경민 보증서" -sv Test.pvk test.cer

이렇게 하면 test.pvk라는 사적 키(private key)파일과 cer 회사보증
서 파일이 생긴다. 이때 윈도로 암호를 넣으라고 한다. 암호 만들기

3. 테스트 보증서에서 테스트용 SPC를 만들기

CERT2SPC test.cer test.spc

이렇게하면 spc파일이 생긴다.



CAB 파일에 디지털 서명 보증서 추가하기
--------------------------------------

SIGNCODE -spc test.spc -v test.pvk -n "test ocx" test.cab

이렇게하면 CAB파일에 보증서가 붙게 된다.

물론 보증서는 CAB이 아니라 OCX나 DLL파일에 붙일수도 있다.

Verisign Key 가 있는 경우

[version]
Signature="$Chicago$"
AdvancedINF=2.5

[Add.Code]
Melon.dll=Melon.dll
IKMMSClt.dll=IKMMSClt.dll
WACDMP3.dll=WACDMP3.dll
WACDOGG.dll=WACDOGG.dll
WACDWAV.dll=WACDWAV.dll
WACDWMA.dll=WACDWMA.dll
WACORE.dll=WACORE.dll

[Melon.dll]
file-win32-x86=thiscab
classid={C296DB5F-4B01-47e1-AB57-C590BE769111}
FileVersion=1,0,0,29
DestDir=11
RegisterServer=yes

[IKMMSClt.dll]
file-win32-x86=thiscab
FileVersion=1,0,0,1
DestDir=11

[WACDMP3.dll]
file-win32-x86=thiscab
DestDir=11

[WACDOGG.dll]
file-win32-x86=thiscab
DestDir=11

[WACDWAV.dll]
file-win32-x86=thiscab
DestDir=11

[WACDWMA.dll]
file-win32-x86=thiscab
DestDir=11

[WACORE.dll]
file-win32-x86=thiscab
DestDir=11



cabarc -s 6144 n Melon.cab ..\..\bin\Release\WA*.dll ..\..\bin\Release\IKMMSClt.dll ..\..\bin\Release\Melon.dll Melon.inf
signcode

주의 사항

inf 예제

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

[DefaultInstall]
CopyFiles=install.files
RegisterOCXs=RegisterFiles
AddReg=AddToRegistry

[DefaultUninstall]
cleanup=1
UnRegisterOCXs=UnRegisterOCXSection
Delfiles=install.files

[RInstallApplicationFiles]
CopyFiles=install.files
RegisterOCXs=RegisterFiles
AddReg=AddToRegistry

[DestinationDirs]
install.files=11

[SourceDisksNames]
1=%DiskName%,CHOLUpLoad.cab,1

[Add.Code]
CHOLUpLoad.ocx=CHOLUpLoad.ocx

[install.files]
CHOLUpLoad.ocx=CHOLUpLoad.ocx

[SourceDisksFiles]
CHOLUpLoad.ocx=1

[CHOLUpLoad.ocx]
file-win32-x86=thiscab
clsid={6A15FAA3-273E-4E5F-886C-52C8B03B7B54}
DestDir=11
FileVersion=3,6,0,1
RegisterServer=yes

[Setup Hooks]
AddToRegHook=AddToRegHook

[AddToRegHook]
InfSection=DefaultInstall2

[DefaultInstall2]
AddReg=AddToRegistry

[AddToRegistry]
HKCR,"CLSID\{6A15FAA3-273E-4E5F-886C-52C8B03B7B54}\Implemented Categories"
HKCR,"CLSID\{6A15FAA3-273E-4E5F-886C-52C8B03B7B54}\Implemented Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}"
HKCR,"CLSID\{6A15FAA3-273E-4E5F-886C-52C8B03B7B54}\Implemented Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}"
HKCR,"Component Categories"
HKCR,"Component Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}","409",,"Controls that are safely scriptable"
HKCR,"Component Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}","409",,"Controls safely initializable from persistent data"

[RegisterFiles]
%11%\CHOLUpLoad.ocx

[UnRegisterOCXSection]
%11%\CHOLUpLoad.ocx

Reference


CategoryVisualCPP 참고:

검색어: 인터넷배포 자동설치 자동배포 COM배포 AciveX배포 배포 패키징 사인

VisualCPP/PackagingActiveXControls (last edited 2005-03-15 04:09:29 by 210)