본문 바로가기
프로그래밍

ActiveX 배포 문제 포스트 ㅠㅠ

by 건우아빠유리남편 2012. 3. 27.
반응형

안녕하세요 유쾌한 냐옹이입니다. 현재 제 프로젝트에서 CAB파일로 ocx를 배포하려고 하는데... 이 파일이 클라이언트쪽에서 브라우저를 통해 레지스트리에 등록도 되고 설치도 되었는데, 웹페이지에서는 불러오지를 못하고 있습니다. 왜 그럴까 알아보는데 벌써 3일째네요..;;; 어제는 테스트용으로 초간단 OCX파일과 asp.net 웹사이트를 만들어서 IIS에 배포해서 테스트 해보았습니다. 하지만, 같네요...

제가 했던 테스트는 아래와 같은 순서로 진행되었습니다.

-TestOcx 라는 ActiveX 프로젝트 생성 및 ocx 빌드-

TestOcx.idl 파일 내용

// CTestOcxCtrl의 클래스 정보입니다.
[
uuid(7DBB2674-1EA3-4BB3-A868-48C312083D27)
]
coclass TestOcx
{
[default] dispinterface _DTestOcx;
[default, source] dispinterface _DTestOcxEvents;
};

TestOcx에 메시지 박스를 출력하여 ActiveX에 정상적으로 메소드 호출이 이루어짐을 확인하기 위해 프로퍼티 하나를 넣었습니다.

LONG CTestOcxCtrl::Getm_Tmp(void)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

// TODO: 여기에 디스패치 처리기를 추가합니다.

return 0;
}


void CTestOcxCtrl::Setm_Tmp(LONG newVal)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

// TODO: 여기에 속성 처리기 코드를 추가합니다.
AfxMessageBox(_T("왔다"));
SetModifiedFlag();
}

TestOcx.ocx 파일을 가지고 CAB파일을 생성 및 코드 인증 작업을 진행합니다.

TestOcx.inf 파일 내용

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

[Add.Code]
TestOcx.ocx=TestOcx.ocx

[TestOcx.ocx]
file-win32-x86=thiscab
clsid={7DBB2674-1EA3-4BB3-A868-48C312083D27}
RegisterServer=yes
FileVersion=1,0,0,1
DestDir=11

cabarc.exe N TestOcx.cab TestOcx.ocx TestOcx.inf //CAB파일 생성

makecert -sv "TestOcx.pvk" -n "CN=TestOcx ActiveX" TestOcx.cer

cert2spc TestOcx.cer TestOcx.spc

signcode -v TestOcx.pvk -spc TestOcx.spc TestOcx.cab

setreg -q 1 TRUE

chktrust TestOcx.cab

(위 CAB파일 생성 및 인증은 모두 Success 과정을 확인하였습니다.)

해당 CAB파일을 웹프로젝트에 포함하고, object태그를 통해 배포합니다.

Site.Master 파일 내용

<script type="text/javascript">
function btnClick() {
var ICS = document.getElementById("ICS");
ICS.m_Tmp = 1;

}


</script>

Default.aspx 내용

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<input id="Button2" type="button" value="button" onclick="btnClick()" /><br />
<br />


<object id="ICS" border="2" classid="clsid:7DBB2674-1EA3-4BB3-A868-48C312083D27"
codebase="./TestOcx.cab#version=1,0,0,1" height="480" hspace="0" style="z-index: 1; position: inherit;
background-color: Black; border-style: outset; border-width: thin; left: 3px;
float: left; vertical-align: top;" vspace="0" width="680">
<%--<param name="LOGIN" value="" />--%>
</object>

</asp:Content>

위 Input 버튼 클릭 시 ocx에 속성에 값을 Set하여 메세지 박스가 출력되도록 스크립트를 구성합니다.

빌드가 완료된 웹사이트를 IIS에 게시합니다.

이렇게 게시된 웹사이트를 가상 웹서버가 아닌 웹브라우저를 통해 접근합니다. 하지만, 아래와 같이 표시됩니다.

ActiveX가 있어야할 자리에 X표시가 되어있습니다. 이 ActiveX는 추가기능 관리에서 보면 설치되어 있고, Test로 Winform이나 MFC 프로그램으로 이 ActiveX를 사용할 수 있도록 COM에 정상적으로 등록되어있습니다.

인터넷 익스플로어의 보안설정은 아래와 같이 설정되었고, ActiveX를 레지스트리에서 regsvr32 /u 를 이용하여 해제하고 정상적으로 unregist 된 후에 확인 하여도, 정상적으로 재설치가 되었습니다. 단지, 설치는 되었고, 설치된 ocx를 불러오지 못하고 있는것으로 판단됩니다.

등록된 ocx를 브라우저가 불러오지 못하는 이유가 무엇일까... 도무지 모르겠네요..

신기한 일은 Visual Stuido의 가상웹서버가 돌려주는 상황에서는 정상 동작 합니다.

 

도움 요청합니다..ㅠㅠ

 

 

반응형

댓글