티스토리 뷰

Application/Win32

ActiveX 배포관련 QNA

알 수 없는 사용자 2008. 1. 29. 23:28
Active X 관련하여 여러가지 경우가 있었던거 같습니다.

저같은 경우엔 게임을 오토인스톨및 업데이트 프로그램을 만들었는데요.

인증부분에서 저두꽤 ~ 애를 먹었던거 같네요.특히 cab화일 안에 포함되는 OCX? 버젼탓도 있었고....

설명을 시작하기 전에 전제를 하겠습니다 인증과정은 무결하다고 생각하고요.^^ 인증과정은 그다지 노하우같진 않았습니다. 메뉴얼식으로 잘 서술되어있어서. 그냥.따라하기만 하면 되더군요.

그럼 시작합니다. 웹에서 실행시에? 반응이 없으실때...

C:WINNTDownloaded Program Files여기를 보시면 아마 ActiveX 관련상황이 나올껍니다.

만약에 ActiveX의 이름이? "1810DFFB-F74D-48F6-AB0B-37ADE0E678E1" 식의? 숫자가 막~~ 나오는경우엔

그 Activex는 깨진경우라고 생각하심 될꺼에요 그런경우라면 아마 실행이 제대로 안될겁니다.

그리고 만약에 개발했던 PC 에서는 다운이 잘 안됩니다. 원칙적으로....

왜냐면 인증부분때문인데요.

만약에 제가 ActiveCogame라는 Active X 를 컴파일하고? '패키지 및 배포 마법사'를 실행하면 CLASSID 라는것이 나옵니다.

당연히 cab화일도 나오겠죠.cab화일이 존재하는 폴더에 보시면. Support라는 폴더가 나오는데요. 그곳에 보시면 ActiveCogame.INF 라는 식의 환경화일이 나옵니다.

열어보시면.. 이런식이죠...(이부분은 Cab화일의 .Inf와 관련이 많은곳입니다 다운받은 active x가 로컬에 존재하는지 버젼은 같은지 확인할수있는 연결고리죠..^^)

[AddToRegistry]
HKLM,"SOFTWAREClassesCLSID{1810DFFB-F74D-48F6-AB0B-37ADE0E678E1}Implemented Categories{7DD95802-9882-11CF-9FA9-00AA006C42C4}"
HKLM,"SOFTWAREClassesCLSID{1810DFFB-F74D-48F6-AB0B-37ADE0E678E1}Implemented Categories{7DD95801-9882-11CF-9FA9-00AA006C42C4}"
HKCR,"Licenses",,,"Licensing: Copying the keys may be a violation of established copyrights."

구현하셨던 부분의 CLASSID 도 위와 동일해야합니다.
[ActiveCogame.dll]
file-win32-x86=thiscab
RegisterServer=yes
clsid={C4075797-79BE-4533-8C95-BF074E773E9E}
DestDir=
FileVersion=1,0,0,103
배포마법사를 사용할때마다...clsid 3개가 수정되고 버젼번호 하나를 수정됩니다

Categories{7DD95802-9882-11CF-9FA9-00AA006C42C4}" 이 정보 보이시죠?
이것이 로컬에 저장된 내용입니다. 7DD95802-9882-11CF-9FA9-00AA006C42C4 이것이 CLASSID? 라는건데요.
지금 '패키지 및 배포 마법사'를 거치면서 자동으로 저장된거죠. 이것은 인증이 거쳐지지 않은겁니다.

Active X를 배포할때. 로컬에 저장유무를 판단하는것은...

인증이 되어있는 cab 화일안에 있는 정보인 CLASSID 라는겁니다. 그러니까 당연히 인증받은것이 다운을 받더라도 등록을 하거나 실행하진 않죠..

왜냐면 로컬에 이미 같은 정보의 화일이 존재한다고 되어있으니까요.

아마 개발했던 pc 에서 실행이 안되거나 다운이 안되는경우엔 컴파일시에 로컬에 Dll이나 cab화일이 존재하기때문에 다운이 안받아지는경우엔 대략 이부분때문이었던걸로 기억합니다.

간단하게 배포하기 위해서는 컴파일 했던 폴더를 지우시는것도 좋은 방법이네요. 단 레지스트리가 좀 지저분해지는 경우는 있지만..

다시 저같은경우를 생각해서 말씀드리면..

만약에 소스가 D:source에 존재해서 거기서

임의의 폴더 D:A라는곳에 컴파일을 하고 저장하고난

이후에 '패키지 및 배포 마법사'를 실행했습니다.

실행시에 다시 재컴파일을 했죠.움...그러면 CLASSID와 CODEBASE의 version 가 각각 바뀌게 됩니다.

배포하기 위해서 올리고 난이후엔 web에서의 object 의

CLASSID? & CODEBASE 값을 Cab화일과 동일하게 바꾸고 cab화일을 경로에 맞추어 올리는거죠^^

그리고 로컬의 D:A 삭제합니다.

그러면 아마 실행은 시키실수 있습니다.

그리고 웹은? 특별히 문제가안될듯합니다..CLASSID? & CODEBASE 만 정확하다면..

그리고 정상적으로 Active X 가 실행시킬수 있는지 확인하는 가장좋은 방법은.....

PC방을 이용하시기 바랍니다.^^ 저같은경우에는 실제로 서비스를 받는 사람을 고려하기 위해서 비슷한 환경을 찾다보니 PC방에서 테스트를 많이 했답니다. 왜냐면 window 98경우엔 MSVBVM60.DLL 이게 없는거 같더군요^^;;

열코딩하시고 좋은 성과있으시길..cheer!!!!

---------------------------------------------------------------------------------------------------

기본적으로 VB런타임의 Dll파일은 2개입니다.

vb60ko.dll

msvbvc.dll

위 파일명의 스펠링 틀릴수 있음...쩝

그러나 가타 부수적인 컨트롤들을 포함하면 다를 파일까지 묶기게 됩니다.

OS별로 런타임의 버젼 차이가 있습니다.

예를들어

98나 98은 런차임 모듈을 가지고 있지 않은걸로 기억이 되고

XP는 기본으로 VB6의 런타임을 가지고있어서

VB6의 컴파일한(일반적인 컨트롤을 사용했을경우)

EXE파일 하나로 동작이 됩니다.

단 약간의 버젼차이죠(날짜 혹은 패치파일)로 인한 실행 불가...

배포를 한 후 리부팅을 원하는것은 OS가 전적으로 제어를 합니다.

윈도 부팅시 필요한 DLL파일을 미리 로드시키는 경우가 있는데

거런것들이 업그레이드 된다면

OS는 알아서 재부팅을 요구하게됩니다.

따라서 결론적으로 95나 98은 OS의 기본 DLL이 예전것이라

재부팅을 원하는 경우가 있고

XP, 2000경우는 비슷한 버젼이거나 똑같을 경우가 있어서

재부팅을 요구안할때가 종종 있습니다.

그럼...
-------------------------------------------------------------------------------------
[답변]activex를 만들어서 웹배포를 하는데요...문제가
-------------------------------------------------------------------------------------

님이 어떤 과정을 거쳐 배포판을 생성하셨는지, 혹은 어떤 기준을 가지고 테스트 하셨는지 구체적이지 않은 관계로

매우 일반적인 사항만을 (제가 아는선에서....^^)? 적도록 하겠습니다.

배포시 문제점을 확인하는 몇가지 기준이 있습니다.

뭐, 꼭 정해진 기준은 아니고, 개발 환경내지는 주어진 절차에 맞게끔 가공 처리 되었는지가 대부분입니다.

웹 배포던, 아님 로컬인스톨패키지던 공통적으로 확인해야 할 부분은 다음과 같습니다.

1. 자신이 개발한 환경이 가장 최근의 버전들로 패치된 상황이라면, 그이전의 버전들로 설정되어 있는 환경에서는 정상적인

설치가 진행되지 않을 수 있습니다.

2.패키지 구성에 사용된 (프로그래밍에 사용된) 구성요소들(컨트롤,DLL,혹은 기타등등의 코드)가 장비의존적인지 아님

운영체제 의존적인지를 확인 합니다.(결국 1번과 같은 얘기입니다.)

-> 가장 쉬운 확인 방법은 각각의 상황을 설정해놓고 설치해보는게 가장 확실 합니다.

3.특히 웹배포패키지 일경우는 웹에서 사용하기 위한 일련의 절차등을 확인해야 합니다.

하지만, 인증이나 사용안전을 위한 절차가 개발자가 개발한 패키지의 설치 자체에 영향을 주지는 않습니다.

다음과 같은 순으로 테스트를 합니다.

가. 웹배포 패키지를 일반 로컬설치패키지로 생성한 다음 문제가 생기는 환경에서 설치를 합니다.

만일 이 테스트에서 설치가 되질 않는다면, 위의 1,2번항목에 이상이 있습니다.

나.웹배포패키지가 설치된 웹페이지를 보안수준을 가장 낮음에 놓고 접근하여 테스트를 합니다.

만일 이 테스트에서 설치가 되질 않는다면, 위의 1,2번항목에 이상이 있습니다.

다. [가]항목에서는 정상적인 설치가 이루어지지만, [나] 항목에 이상이 있을 경우는 웹배포패키지에 몇가지 파일이

제외 되었거나, 클라이언트가 해당 패키지를 설치하고 실행하기 위한 정보가(파일)이 부족한 경우 입니다.

다음과 같은 방법으로 테스트를 진행해 봅니다.

a.배포판 인증을 할 시 캐비넷에 인증을 하거나, 컨트롤에 인증을 하는 방법으로 테스트 합니다.

b.웹배포판 패키지 생성시 로컬배포패키지 생성시처럼 모든 파일을 패키지에 포함하여 테스트합니다.

4. 실행오류가 아닌, 설치문제는 반드시 위의 1,2,3번 과정에 그 원인이 포함 됩니다.

대부분 사용구성요소(컨트롤,DLL,API.....)가 버전이나,장비, 운영체제등 환경을 가려지원하는 경우이거나, 아니면,

설치시 동반되는 구성요소들이 설치되는 환경의 시스템구성요소여서 제약이 생기거나 등록이 되질 않는 경우입니다.

차분히 체크사항들을 확인하고 진행하면 님의 경우는 꼭 해결 되리라 봅니다.
-------------------------------------------------------------------------------------------------

1. 먼저 ActiveX Control을 개발하실 때, Version관리를 하신다면, 프로젝트 속성에서 [디버깅]-버전 호환성에서 이진 호환성으로 하셔야 합니다. 그래야만, 버전이 바뀌었을 때, 웹에서 알아서 다운을 받아 설치를 하고요.

2. 패키지 및 배포 마법사를 통해서 ocx에 대한 인터넷 배포 패키지를 만듭니다.

3. CAB파일에 서명을 합니다.

아래 페이지를 참조하여 테스트 인증서를 만드시면 됩니다.

마이크로 소프트 CAB파일 서명 단계

4. lpktool.exe를 사용하셔서, lpk 파일을 만듭니다.

이때, 현재 컴파일한 activex control을 regsvr32.exe를 사용하여 등록하신 후,

그 control로 lpk파일을 만드셔야 합니다. 기존에 ocx를 설치한 후, 새 버전을 설치하고 이리하여 레지스트리가 엉망이 된 경우에???? lpk를 만들면, 제대로 만들어 지지 않습니다.

그런 후에 웹에 올려서 배포하시면, 클라이언트 브라우저에서 나타나는 문제가 없더군요..

근데, 특별한 구성요소를 포함하여 ocx를 만들면 설치가 안되거나, 문제가 생기는 경우가 있구요..

위 과정에서 제대로 안된 부분이 있으면 설치가 안됩니다.

과정을 하나하나 짚어가면서 하시면 큰 문제가 없으리라 생각되네요..

참고로 저의 개발 PC사양은 winxp, vb6.0(한글판), ie 최신 버전으로 했습니다.

--------------------------------------------------------------------------------------------------

질문하신 내용입니다.

------------------------------------------------------------------------------

웹으로 cab파일을 묶어서 배포할때 system32 폴더에 묶었던 ocx 파일이 왜 없을까요?

ocx가 레지스트리에 등록만되고 system32에는 저장이 안되는걸까요?

고수님들 답변부탁드립니다!

------------------------------------------------------------------------------

저는 고수가 아니라 함부로 답하기가 죄송합니다만,

도움이 되실지 몰라 짧게나마 글을 남겨볼까 합니다.

우선 System32 폴더에 ocx 가 등록되지않는다면, 혹시 CAB 파일을 작성하실때 INF 파일에서

등록될 경로를 잘 못 지정하신게 아닌가 먼저 짐작됩니다.

아래는 제가 작성했던 HTML 코드의 일부분 입니다.

<html>

<중략....>

<body>

<!-- 여기서 teWExchange.LPK 파일은 LPK 툴을 이용하여 작성하고 생성된 *.LPK 파일 입니다. -->

<OBJECT CLASSID="clsid:5220cb21-c88d-11cf-b347-00aa00a28331"><PARAM NAME="LPKPath" VALUE="teWExchange.lpk"></OBJECT>

<OBJECT id=teExchange1 classid="clsid:F1E566AC-3319-4714-BA37-E30A77229A64"? CODEBASE="http://182.1.143.8/proto/rg/teWExchange.CAB#version=1,0,0,0">

<PARAM NAME="_ExtentX" VALUE="26088">

<PARAM NAME="_ExtentY" VALUE="17965">

<PARAM NAME="uid" VALUE="<%=Session("user_id")%>">????????? <!-- 사용자 -->

<PARAM NAME="uname" VALUE="<%=Session("user_name")%>">????? <!-- 사용자명 -->

<중략....>

</html>

그리고 작성했던 CAB 파일은 인증을 받았습니다.

CAB 파일을 작성할때는? Batch 파일을 만들어서 아래와 같이 했습니다.

## 배치파일(BAT : Batch File) 의 내부 ##

1 라인 : del teWMig.cab

2 라인 : SignCode -spc bizbank_2003.spc -v bizbank_2003.pvk -n teWMig -i http://182.1.143.8/proto/rg -t http://timestamp.verisign.com/scripts/timestamp.dll teWMig.ocx

3 라인 : cabarc.exe -s 6144 N? teWMig.cab teWMig.ocx teWMig.INF

4 라인 : SignCode -spc bizbank_2003.spc -v bizbank_2003.pvk -n? teWMig -i teWMig.cab -t? http://timestamp.verisign.com/scripts/timestamp.dll teWMig.cab

5 라인 : pause

(('1 ~ 5 라인 : ' 은 확인하기 편리하기 위하여 표기한것 입니다.))

만약 인증받지 않은 CAB 파일등이라면

IE -> 인터넷옵션 -> 보안 -> 사용자 지정 수준 -> ActiveX 컨트롤 및 플러그 인

에서 모두 '사용' 으로 체크하시고 하시면 될 것 같습니다.(IE6.0 기준)

## INF 파일의 내부 입니다. ##

;teWMig.ocx용 INF 파일
;

; ★★ DestDir은(는) Windows 디렉터리에서 10, 둡니다.

; ★★ WindowsSystem(32) 디렉터리에서는 11이거나 Occache 디렉터리에서는 비워

; ★★ 질문 하신 내용과 가장 깊은 관련성이 있을듯한 부분 입니다.

;

[version]

signature="$CHICAGO$"

AdvancedINF=2.0

[Add.Code]

teWMig.ocx=teWMig.ocx

[teWMig.ocx]

file-win32-x86=thiscab

RegisterServer=yes

clsid={75D46F48-925D-4EAB-914E-0B4DDD5F5AA0}

FileVersion=1.0.0.0

DestDir=11

[RegisterFiles]

%11%teWMig.ocx

================================================================================================

이상 입니다.

소스코드 라인 한줄 한줄 주석을 달아드리지 못해 죄송합니다.

보시고 참고하실 부분이있다면 참고하시고 없다면 과감히 버리십시오.

질문이 있으시다면 다시 글 이어주십시오.

부디 이것으로 끝나기를 .. ^^;? ((왜냐하면 깊이 들어가면 모르거든요.. ^^;))