Actualizar un control ActiveX existente

Visual Studio .NET 2003

Los controles ActiveX existentes (anteriormente conocidos como controles OLE) pueden utilizarse en Internet sin modificaciones. Sin embargo, puede resultar conveniente modificar los controles para mejorar el rendimiento. Al usar un control en una página Web hay que hacer consideraciones adicionales. El archivo .ocx y todos los archivos asociados deben hallarse en el equipo de destino o descargarse a través de Internet. Ello hace que el tamaño del código y el tiempo de descarga supongan un dato importante a tener en cuenta. Los diferentes archivos para descarga pueden empaquetarse en un archivo .cab firmado. Asimismo, se puede marcar el control como seguro para usar secuencias de comandos, así como para inicializar.

Este artículo trata de los siguientes temas:

También es posible añadir optimizaciones, como se describe en Controles ActiveX: optimización. Los monikers pueden utilizarse para descargar propiedades y objetos BLOB de manera asincrónica, como se describe en Controles ActiveX en Internet.

Empaquetar código para su descarga

Para obtener más información sobre este tema, vea el artículo de Knowledge Base "Packaging MFC Controls for Use Over the Internet" (Q167158). Encontrará los artículos de Knowledge Base en el CD-ROM de MSDN Library o en la dirección http://support.microsoft.com/support/.

La etiqueta CODEBASE

Los controles ActiveX se incrustan en las páginas Web mediante la etiqueta <OBJECT>. El parámetro CODEBASE de la etiqueta <OBJECT> especifica la ubicación desde la cual se descarga el control. CODEBASE puede apuntar a una serie de tipos de archivos diferentes.

Utilizar la etiqueta CODEBASE con un archivo OCX

CODEBASE="http://example.microsoft.com/mycontrol.ocx#version=4,70,0,1086"

Esta solución sólo descarga el archivo .ocx del control, y requiere que los archivos DLL auxiliares ya estén instalados en el equipo cliente. Esto funciona para Internet Explorer y los controles ActiveX MFC integrados en Visual C++, ya que Internet Explorer se entrega con los archivos DLL auxiliares para los controles de Visual C++. Si se utiliza otro explorador de Internet compatible con controles ActiveX para ver el control, esta solución no funcionará.

Utilizar la etiqueta CODEBASE con un archivo INF

CODEBASE="http://example.microsoft.com/trustme.inf"

Un archivo .inf controlará la instalación del archivo .ocx y sus archivos auxiliares. No se recomienda este método porque no es posible firmar un archivo .inf (vea Firmar código para obtener información sobre los punteros en la firma de código).

Utilizar la etiqueta CODEBASE con un archivo CAB

CODEBASE="http://example.microsoft.com/acontrol.cab#version=1,2,0,0"

Los archivos CAB son la forma recomendada para empaquetar controles ActiveX que utilizan MFC. Empaquetar un control ActiveX MFC en un archivo CAB permite incluir un archivo .inf en la instalación del control ActiveX y de los archivos DLL dependientes (como las DLL de MFC), si los hay. La utilización de un archivo .CAB comprime automáticamente el código para una descarga más rápida. Si utiliza un archivo .cab para la descarga de componentes, es más rápido firmar todo el archivo que hacerlo con cada uno de sus componentes por separado.

Crear archivos CAB

El kit de desarrollo de archivos CAB puede obtenerse en el sitio Web de MSDN, http://msdn.microsoft.com/workshop/management/cab/cabdl.asp (los vínculos Web pueden cambiar sin previo aviso). En él encontrará las herramientas necesarias para crear archivos CAB.

El archivo contenedor al que apunta CODEBASE debe contener el archivo .ocx del control ActiveX y un archivo .inf para controlar su instalación. El archivo contenedor se crea especificando el nombre de archivo del control y un archivo .inf. No incluya en él los archivos DLL dependientes que puedan existir ya en el sistema. Por ejemplo, los archivos DLL de MFC se empaquetan en un archivo contenedor separado y se hace referencia a ellos mediante el archivo .inf que controla la instalación.

Para obtener más detalles sobre cómo crear un archivo contenedor, vea Crear un archivo CAB.

El archivo INF

El siguiente ejemplo, spindial.inf, enumera los archivos auxiliares y la información de versión necesaria para el control Spindial de MFC. Observe que la ubicación de las DLL de MFC es un sitio Web de Microsoft. Microsoft proporciona y firma el archivo mfc42.cab.

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

La etiqueta <OBJECT>

El ejemplo siguiente muestra el uso de la etiqueta <OBJECT> para empaquetar el control de ejemplo Spindial de MFC.

<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>

En este caso, spindial.cab incluirá dos archivos: spindial.ocx y spindial.inf. El siguiente comando genera el archivo contenedor:

C:\CabDevKit\cabarc.exe -s 6144 N spindial.cab spindial.ocx spindial.inf 

El parámetro –s 6144 reserva espacio en el archivo contenedor para la firma de código.

La etiqueta de versión

Observe que la información #Version especificada en un archivo CAB se aplica al control especificado por el parámetro CLASSID de la etiqueta <OBJECT>.

Según la versión especificada, se puede forzar la descarga del control. Para obtener la especificación completa de la etiqueta OBJECT, incluido el parámetro CODEBASE, vea la referencia del consorcio W3C.

Marcar un control como seguro para usar secuencias de comandos e inicialización

Los controles ActiveX usados en páginas Web deben marcarse como seguros para usar en secuencias de comandos e inicializar si son, en realidad, seguros. Un control seguro no realiza entrada o salida en disco ni tiene acceso directo a la memoria o los registros de un equipo.

Los controles pueden marcarse como seguros para secuencias de comandos e inicializar mediante el Registro. Modifique DllRegisterServer para añadir entradas similares a la siguiente y marcar el control como seguro para las secuencias de comandos y su persistencia en el Registro. Un método alternativo es implementar IObjectSafety.

Definiremos identificadores GUID (Globally Unique Identifiers) para marcar el control como seguro para secuencias de comandos y persistencia. Los controles que pueden utilizarse con seguridad en secuencias de comandos contendrán una entrada del Registro similar a la siguiente:

HKEY_CLASSES_ROOT\Component Categories\{7DD95801-9882-11CF-9FA9-00AA006C42C4}

Los controles que pueden inicializarse con seguridad a partir de datos persistentes se marcan como seguros para persistencia con una entrada del Registro similar a ésta:

HKEY_CLASSES_ROOT\Component Categories\{7DD95802-9882-11CF-9FA9-00AA006C42C4}

Agregue entradas similares a la siguiente (utilizando el identificador de clase del control en lugar de {06889605-B8D0-101A-91F1-00608CEAD5B3}) para asociar las claves al identificador de clase siguiente:

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

Cuestiones relativas al uso de licencias

Si desea utilizar un control con licencia en una página Web, debe comprobar que el acuerdo de licencia permite su uso en Internet y crear un archivo de paquete de licencia (LPK).

Un control ActiveX con licencia no se cargará correctamente en una página Web, a menos que el equipo donde se ejecuta Internet Explorer tenga licencia para utilizar el control. Por ejemplo, si se genera un control con licencia mediante Visual C++, la página Web que lo utiliza se cargará correctamente en el equipo en que se generó el control, pero no en un equipo diferente a menos que se incluya la información de licencia.

Para utilizar un control ActiveX con licencia en Internet Explorer, debe revisarse el acuerdo de licencia del proveedor para comprobar que la licencia del control permite:

  • Su redistribución
  • Su utilización en Internet
  • El uso del parámetro Codebase

Para utilizar un control con licencia en una página HTML abierta en un equipo sin licencia, se debe generar un archivo de paquete de licencia (LPK). Éste contiene licencias de tiempo de ejecución para los controles con licencia que contiene la página HTML. Este archivo se genera a través de LPK_TOOL.EXE, que se entrega con ActiveX SDK. Para obtener más información, vea el sitio Web de MSDN, en http://msdn.microsoft.com.

Para crear un archivo LPK

  1. Ejecute LPK_TOOL.EXE en un equipo que posea licencia para usar el control.
  2. En el cuadro de diálogo License Package Authoring Tool, el cuadro de lista Available Controls, seleccione todos los controles ActiveX con licencia que se utilizarán en la página HTML y haga clic en Add.
  3. Haga clic en Save & Exit para salir y guardar los cambios y escriba un nombre para el archivo LPK. Con ello se creará el archivo LPK y se cerrará la aplicación.

Para incrustar un control con licencia en una página HTML

  1. Edite la página HTML. En la página HTML, inserte una etiqueta <OBJECT> para el objeto License Manager antes de cualquier otra etiqueta <OBJECT>. License Manager (Administrador de licencias) es un control ActiveX que se instala con Internet Explorer. El id. de clase se muestra a continuación. Establezca la propiedad LPKPath del objeto License Manager en la ruta y nombre del archivo LPK. Sólo puede haber un archivo LPK por página HTML.
    <OBJECT CLASSID = "clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
        <PARAM NAME="LPKPath" VALUE="relative URL to .LPK file">
    </OBJECT>
    
  2. Inserte la etiqueta <OBJECT> del control con licencia después de la etiqueta correspondiente a License Manager.

    Por ejemplo, a continuación se muestra una página HTML que muestra el control Masked Edit de Microsoft. El primer id. de clase corresponde al control License Manager, y el segundo, al control Masked Edit. Cambie las etiquetas para que apunten a la ruta relativa del archivo .lpk creado anteriormente y, a continuación, añada una etiqueta <OBJECT> que incluya el id. de clase correspondiente al control.

  3. Inserte el atributo <EMBED> del archivo LPK en caso de que utilice el complemento ActiveX NCompass.

    Si su control puede verse en otros exploradores compatibles con la tecnología activa, como por ejemplo Netscape mediante el complemento ActiveX NCompass, debe agregar la sintaxis <EMBED> según se muestra a continuación.

    <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>
    

Para obtener más información sobre las licencias de controles, vea Controles ActiveX: otorgar licencia a un control ActiveX.

Firmar código

La firma de código está diseñada para identificar su origen y garantizar que éste no ha cambiado desde que se firmó. Dependiendo de la configuración de seguridad del explorador, es posible advertir a los usuarios antes de descargar el código. Los usuarios pueden elegir confiar en ciertos propietarios o compañías emisoras de certificados, en cuyo caso el código firmado por éstos se descarga sin advertencia previa. Se firma el código digitalmente para prevenir su manipulación.

Asegúrese de que la versión final del código que cree está firmada, de modo que se pueda descargar automáticamente el control sin mostrar mensajes de advertencia sobre la confianza del usuario. Para obtener más detalles sobre la firma de código, consulte la documentación de Authenticode™ en ActiveX SDK y vea Firmar un archivo CAB.

Según la configuración de confianza y el nivel de seguridad del explorador, puede mostrarse un certificado para identificar a la persona o compañía firmantes. Si el nivel de seguridad es "ninguno" o se confía en el emisor del certificado que acompaña al control firmado, no se muestra ningún certificado. Vea Niveles de seguridad y comportamiento de los controles en el explorador Internet Explorer para obtener más detalles sobre la forma en que la configuración de seguridad del explorador determina si se descargan los controles y se muestra un certificado.

La firma digital garantiza que el código no ha sufrido modificaciones desde que se firmó. Se genera un valor hash del código y se incrusta en el certificado. Este valor hash se compara más tarde con un valor hash del código, generado después de descargarse el código pero antes de ejecutarlo. Compañías como VeriSign proporcionan pares de clave pública y privada requeridos para firmar código. El ActiveX SDK incluye MakeCert, una herramienta para crear certificados de prueba, y dos archivos de registro, wvtston.reg y wvtstoff.reg, para especificar si el explorador debe reconocer o no los certificados de prueba como válidos.

Administrar la paleta

Los contenedores determinan la paleta y la ponen a disposición como propiedad de ambiente, DISPID_AMBIENT_PALETTE. Un contenedor (por ejemplo, Microsoft Internet Explorer) elige una paleta utilizada por todos los controles ActiveX de una página para determinar su propia paleta. Esto impide el parpadeo de pantalla y presenta un aspecto consistente.

Los controles pueden reemplazar a OnAmbientPropertyChange para controlar la notificación de los cambios a la paleta.

Un control puede reemplazar OnGetColorSet para devolver un conjunto de colores requerido a la hora de dibujar la paleta. Los contenedores pueden, igualmente, usar el valor devuelto para determinar si un control reconoce la paleta.

Según las directrices de programación OCX 96, un control siempre debe procesar su paleta en segundo plano.

Los contenedores más antiguos que no usan la propiedad de paleta ambiente enviarán mensajes del tipo WM_QUERYNEWPALETTE y WM_PALETTECHANGED. Un control puede reemplazar a OnQueryNewPalette y OnPaletteChanged para controlar dichos mensajes.

Niveles de seguridad y comportamiento de los controles en el explorador Internet Explorer

Un explorador tiene diferentes opciones de nivel de seguridad, configurables por el usuario. Debido a que las páginas Web pueden incluir contenido activo, potencialmente capaz de dañar el equipo de un usuario, los exploradores permiten al usuario seleccionar opciones que definen el nivel de seguridad. Dependiendo de la forma en que un explorador implementa los niveles de seguridad, puede que un control no se descargue en absoluto, o que muestre un certificado o mensaje de advertencia para permitir elegir al usuario en tiempo de ejecución si descargará o no el control. A continuación se detalla el comportamiento de los controles ActiveX en niveles de seguridad alta, media y baja de Internet Explorer.

Modo de seguridad alta

  • No se descargan los controles sin firmar.
  • Los controles firmados mostrarán un certificado si no son de confianza (el usuario puede seleccionar una opción para confiar siempre en el código de este certificado a partir de este momento).
  • Sólo los controles marcados como seguros tendrán datos persistentes y/o podrán usarse en secuencias de comandos.

Modo de seguridad media

  • Los controles sin firmar muestran un mensaje de advertencia antes de descargarse.
  • Los controles firmados muestran un certificado si no son de confianza.
  • Aquellos controles no marcados como seguros mostrarán un mensaje de advertencia.

Modo de seguridad baja

  • Los controles se descargan sin ningún tipo de advertencia.
  • Igualmente, el procesamiento de secuencias de comandos y la persistencia tienen lugar sin advertencia alguna.

Vea también

Tareas de programación para Internet con MFC | Fundamentos de la programación para Internet con MFC | Controles ActiveX de MFC: otorgar licencia a un control ActiveX

Mostrar: