상세 컨텐츠

본문 제목

웹페이지에 ActiveX 삽입

프로그래밍 관련/프로그래밍 관련팁

by AlrepondTech 2009. 6. 25. 14:31

본문

반응형

 

 

 

 

 

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

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

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

 

 

 

 

 

 

 

웹페이지에 ActiveX를 삽입하기 위해서는 크게 3가지 작업을 해야 합니다.

  1. 캐비넷파일 만들기
  2. 캐비넷파일에 싸인하기
  3. 자바스크립트로 객체 불러오기

1. 캐비넷파일 만들기

ActiveX 컨트롤 파일을 패키징하는 작업입니다. 우선 ActiveX 컨트롤의 Dependency를 확인한 후에 필요한 파일들을 한 곳에 모아놓습니다. 그리고 inf 파일을 만들어 주고, cabarc.exe를 이용해 캐비넷(.cab) 파일을 만듭니다.

예를 들어 ActiveX 파일이름이 Test.dll 이고 atl80.dll 을 사용한다고 가정했을 때 inf 파일의 내용은 대략 다음과 같습니다. 주의할 점은 순서가 변경되서는 안된다는 것입니다. 즉, atl80.dll과 Test.dll의 순서가 바뀌면 안됩니다.

[version]
    signature="$CHICAGO$"
    AdvancedINF=2.0
[Add.Code]
    Test.dll=Test.dll
    atl80.dll=atl80.dll
[Test.dll]
    file-win32-x86=thiscab
    clsid={996EF3FE-8685-47C0-A259-129C0ED3DEB5}
    FileVersion=1,0,0,1
    RegisterServer=yes
[atl80.dll]
    file-win32-x86=thiscab
    FileVersion=8,0,50727,762

위와 같이 inf 파일을 만든 후 패키징을 합니다. 다음과 같은 식으로 패키징할 수 있습니다.

cabarc N Test.cab Test.dll atl80.dll Test.inf

-정적과 동적연결:  만약 프로젝트속성에서 "정적 라이브러리에서 MFC사용"으로 하면 기존 *.OCX 파일에
정적으로 모두 포함되므로 필요파일 빼곤 OCX파일만 있어도 된다, 하지만"공유DLL 에서 MFC를 사용" 등등으로 하면 mfc,crt DLL의 관련 라이브러리 dll 파일까지 모두 포함 시켜서 CAB에 압축해야한다.

-압축예:
예로들어 만약에 activeX 를 mfc로 만들고 매니페스트를 추가하려면 C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86 에 있는 ATL MFC CRT를 보고 msvcr80.dllmsvcp80.dll msvcm80.dll Microsoft.VC80.MFC.manifest Microsoft.VC80.CRT.manifest mfcm80u.dll mfcm80.dll mfc80u.dll mfc80.dll
들중 실행에 필요한 파일을 cab로 만들고 inf에 모두 추가해주어야한다. (모두 추가 않해주어도 된다, 실행에
필요한것만 추가해준다.)

2. 캐비넷파일에 싸인하기

위와 같이 해서 캐비넷 파일을 만들었다면, 그 파일에 싸인을 해야합니다. 싸인을 하지 않으면 브라우저(IE)에서 다운로드 조차 할 수 없게 됩니다. 싸인은 다음과 같은 과정을 순서대로 수행하면 됩니다.

setreg 1 true
makecert -sv mykey.pvk -n "CN=회사이름" cert.cer
cert2spc cert.cer cert.spc
signcode -spc cert.spc -v mykey.pvk Test.cab    #'Test.cab'은 캐비넷이름 입니다.

최신 Platform SDK를 설치하면 signcode 대신 signtool 을 사용합니다. 그래서 signcode 대신 다음과 같은 커맨드를 사용해야 합니다.

pvk2pfx -pvk mykey.pvk -spc cert.spc -f -pfx sample.pfx -pi pass -po pass
signtool sign -f sample.pfx -p pass Test.cab

3. 자바스크립트로 객체 불러오기

이제 싸인된 캐비넷파일을 서버에 올리고 자바스크립트로 객체를 불러오면 모든 작업은 끝납니다.

단순히 'object'태그를 html 파일에 삽입해서  실행할 수 있지만, 이렇게 하면 브라우저에서 그 컨트롤을 활성화시키기 위해 마우스로 클릭해 줘야 합니다. 이 번거로운 작업을 없애려면 object 태그를 삽입하는 자바스크립트를 작성해서 그 스크립트를 다른 파일로 저장한 후, html파일에서 그 스크립트파일을 include해 주면 됩니다.

test.html 에서 ActiveX 컨트롤 인스턴스를 생성하는 부분

<script src="embedControl.js"></script>

create_activeX("xxxxx-xxxxx-xxxx-....", "test", 200, 200, "Test.cab#version=1,0,0,1");
embedControl.js 의 전체 소스

function create_activeX(clsid, id, width, height, codebase)
{
    document.write("<object classid='clsid:"+clsid+"' "+
        (codebase == null ? "" : "codebase='"+codebase+"' ")+
        "id='"+id+"' " +
        "width='"+(w == null ? 0 : width)+"' " +
        "height='"+(h == null ? 0 : height)+"'></object>");
}

※ 에러로그 확인 방법

도구 -> 인터넷옵션 -> 설정 -> 파일보기를 클릭한 후 ?CodeDownloadErrorLog!name={...} 인 파일의 내용을 보면 됩니다. IE로 파일을 드래그앤드롭하면 내용을 볼 수 있습니다. {} 안에 있는 클래스아이디를 꼭 확인해 주세요


※ Trouble Shooting

  • 다운로드는 됐으나 실행이 되지 않습니다.
    • 가장 많이 발생하는 이유는 dependency가 있는 파일이 포함되지 않은 경우입니다. 이 때에는 dependency를 꼼꼼히 확인해서 포함시켜야 합니다. 만약 VS2005의 런타임/MFC/ATL 라이브러리를 사용한다면 manifest 파일도 포함시켜야 합니다.
  • 다운로드가 되지 않습니다.
    • 브라우저 설정을 변경해 줘야 합니다. 도구 -> 인터넷옵션 -> 보안탭 -> 사용자 지정 수준에서 ActiveX에 관련된 설정을 변경해 주면 됩니다.
    • DirectX를 사용한다면 공인인증을 해야합니다. 테스트인증으로는 실행되지 않습니다. 만약 테스트인증서로 실행을 하고자 한다면 트러스트 사이트 리스트에 포함시키면 됩니다.

참조


출처: http://yardbirds.tistory.com/48?srchid=BR1http%3A%2F%2Fyardbirds.tistory.com%2F48


 

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

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

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

 

 

 

반응형


관련글 더보기

댓글 영역