QnA
사용언어 (칠해주세요) => (C#,VB) |
사용툴 (VS) : VS2010 |
운영체제 (OS) : Win7 64bit |
상세언어(칠해주세요.) => 1) ASP.NET, 2) ASP.NET MVC, 3) ASP.NET AJAX |
안녕하세요 유쾌한 냐옹이입니다. 현재 제 프로젝트에서 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/xxxxxxjavascript">
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" [안내]태그제한으로등록되지않습니다-xx[안내]태그제한으로등록되지않습니다-xx[안내]태그제한으로등록되지않습니다-xxonclick="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의 가상웹서버가 돌려주는 상황에서는 정상 동작 합니다.

도움 요청합니다..ㅠㅠ
첫댓글 서명안된 ActiveX 사용으로 바꿔보심 안될까요? localhost는 어드민계정이라서 iisuser와 레베루가 다릅니다
달의문 님 감사드립니다. 해결 했어요. 인터넷 옵션 -> 보안 탭 -> 신뢰할 수 있는 사이트에 해당 사이트 추가
요 방법으로 해결 했습니다.
서명 안된 ActiveX 확인 or 사용으로 해봤었지만, 잘 안되었었어요,, 음... 크로스 도메인 의 정의가 제대로 인지 되진 않지만,, 이것의 문제였더라구요... 감사드립니다.
굿이네요^^ 일반유져가 사용하게끔 하려면 인증도 받으셔야겠네요. 신뢰사이트추가는 진짜신뢰사이트아니라면...;;^^;;