Compartir por


Actualizar un control ActiveX existente

Los controles ActiveX existentes (anteriormente controles OLE) se pueden usar en Internet sin modificaciones. Sin embargo, es posible que desee modificar los controles para mejorar su rendimiento.

Importante

ActiveX es una tecnología heredada que no se debe usar para el nuevo desarrollo. Para más información sobre las tecnologías modernas que reemplazan a ActiveX, vea Controles ActiveX. La compatibilidad con los controles ActiveX está en desuso en versiones posteriores de Internet Explorer y no es compatible con exploradores modernos. Microsoft ya no proporciona componentes ActiveX accesibles desde la web.

Al usar el control en una página web, hay consideraciones adicionales. El archivo .ocx y todos los archivos auxiliares deben estar en el equipo de destino o descargarse a través de Internet. Esto hace que el tamaño del código y el tiempo de descarga sea una consideración importante. Las descargas se pueden empaquetar en un archivo de .cab firmado. Puede marcar el control como seguro para el scripting y como seguro para la inicialización.

En este artículo se tratan los temas siguientes:

También puede agregar optimizaciones, como se describe en Controles ActiveX: Optimización. Monikers se puede usar para descargar propiedades y blobs de gran tamaño de forma asincrónica, como se describe en Controles ActiveX en Internet.

Empaquetar código para descargar

Para obtener más información sobre este tema, vea Empaquetado de controles ActiveX.

Etiqueta CODEBASE

Los controles ActiveX se insertan en páginas web mediante la etiqueta <OBJECT>. El parámetro CODEBASE de la etiqueta <OBJECT> especifica la ubicación desde la que se va a descargar el control. CODEBASE puede apuntar a varios tipos de archivo diferentes correctamente.

Usar la etiqueta CODEBASE con un archivo OCX

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

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

Usar la etiqueta CODEBASE con un archivo INF

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

Un archivo .inf controlará la instalación de un archivo .ocx y sus archivos auxiliares. Este método no se recomienda porque no es posible firmar un archivo .inf (consulte El código de firma para punteros en la firma de código).

Usar la etiqueta CODEBASE con un archivo CAB

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

Los archivos del gabinete son la manera recomendada de empaquetar controles ActiveX que usan MFC. El empaquetado de un control ActiveX MFC en un archivo de gabinete permite incluir un archivo .inf para controlar la instalación del control ActiveX y los archivos DLL dependientes (como los archivos DLL MFC). El uso de un archivo CAB comprime automáticamente el código para una descarga más rápida. Si usa un archivo .cab para la descarga de componentes, es más rápido firmar todo el archivo .cab que cada componente individual.

Crear archivos CAB

Las herramientas para crear archivos de gabinete ahora forman parte del SDK de Windows.

El archivo de archivador al CODEBASE que apunta debe contener el archivo .ocx para el control ActiveX y un archivo .inf para controlar su instalación. Para crear el archivo de archivador, especifique el nombre del archivo de control y un archivo .inf. No incluya archivos DLL dependientes que ya existan en el sistema en este archivo de gabinete. Por ejemplo, los archivos DLL de MFC se empaquetan en un archivo de gabinete independiente y se hace referencia a él mediante el archivo .inf que controla.

Para obtener más información sobre cómo crear un archivo CAB, consulte Creación de un archivo CAB.

El archivo INF

En el ejemplo siguiente, spindial.inf, se enumeran los archivos auxiliares y la información de versión necesaria para el control spindial de MFC. Microsoft proporciona y firma el mfc42.cab.

Contents of spindial.inf:
[mfc42installer]
file-win32-x86=http://example.contoso.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

Etiqueta <OBJECT>

En el ejemplo siguiente se 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.contoso.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 contendrá dos archivos, spindial.ocx y spindial.inf. El siguiente comando compilará el archivo de gabinete:

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

El parámetro -s 6144 reserva espacio en el gabinete para la firma de código.

Etiqueta de versión

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

Dependiendo de la versión especificada, puede forzar la descarga del control. Para obtener especificaciones completas de la etiqueta OBJECT, incluido el parámetro CODEBASE, vea la referencia de W3C.

Marcar un control seguro para scripting e inicializar

Los controles ActiveX usados en las páginas web deben marcarse como seguros para scripting y seguros para inicializarse si son seguros de hecho. Un control seguro no realizará la E/S de disco ni accederá a la memoria ni a los registros de una máquina directamente.

Los controles se pueden marcar como seguros para el scripting y para la inicialización a través del registro. Modifique DllRegisterServer para agregar entradas similares a las siguientes para marcar el control como seguro para el scripting y la persistencia en el registro. Un método alternativo es implementar IObjectSafety.

Definirá GUID (identificadores únicos globales) para que el control lo marque seguro para el scripting y para la persistencia. Los controles que se pueden crear scripts de forma segura contendrán una entrada del Registro similar a la siguiente:

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

Los controles que se pueden inicializar de forma segura a partir de datos persistentes se marcan como seguros para la persistencia con una entrada del Registro similar a la siguiente:

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

Agregue entradas similares a las siguientes (sustituyendo el identificador de clase del control en lugar de {06889605-B8D0-101A-91F1-00608CEAD5B3}) para asociar las claves con el 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}

Incidencias relativas a las licencias

Si desea usar un control con licencia en una página web, debe comprobar que el contrato de licencia permite su uso en Internet y crear un archivo de paquete de licencia (LPK) para él.

Un control con licencia de ActiveX no se cargará correctamente en una página HTML si el equipo que ejecuta Internet Explorer no tiene licencia para usar el control. Por ejemplo, si un control con licencia se creó con Visual C++, la página HTML que usa el control se cargará correctamente en el equipo donde se creó el control, pero no se cargará en otro equipo a menos que se incluya información de licencia.

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

  • Redistribución

  • Uso del control en Internet

  • Uso del parámetro Codebase

Para usar un control con licencia en una página HTML en un equipo sin licencia, debe generar un archivo de paquete de licencia (LPK). El archivo LPK contiene licencias en tiempo de ejecución para los controles con licencia en la página HTML. Este archivo se genera a través de LPK_TOOL.EXE que viene con el SDK de ActiveX.

Para crear un archivo LPK

  1. Ejecute LPK_TOOL.EXE en un equipo con licencia para usar el control.

  2. En el cuadro de diálogo Herramienta de creación de paquetes de licencias, en el cuadro de lista Controles disponibles, seleccione cada control ActiveX con licencia que se usará en la página HTML y haga clic en Agregar.

  3. Haga clic en Guardar y salir y escriba un nombre para el archivo LPK. Esto creará el archivo LPK y cerrará la aplicación.

Para insertar 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>. El Administrador de licencias es un control ActiveX que se instala con Internet Explorer. Su identificador de clase se muestra a continuación. Establezca la propiedad LPKPath del objeto License Manager en la ruta de acceso y el nombre del archivo LPK. Solo puede tener 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>
  1. Inserte la <etiqueta OBJECT> para el control con licencia después de la etiqueta Administrador de licencias.

    Por ejemplo, a continuación se muestra una página HTML que muestra el control Edición enmascarada de Microsoft. El identificador de primera clase es para el control License Manager, el segundo identificador de clase es para el control Masked Edit. Cambie las etiquetas para que apunten a la ruta de acceso relativa del archivo .lpk que creó anteriormente y agregue una etiqueta de objeto, incluido el identificador de clase del control.

  2. Inserte el atributo <EMBED> para el archivo LPK, si usa el complemento ActiveX NCompass.

    Si el control puede verse en otros exploradores habilitados para Active (por ejemplo, Netscape mediante el complemento ActiveX de NCompass), debe agregar la <sintaxis EMBED> como 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 control, vea Controles ActiveX: Licencias de un control ActiveX.

Código de firma

La firma de código está diseñada para identificar el origen del código y para garantizar que el código no ha cambiado desde que se firmó. En función de la configuración de seguridad del explorador, es posible que se avise a los usuarios antes de descargar el código. Los usuarios pueden optar por confiar en determinados propietarios de certificados o empresas, en cuyo caso el código firmado por esos de confianza se descargará sin previo aviso. El código está firmado digitalmente para evitar alteraciones.

Asegúrese de que el código final está firmado para que el control se pueda descargar automáticamente sin mostrar mensajes de advertencia de confianza. Para más información sobre cómo firmar código, consulte la documentación sobre Authenticode en el SDK de ActiveX y consulte Firma de un archivo CAB.

En función de la configuración de nivel de seguridad del explorador y de confianza, se puede mostrar un certificado para identificar a la persona o empresa de firma. Si el nivel de seguridad no es ninguno o si el propietario del certificado del control firmado es de confianza, no se mostrará un certificado. Consulte Niveles de seguridad y comportamiento de control del explorador de Internet Explorer para obtener más información sobre cómo la configuración de seguridad del explorador determinará si el control se descarga y se muestra un certificado.

La firma digital garantiza que el código no ha cambiado desde que se ha firmado. Se toma un hash del código y se inserta en el certificado. Este hash se compara más adelante con un hash del código tomado después de descargar el código, pero antes de que se ejecute. Las empresas como Verisign pueden proporcionar claves públicas y privadas necesarias para firmar código. El SDK de ActiveX se incluye con MakeCert, una utilidad para crear certificados de prueba.

Administración de la paleta

Los contenedores determinan la paleta y hacen que esté disponible como una propiedad ambiente, DISPID_AMBIENT_PALETTE. Un contenedor (por ejemplo, Internet Explorer) elige una paleta que usan todos los controles ActiveX de una página para determinar su propia paleta. Esto evita que la pantalla parpadee y presenta una apariencia coherente.

Un control puede invalidar OnAmbientPropertyChange para controlar la notificación de cambios en la paleta.

Un control puede invalidar OnGetColorSet para devolver un conjunto de colores para dibujar la paleta. Los contenedores usan el valor devuelto para determinar si un control es compatible con la paleta.

En las directrices de OCX 96, un control siempre debe darse cuenta de su paleta en segundo plano.

Los contenedores antiguos que no usan la propiedad de paleta ambiente enviarán WM_QUERYNEWPALETTE y WM_PALETTECHANGED mensajes. Un control puede invalidar OnQueryNewPalette y OnPaletteChanged controlar estos mensajes.

Niveles de seguridad y comportamiento de control del explorador internet Explorer

Un explorador tiene opciones para el nivel de seguridad, configurable por el usuario. Dado que las páginas web pueden contener contenido activo que podría dañar el equipo de un usuario, los exploradores permiten al usuario seleccionar opciones para el nivel de seguridad. Dependiendo del modo en que un explorador implemente los niveles de seguridad, es posible que un control no se descargue en absoluto, o que muestre un certificado o un mensaje de advertencia para permitir al usuario elegir en tiempo de ejecución si desea descargar el control o no. A continuación se muestra el comportamiento de los controles ActiveX en niveles de seguridad altos, medianos y bajos en Internet Explorer.

Modo de alta seguridad

  • Los controles sin firmar no se descargarán.

  • Los controles firmados mostrarán un certificado si no es de confianza (un usuario puede elegir una opción para confiar siempre en el código de este propietario del certificado desde ahora).

  • Solo los controles marcados como seguros tendrán datos persistentes o se pueden crear scripts.

Modo de seguridad media

  • Los controles sin firmar mostrarán una advertencia antes de la descarga.

  • Los controles firmados mostrarán un certificado si no es de confianza.

  • Los controles no marcados como seguros mostrarán una advertencia.

Modo de alta seguridad

  • Los controles se descargan sin advertencia.

  • El scripting y la persistencia se producen sin advertencia.

Consulte también

Tareas de programación para Internet de MFC
Fundamentos de programación para Internet de MFC
Controles ActiveX MFC: Licencias de un control ActiveX