본문 바로가기

기술자료/OS

ActiveX 등록하기.

ActiveX 등록하기...


1. 우선은 *.cab 나 *.ocx 파일이 있어야 합니다.
  (앞으로 *는 test로 하겠습니다. - 제가 test로 시험을 해서...)
  cab나 ocx는 vb를 통해 만드는 방법이 많이 있으므로 생략하겠습니다.


2. test.lpk 화일 만들기
  lpk 파일을 만들기 위해서는 lpktool.exe 란 프로그램이 필요합니다.
  (마이크로소프트 사이트나 기타 사이트에 많이 있습니다.)
 
  압축을 푼 후 lpk_tool.exe 파일을 실행시키면 리스트 박스가 두개 나타나죠?
  왼쪽의 리스트 박스는 레지스트리에 등록된 목록입니다.
  등록명은 프로젝트명.클래스명 으로 나와 있습니다.
  (저의 경우는 test.usercontrol1으로 나와있더군요)

  만약 레지스트리에 등록이 않되어있다면 regsvr32 명령으로 먼저 등록하시구요..

  (다른곳은 test.lpk파일을 나중에 만들던데, 나중에 만들면 이상이 생기더군요..
     다음에 htm파일에 param테그를 고치는 부분이 있는데, 이것을 하려면 보안 인증 전에 먼저 lpk파일을 작성해야 합니다.)

  그리고 만들어진 test.lpk 파일을 가지고 이미 만들어진(vb로 만드셨다면 test.cab파일과 test.htm파일이 만들어지죠?) test.htm파일의 param테그 부분을 고칩니다.

  원본         : <PARAM NAME="LPKPath" VALUE="LPKfilename.LPK">
  고치고 난 후 : <PARAM NAME="c:test" VALUE="test.LPK">

  lpkpath부분은 lpk파일이 들어있는 곳의 풀패스를 적어야 합니다.


3. 이제는 그 문제가 많던 보안 부분의 해결입니다.
   (참고로 저는 델파이 사이트에서 어느분이 해결한 부분을 제가 다시 적용해서 적습니다.)

  마이크로소프트 사이트나 기타 사이트에 codesign.exe파일이나 inetsdk.exe파일이 있습니다. 두 파일은 모두 똑 같으므로 둘 중 하나만 받아서 사용하세요..

  압축을 풀고 다음과 같이 실행합니다.(명령프롬프트에서 하시는게 젤 편해요..)
  (앞으로 나올 *.pvk, *.cer, *.spc파일의 이름은 아무렇게나 해도 상관이 없고, 확장자만 잘 지키세요)

  ㄱ. 먼저 해당 디렉토리로 갑니다.(inetsdkbin까지)
  ㄴ. SETREG 1 True
  ㄷ. MAKECERT -n "CN=금명식의 보증서" -sv Test.Pvk Test.Cer
           - "cn="금명식의 보증서"부분은 아무 말이나 상관 없어요..
  ㄹ. [Create Private Key Password] 대화상자가 뜨며 암호를 요구하면 아무 거나 입력한다. 단 기억할 수 있는 암호로... (암호를 두번 물어보는데 - 기억으로는 sub암호까지 - 모두 같은 암호를 입력한다.)
  ㅁ. CERT2SPC Test.cer Test.spc
  ㅂ. 다시 대화상자가 뜨며 암호를 요구하면 아까 암호를 넣는다.
      (저의 경우는 한번도 안물어 보네요..)
  ㅅ. SIGNCODE -spc Test.spc -v Test.Pvk -n "Test" c:testTest.cab ( 여기서 Test.OCX는 내가 만든 OCX의 이름으로 대체하면 된다. 이름을 대체할때 파일이 저장된 풀 패스를 쓰세요)
  ㅇ. 또 대화상자가 뜨며 암호를 물어보면 아까 그 암호를 또 넣는다.
      (이것도 안물어 보는 경우가 있다는 사실...)


  위와 같이 해서 모두 성공하셨다면
  (참고로 ㄴ, ㄷ(ㄹ),ㅁ(ㅂ) 을 하게 되면 모두 succeeded란 메세지가 뜨고, ㅅ을 성공하게 되면

   warning : this file is signed, but not timestamped.
   succeeded
  란 말이 나오게 되는데 별 문제 없는것 같더라구요..)


4. 이제 체크를 해 볼까요?

  아직 명령프롬프트를 종료 안했죠?
  그 상태에서
   chktrust test.cab
  를 합니다. 그러면 어떤 메세지 박스가 뜨죠?
  그게 웹에서 다운 받기 전의 박스입니다.

  그러면 이제 모두 성공했어요..(참고로 전 3번의 방법으로 모두 test.ocx파일까지 했습니다.-다른 분이 "ㅅ"부분만 다시 하면 됀다고 하는데, 불안해서시리.. )


5. 이제는 탐색기에서 inetsdkbin폴더를 보시면 test.cer이란 파일이 만들어져 있죠..
 
  test.cer이란 파일을 실행시키면 보안 인증서를 얻을 수있습니다.
  다른건 다 참고로 보는 것이고 "일반탭에서-보증서설치버튼"을 누르세요..
  그리고  계속 "다음-다음-마침.."
  그럼 보증이 되었데요..



  이제 server가 된 컴퓨터에서는 레지스트리에 등록이 되어있어 시험은 못하고, 다른 컴퓨터로 이 곳으로 연동한다면 원하는 결과를 볼 수있을꺼에요..









***** asp와 vb연동하기 (param테그로 값을 vb로 넘기기) *****

1. ActiveX 컨트롤에 값을 받을 수 있는 프로퍼티를 만들어야 합니다.
방법은 비주얼베이직의 ActiveX컨트롤 인터페이스 마법사를 사용하면 간단
ActiveX컨트롤 인터페이스 마법사를 사용하는 방법
(1) 추가기능에서 추가기능관리자에서 ActiveX컨트롤 인터페이스 마법사를
추가하고 로드시킨다.
그러면 추가기능메뉴에 ActiveX컨트롤 인터페이스 마법사가 등록된다.
(2) ActiveX컨트롤 인터페이스 마법사를 실행
(3) 인터페이스 구성원 선택에서 불필요한 구성원은 모두 선택해제 한다.
필요하면 선택
(저는 모두 필요가 없어서 선택 해제했음)
(4) 사용자정의 구성원에서 추기를 클릭한다.
그리고, 예를 들어 memid라는 속성(프로퍼티)를 추가한다. 그리고, 다음
(여기서 추가를 할때 이름이 중요 - asp에서 그대로 이름을 사용한다.)
(5) 매핑설정은 필요하면 매핑시키고, 필요없으면 건너뛴다.
여기서는 건너뛰었다.
(매핑 설정을 했어요..
제가 한 것은 string형 변수가 필요했기 때문에, text박스를 하나 만들어서 그 박스의 text속성(text1.text)에다가 연결시켰어용)
(6) 특성설정인데 데이터형식을 지정한다.
여기서는 String을 지정하였다. 기본값은 "" 빈문자열로 하고
(7) 그리고 마침하면 아래쪽과 같은 코드가 생긴다.
이 코드는 memid라는 속성에 대한 ActiveX 컨트롤 인터페이스이다.


2. 비주얼 인터데브로 ASP페이지를 오픈하고
개발한 ActiveX컨트롤을 등록하고 페이지에 올려놓으면
화면에 ActiveX컨트롤이 보일 것임
(레지스트리에 등록되어 있으면(안돼면 regsvr32명령으로 등록을 먼저하자) 왼쪽 Toolbox에서 오른 마우스를 누른 후 내가 만든 ocx를 등록할 수 있다.)

3. 이 ActiveX컨트롤을 선택하고 등록정보를 보면 사용자가 작성한
프로퍼티를 확인할 수 있을 것임.
이 프로퍼티에 <  %=변수명%  > 이런 식으로 하고 웹페이지를
실행하면 값을 받을 것임.
(여기서 문제가 생기는 데, 인터데브는 .ocx파일만 전송하도록 되어있기 때문에 .cab파일도 전송하도록 해야 한다.
그러므로 .cab파일을 만들때 생기는 .htm파일을 보면 classID가 나온 후 "codeBase=test.CAB#version=1,0,0,0" 부분이 있다.
이걸 인터데브로 만든 파일의 classID이후 부분(.htm과 같은 위치)에 복사해서 붙여 놓는다.)


4. 그리고 값을 받은 뒤 바로 시행하게 하기 위해서는
UserControl_Show()이벤트에 해당코드를 작성하기 바람.
(UserControl_Show()안에서 text1.text의 값은 어느 변수에 기억 시키고 그 변수를 가지고 작업을 하게 되면 원하는 결과를 얻을 수 있다.
간단히 msgbox로 확인을 해 보면 쉽게 제대로 작동함을 알 수 있다.)