티스토리 뷰

Network/Web

기존 ActiveX Control 업그레이드

알 수 없는 사용자 2008. 2. 15. 03:44

기존 ActiveX 컨트롤(이전의 OLE 컨트롤)을 수정하지 않고 인터넷에서 사용할 수도 있으나 컨트롤을 수정하여 성능을 개선할 수도 있습니다. 웹 페이지에서 컨트롤을 사용할 때 추가 고려 사항이 있습니다. .ocx 파일과 모든 지원 파일은 대상 컴퓨터에 있거나 인터넷을 통해 다운로드해야 합니다. 따라서 코드 크기와 다운로드 시간이 중요한 고려 사항이 됩니다. 다운로드 항목을 서명된 .cab 파일로 패키지할 수 있습니다. 또한 컨트롤이 스크립트 및 초기화에 안전하다고 표시할 수 있습니다.

이 문서에서는 다음 내용에 대해 설명합니다.

또한 ActiveX 컨트롤: 최적화에서 설명하는 것과 같이 최적화를 추가할 수 있습니다. 인터넷의 ActiveX 컨트롤에서 설명하는 것과 같이 속성과 대형 BLOB를 비동기로 다운로드하는 데 모니커를 사용할 수 있습니다.

다운로드를 위한 코드 패키지로 만들기

이 주제에 대한 자세한 내용은 기술 자료 문서 "Packaging MFC Controls for Use Over the Internet"(Q167158)을 참조하십시오. 기술 자료 문서는 MSDN Library CD-ROM이나 http://support.microsoft.com/support에 있습니다.

CODEBASE 태그

ActiveX 컨트롤은 <OBJECT> 태그를 사용하여 웹 페이지에 포함됩니다. <OBJECT> 태그의 CODEBASE 매개 변수에 다운로드 받을 컨트롤이 있는 위치를 지정합니다. CODEBASE는 다양한 파일 형식을 가리킬 수 있습니다.

CODEBASE 태그에 OCX 파일 사용
CODEBASE="http://example.microsoft.com/mycontrol.ocx#version=4,70,0,1086"

이 솔루션은 컨트롤의 .ocx 파일만 다운로드하며 모든 지원 DLL은 이미 클라이언트 컴퓨터에 설치되어 있어야 합니다. Internet Explorer는 Visual C++ 컨트롤을 위한 지원 DLL과 함께 배포되기 때문에 이 솔루션은 Internet Explorer와 Visual C++로 빌드된 MFC ActiveX 컨트롤에서 동작합니다. ActiveX 컨트롤을 사용할 수 있는 또 다른 인터넷 브라우저를 사용하여 이 컨트롤을 보는 경우 이 솔루션은 동작하지 않습니다.

CODEBASE 태그에 INF 파일 사용
CODEBASE="http://example.microsoft.com/trustme.inf"

.inf 파일은 .ocx와 그 지원 파일 설치를 제어합니다. .inf 파일은 서명할 수 없기 때문에 이 방법은 권장하지 않습니다(코드 서명에 대해서는 코드 서명 참조).

CODEBASE 태그에 CAB 파일 사용
CODEBASE="http://example.microsoft.com/acontrol.cab#version=1,2,0,0"

CAB 파일은 MFC를 사용하여 ActiveX 컨트롤을 패키지하는 권장 방법입니다. CAB 파일에서 MFC ActiveX 컨트롤을 패키지하면 ActiveX 컨트롤 및 MFC DLL과 같은 모든 종속 DLL의 컨트롤 설치에 .inf 파일이 포함될 수 있습니다. CAB 파일을 사용하면 자동으로 코드가 압축되어 좀더 빨리 다운로드할 수 있습니다. 구성 요소 다운로드에 .cab 파일을 사용하는 경우 전체 .cab 파일에 서명하는 것이 각 개별 구성 요소에 서명하는 것보다 빠릅니다.

CAB 파일 만들기

MSDN 웹 사이트(http://msdn.microsoft.com/workshop/management/cab/cabdl.asp)에서 CABinet 개발 키트를 얻을 수 있습니다. 웹 링크는 예고 없이 변경될 수 있습니다. 이 키트에서 CAB 파일 구성에 필요한 도구를 찾을 수 있습니다.

CODEBASE가 가리키는 CAB 파일은 ActiveX 컨트롤에 대한 .ocx 파일과 설치 제어를 위한 .inf 파일을 포함해야 합니다. 컨트롤 파일과 .inf 파일의 이름을 지정하여 CAB 파일을 만듭니다. 이 CAB 파일에는 시스템에 이미 있을 수 있는 종속 DLL을 포함시키지 마십시오. 예를 들어, MFC DLL은 별도의 CAB 파일로 패키지하고 제어 .inf 파일에서 참조합니다.

CAB 파일을 만드는 방법에 대한 자세한 내용은 CAB 파일 만들기를 참조하십시오.

INF 파일

다음 예제의 spindial.inf에는 MFC Spindial 컨트롤에 필요한 지원 파일과 버전 정보가 나열되어 있습니다. MFC DLL은 Microsoft 웹 사이트에 있습니다. mfc42.cab은 Microsoft에서 서명하여 제공합니다.

Contents of spindial.inf:
[mfc42installer]
file-win32-x86=http://activex.microsoft.com/controls/vc/mfc42.cab
[Olepro32.dll] - FileVersion=5,0,4261,0
[Mfc42.dll] - FileVersion=6,0,8168,0
[Msvcrt.dll] - FileVersion=6,0,8168,0

<OBJECT> 태그

다음 예제는 <OBJECT> 태그를 사용하여 MFC Spindial 샘플 컨트롤을 패키지하는 과정을 보여 줍니다.

<OBJECT ID="Spindial1" WIDTH=100 HEIGHT=51
CLASSID="CLSID:06889605-B8D0-101A-91F1-00608CEAD5B3"
CODEBASE="http://example.microsoft.com/spindial.cab#Version=1,0,0,001">
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="2646">
<PARAM NAME="_ExtentY" VALUE="1323">
<PARAM NAME="_StockProps" VALUE="0">
<PARAM NAME="NeedlePosition" VALUE="2">
</OBJECT>

이 경우, spindial.cab은 spindial.ocx 파일과 spindial.inf 파일을 포함합니다. 다음 명령으로 CAB 파일을 빌드합니다.

C:CabDevKitcabarc.exe -s 6144 N spindial.cab spindial.ocx spindial.inf 

?s 6144 매개 변수는 캐비닛에 코드 서명을 위한 공간을 예약합니다.

버전 태그

여기에서 CAB 파일에 지정된 #Version 정보는 <OBJECT> 태그의 CLASSID 매개 변수에 지정된 컨트롤에 적용됩니다.

지정된 버전에 따라 컨트롤을 다운로드합니다. CODEBASE 매개 변수를 포함한 OBJECT 태그의 완전한 사양에 대해서는 W3C 참조를 참조하십시오.

스크립트 및 초기화에 안전한 컨트롤 표시


웹 페이지에서 사용하는 ActiveX 컨트롤은 실제로 안전한 경우에 스크립트 및 초기화에 안전하다고 표시되어야 합니다. 안전한 컨트롤은 디스크 입출력을 수행하거나, 컴퓨터의 메모리 또는 레지스터에 직접 액세스하지 않습니다.

레지스트리를 사용하여 컨트롤이 스크립트와 초기화에 안전하다고 표시할 수 있습니다. DllRegisterServer를 수정하여 다음과 비슷한 엔트리를 추가함으로써 컨트롤이 스크립트와 레지스트리의 지속성에 안전하다고 표시합니다. 다른 방법은 IObjectSafety를 구현하는 것입니다.

컨트롤을 위한 GUID(Globally Unique Identifiers)를 정의하여 컨트롤이 스크립트와 지속성에 안전하다고 표시합니다. 안전하게 스크립팅할 수 있는 컨트롤은 다음과 비슷한 레지스트리 항목을 포함합니다.

HKEY_CLASSES_ROOTComponent Categories{7DD95801-9882-11CF-9FA9-00AA006C42C4}

지속적 데이터에서 안전하게 초기화될 수 있는 컨트롤은 다음과 비슷한 레지스트리 항목으로 지속성에 안전하다고 표시합니다.

HKEY_CLASSES_ROOTComponent Categories{7DD95802-9882-11CF-9FA9-00AA006C42C4}

다음과 비슷한 엔트리({06889605-B8D0-101A-91F1-00608CEAD5B3}을 사용자 컨트롤의 클래스 ID로 변경하면 됨)를 추가하여 해당 클래스 ID와 키를 연결합니다.

HKEY_CLASSES_ROOTCLSID{06889605-B8D0-101A-91F1-00608CEAD5B3}Implemented Categories{7DD95801-9882-11CF-9FA9-00AA006C42C4} 
HKEY_CLASSES_ROOTCLSID{06889605-B8D0-101A-91F1-00608CEAD5B3}Implemented Categories{7DD95802-9882-11CF-9FA9-00AA006C42C4}

라이센스 문제


웹 페이지에서 라이센스가 있는 컨트롤을 사용하려면 해당 컨트롤을 인터넷에서 사용할 수 있는지 여부를 사용권 계약에서 확인한 다음 LPK(라이센스 패키지) 파일을 만들어야 합니다.

Internet Explorer를 실행하는 컴퓨터에 해당 컨트롤을 사용할 수 있는 라이센스가 없는 경우 라이센스가 있는 ActiveX 컨트롤은 HTML 페이지에서 올바르게 로드되지 않습니다. 예를 들어, 라이센스가 있는 컨트롤을 Visual C++를 사용하여 빌드했으면 해당 컨트롤을 사용하는 HTML 페이지는 컨트롤을 빌드한 컴퓨터에서는 올바르게 로드되지만 라이센스 정보가 없는 다른 컴퓨터에서는 로드되지 않습니다.

Internet Explorer에서 라이센스가 있는 ActiveX 컨트롤을 사용하려면 공급업체의 사용권 계약을 확인하여 컨트롤 라이센스에 다음 사용이 허가되어 있는지 확인해야 합니다.


  • 재배포
  • 인터넷상의 컨트롤 사용
  • Codebase 매개 변수의 사용

라이센스가 없는 컴퓨터의 HTML 페이지에서 라이센스가 있는 컨트롤을 사용하려면 LPK(라이센스 패키지) 파일을 생성해야 합니다. LPK 파일은 HTML 페이지의 라이센스가 있는 컨트롤을 위한 런타임 라이센스를 포함합니다. 이 파일은 ActiveX SDK와 함께 공급되는 LPK_TOOL.EXE를 사용하여 생성합니다. 자세한 내용은 MSDN 웹 사이트(http://msdn.microsoft.com)를 참조하십시오.

LPK 파일을 만들려면


  1. 컨트롤에 대한 라이센스가 있는 컴퓨터에서 LPK_TOOL.EXE를 실행합니다.
  2. License Package Authoring Tool 대화 상자의 Available Controls 목록 상자에서 HTML 페이지에 사용할 각 라이센스가 있는 ActiveX 컨트롤을 선택하고 Add를 클릭합니다.
  3. Save & Exit을 클릭하고 LPK 파일 이름을 입력합니다. 이렇게 하면 LPK 파일이 만들어지고 응용 프로그램이 종료됩니다.

HTML 페이지에 라이센스가 있는 컨트롤을 포함시키려면


  1. HTML 페이지를 편집합니다. HTML 페이지에 다른 <OBJECT> 태그보다 먼저 라이센스 관리자 개체를 위한 <OBJECT> 태그를 삽입합니다. 라이센스 관리자는 Internet Explorer와 함께 설치되는 ActiveX 컨트롤입니다. 이 컨트롤의 클래스 ID는 다음에 표시되어 있습니다. 라이센스 관리자 개체의 LPKPath 속성을 LPK 파일의 경로 및 이름으로 설정합니다. 각 HTML 페이지에는 하나의 LPK 파일만 있어야 합니다.
    <OBJECT CLASSID = "clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
    <PARAM NAME="LPKPath" VALUE="relative URL to .LPK file">
    </OBJECT>

  2. 라이센스 관리자 태그 다음에 라이센스가 있는 컨트롤의 <OBJECT> 태그를 삽입합니다.

    예를 들어, Microsoft MaskedEdit 컨트롤을 표시하는 HTML 페이지가 다음에 나와 있습니다. 첫째 클래스 ID는 라이센스 관리자를 위한 것이며 둘째 클래스 ID는 MaskedEdit 컨트롤을 위한 것입니다. 앞서 만든 .lpk 파일의 상대 경로를 가리키도록 태그를 변경하고 컨트롤의 클래스 ID를 포함하는 개체 태그를 추가합니다.


  3. NCompass ActiveX 플러그 인을 사용하는 경우 LPK 파일을 위한 <EMBED> 특성을 삽입합니다.

    NCompass ActiveX 플러그 인을 사용하는 Netscape 등의 다른 액티브 사용 가능 브라우저에서 컨트롤을 볼 수 있는 경우 다음과 같이 <EMBED> 구문을 추가해야 합니다.

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

    <EMBED SRC = "maskedit.LPK">

    </OBJECT>
    <OBJECT CLASSID="clsid:C932BA85-4374-101B-A56C-00AA003668DC" WIDTH=100 HEIGHT=25>
    </OBJECT>

컨트롤 라이센스에 대한 자세한 내용은 MFC ActiveX 컨트롤: ActiveX 컨트롤 라이센스를 참조하십시오.

코드 서명


코드 서명은 코드의 소스를 식별하고 코드가 서명된 이후로 변경되지 않았다는 것을 보장하도록 디자인되었습니다. 브라우저의 보안 설정에 따라 코드를 다운로드하기 전에 경고 메시지가 표시될 수도 있습니다. 특정 인증서 소유자 또는 회사를 신뢰한다고 선택하는 경우 서명한 코드는 경고 없이 다운로드됩니다. 코드는 데이터 훼손을 방지하기 위해 디지털로 서명됩니다.

컨트롤이 신뢰 경고 메시지를 표시하지 않고 자동으로 다운로드될 수 있도록 최종 코드를 서명했는지 확인합니다. 코드 서명 방법에 대한 자세한 내용은 ActiveX SDK의 Authenticode™에 대한 설명서와 CAB 파일 서명을 참조하십시오.

신뢰 및 브라우저 보안 수준 설정에 따라 서명한 개인이나 회사를 식별하도록 인증서가 표시될 수 있습니다. 보안 수준이 없음으로 설정되거나 서명된 컨트롤의 인증서 소유자를 신뢰하면 인증서가 표시되지 않습니다. 브라우저의 보안 설정이 컨트롤 다운로드와 인증서 표시 여부를 결정하는 방법에 대한 자세한 내용은 Internet Explorer 브라우저 보안 수준 및 컨트롤 동작을 참조하십시오.

디지털 서명은 코드가 서명된 이후로 변경되지 않았음을 보장합니다. 코드의 해시가 인증서에 적용되고 포함됩니다. 이 해시는 나중에 코드를 다운로드한 다음 실행하기 전에 코드에 적용된 해시와 비교됩니다. Verisign과 같은 회사에서 코드 서명에 필요한 개인 키 및 공개 키를 제공합니다. ActiveX SDK에는 테스트 인증서를 만드는 유틸리티인 MakeCert와 브라우저에서 테스트 인증서를 유효한 것으로 인식하도록 할 것인지를 지정하기 위한 두 개의 레지스트리 파일(wvtston.reg 및 wvtstoff.reg)이 포함되어 있습니다.

색상표 관리


컨테이너에서 색상표를 확인하여 앰비언트 속성 DISPID_AMBIENT_PALETTE를 사용할 수 있게 합니다. Microsoft Internet Explorer와 같은 컨테이너는 페이지의 모든 ActiveX 컨트롤이 사용하는 색상표를 선택하여 고유한 색상표를 결정합니다. 이렇게 하면 깜빡임을 없애고 일관된 모양을 나타낼 수 있습니다.

컨트롤은 OnAmbientPropertyChange를 재정의하여 색상표에 대한 변경 알림을 처리합니다.

컨트롤은 OnGetColorSet을 재정의하여 색상표를 그리기 위한 색 집합을 반환할 수 있습니다. 컨테이너는 반환 값을 사용하여 컨트롤이 색상표를 인식하는지 결정합니다.

OCX 96 지침에 따르면 컨트롤은 항상 백그라운드의 색상표를 인식해야 합니다.

앰비언트 색상표를 사용하지 않는 구형 컨테이너는 WM_QUERYNEWPALETTEWM_PALETTECHANGED 메시지를 보냅니다. 컨트롤은 OnQueryNewPaletteOnPaletteChanged를 재정의하여 이러한 메시지를 처리할 수 있습니다.

Internet Explorer 브라우저 보안 수준 및 컨트롤 동작


브라우저에는 사용자가 구성할 수 있는 보안 수준 옵션이 있습니다. 웹 페이지에 사용자 컴퓨터를 손상시킬 수 있는 액티브 컨텐트가 포함될 수 있기 때문에 사용자는 브라우저의 보안 수준 옵션을 선택할 수 있습니다. 브라우저에서 보안 수준을 구현하는 방법에 따라 컨트롤을 전혀 다운로드하지 않거나 컨트롤의 다운로드 여부를 런타임에 선택할 수 있도록 인증서 또는 경고 메시지가 표시됩니다. 다음은 Internet Explorer의 높음, 보통 및 낮음 보안 수준에 따른 ActiveX 컨트롤의 동작입니다.

높음 보안 모드


  • 서명되지 않은 컨트롤은 다운로드하지 않습니다.
  • 서명된 컨트롤은 신뢰할 수 없는 경우에 인증서를 표시합니다. 그러면 사용자는 해당 인증서 소유자의 코드를 항상 신뢰하도록 하는 옵션을 선택할 수 있습니다.
  • 안전하다고 표시된 컨트롤만 지속적 데이터 보유 및 스크립팅할 수 있습니다.

보통 보안 모드


  • 서명되지 않은 컨트롤은 다운로드하기 전에 경고를 표시합니다.
  • 서명된 컨트롤은 신뢰할 수 없는 경우에 인증서를 표시합니다.
  • 안전하다고 표시되지 않은 컨트롤에는 경고를 표시합니다.

낮음 보안 모드


  • 경고 없이 컨트롤을 다운로드합니다.
  • 경고 없이 스크립트와 지속성이 발생합니다.