Partage via


Mise à niveau d'un contrôle ActiveX

Les contrôles ActiveX existants (anciennement contrôles OLE) peuvent être utilisés sur Internet sans modification. Toutefois, vous pouvez modifier des contrôles pour améliorer leurs performances.

Important

ActiveX est une technologie héritée qui ne doit pas être utilisée pour le nouveau développement. Pour plus d’informations sur les technologies modernes qui remplacent ActiveX, consultez Contrôles ActiveX. La prise en charge des contrôles ActiveX a été déconseillée dans les versions ultérieures d’Internet Explorer et n’est pas prise en charge par les navigateurs modernes. Microsoft ne fournit plus de composants ActiveX accessibles sur le web.

Lorsque vous utilisez votre contrôle sur une page web, il existe des considérations supplémentaires. Le fichier .ocx et tous les fichiers de prise en charge doivent se trouver sur l’ordinateur cible ou être téléchargés sur Internet. Cela rend la taille du code et le temps de téléchargement importants à prendre en compte. Les téléchargements peuvent être empaquetés dans un fichier .cab signé. Vous pouvez marquer votre contrôle comme sécurisé pour l’écriture de scripts et comme sécurisé pour l’initialisation.

Cet article aborde les thèmes suivants :

Vous pouvez également ajouter des optimisations, comme décrit dans Les contrôles ActiveX : Optimisation. Les monikers peuvent être utilisés pour télécharger des propriétés et des objets blob volumineux de manière asynchrone, comme décrit dans Les contrôles ActiveX sur Internet.

Code d’empaquetage pour le téléchargement

Pour plus d’informations sur ce sujet, consultez Empaquetage des contrôles ActiveX.

Balise CODEBASE

Les contrôles ActiveX sont incorporés dans des pages Web à l’aide de la <OBJECT> balise. Le CODEBASE paramètre de la <OBJECT> balise spécifie l’emplacement à partir duquel télécharger le contrôle. CODEBASE peut pointer à un certain nombre de types de fichiers différents avec succès.

Utilisation de la balise CODEBASE avec un fichier OCX

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

Cette solution télécharge uniquement le fichier .ocx du contrôle et nécessite que les DLL de prise en charge soient déjà installées sur l’ordinateur client. Cela fonctionnera pour les contrôles ActiveX Internet Explorer et MFC générés avec Visual C++, car Internet Explorer est fourni avec les DLL de prise en charge pour les contrôles Visual C++. Si un autre navigateur Internet compatible avec le contrôle ActiveX est utilisé pour afficher ce contrôle, cette solution ne fonctionnera pas.

Utilisation de la balise CODEBASE avec un fichier INF

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

Un fichier .inf contrôle l’installation d’un fichier .ocx et ses fichiers de prise en charge. Cette méthode n’est pas recommandée, car il n’est pas possible de signer un fichier .inf (voir Code de signature pour les pointeurs lors de la signature de code).

Utilisation de la balise CODEBASE avec un fichier CAB

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

Les fichiers d’armoire sont la méthode recommandée pour empaqueter les contrôles ActiveX qui utilisent MFC. L’empaquetage d’un contrôle ActiveX MFC dans un fichier d’armoire permet à un fichier .inf d’être inclus pour contrôler l’installation du contrôle ActiveX et toutes les DLL dépendantes (telles que les DLL MFC). L’utilisation d’un fichier CAB compresse automatiquement le code pour un téléchargement plus rapide. Si vous utilisez un fichier .cab pour le téléchargement du composant, il est plus rapide de signer l’intégralité du fichier .cab que chaque composant individuel.

Création de fichiers CAB

Les outils permettant de créer des fichiers d’armoire font désormais partie du Kit de développement logiciel (SDK) Windows.

Le fichier d’armoire pointé par CODEBASE doit contenir le fichier .ocx de votre contrôle ActiveX et un fichier .inf pour contrôler son installation. Vous créez le fichier d’armoire en spécifiant le nom de votre fichier de contrôle et un fichier .inf. N’incluez pas de DLL dépendantes qui peuvent déjà exister sur le système dans ce fichier d’armoire. Par exemple, les DLL MFC sont empaquetées dans un fichier d’armoire distinct et référencées par le fichier .inf de contrôle.

Pour plus d’informations sur la création d’un fichier CAB, consultez Création d’un fichier CAB.

Fichier INF

L’exemple suivant, spindial.inf, répertorie les fichiers de prise en charge et les informations de version nécessaires pour le contrôle spindial MFC. Le mfc42.cab est fourni et signé par Microsoft.

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

Balise <OBJECT>

L’exemple suivant illustre l’utilisation de la <OBJECT> balise pour empaqueter l’exemple de contrôle Spindial 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>

Dans ce cas, spindial.cab contiendra deux fichiers, spindial.ocx et spindial.inf. La commande suivante génère le fichier d’armoire :

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

Le -s 6144 paramètre réserve de l’espace dans l’armoire pour la signature de code.

Balise de version

Notez ici que les #Version informations spécifiées avec un fichier CAB s’appliquent au contrôle spécifié par le paramètre CLASSID de la <OBJECT> balise.

Selon la version spécifiée, vous pouvez forcer le téléchargement de votre contrôle. Pour obtenir des spécifications complètes de la OBJECT balise, y compris le paramètre CODEBASE , consultez la référence W3C.

Marquage d’un Coffre de contrôle pour l’écriture de scripts et l’initialisation

Les contrôles ActiveX utilisés dans les pages Web doivent être marqués comme sécurisés pour l’écriture de scripts et pour l’initialisation s’ils sont en fait sûrs. Un contrôle sécurisé n’effectue pas d’E/S de disque ni n’accède directement à la mémoire ou aux registres d’un ordinateur.

Les contrôles peuvent être marqués comme sécurisés pour l’écriture de scripts et pour l’initialisation via le Registre. Modifiez DllRegisterServer pour ajouter des entrées similaires à ce qui suit pour marquer le contrôle comme sécurisé pour l’écriture de scripts et la persistance dans le Registre. Une autre méthode consiste à implémenter IObjectSafety.

Vous allez définir des GUID (identificateurs globaux uniques) pour que votre contrôle le marque en toute sécurité pour le script et pour la persistance. Les contrôles qui peuvent être scriptés en toute sécurité contiennent une entrée de Registre similaire à ce qui suit :

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

Les contrôles qui peuvent être initialisés en toute sécurité à partir de données persistantes sont marqués comme sécurisés pour la persistance avec une entrée de Registre similaire à :

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

Ajoutez des entrées similaires à ce qui suit (en remplaçant l’ID de classe de votre contrôle à la place de {06889605-B8D0-101A-91F1-00608CEAD5B3}) pour associer vos clés à l’ID de classe suivant :

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}

À propos des licences

Si vous souhaitez utiliser un contrôle sous licence sur une page Web, vous devez vérifier que le contrat de licence autorise son utilisation sur Internet et créez un fichier de package de licence (LPK) pour celui-ci.

Un contrôle ActiveX sous licence ne se charge pas correctement dans une page HTML si l’ordinateur exécutant Internet Explorer n’est pas concédé sous licence pour utiliser le contrôle. Par exemple, si un contrôle sous licence a été créé à l’aide de Visual C++, la page HTML utilisant le contrôle se charge correctement sur l’ordinateur sur lequel le contrôle a été généré, mais il ne se charge pas sur un autre ordinateur, sauf si les informations de licence sont incluses.

Pour utiliser un contrôle ActiveX sous licence dans Internet Explorer, vous devez case activée le contrat de licence du fournisseur pour vérifier que la licence pour le contrôle autorise :

  • Redistribution

  • Utilisation du contrôle sur Internet

  • Utilisation du paramètre Codebase

Pour utiliser un contrôle sous licence dans une page HTML sur un ordinateur non autorisé, vous devez générer un fichier de package de licence (LPK). Le fichier LPK contient des licences d’exécution pour les contrôles sous licence dans la page HTML. Ce fichier est généré via LPK_TOOL.EXE qui est fourni avec le Kit de développement logiciel (SDK) ActiveX.

Pour créer un fichier LPK

  1. Exécutez LPK_TOOL.EXE sur un ordinateur sous licence pour utiliser le contrôle.

  2. Dans la boîte de dialogue Outil de création de package de licences, dans la zone de liste Contrôles disponibles, sélectionnez chaque contrôle ActiveX sous licence qui sera utilisé sur la page HTML, puis cliquez sur Ajouter.

  3. Cliquez sur Enregistrer & Quitter et tapez un nom pour le fichier LPK. Cela crée le fichier LPK et ferme l’application.

Pour incorporer un contrôle sous licence sur une page HTML

  1. Modifiez votre page HTML. Dans la page HTML, insérez une <balise OBJECT> pour l’objet Gestionnaire de licences avant toute autre <balise OBJECT> . Le Gestionnaire de licences est un contrôle ActiveX installé avec Internet Explorer. Son ID de classe est indiqué ci-dessous. Définissez la propriété LPKPath de l’objet Gestionnaire de licences sur le chemin d’accès et le nom du fichier LPK. Vous ne pouvez avoir qu’un seul fichier LPK par page HTML.
<OBJECT CLASSID = "clsid:5220cb21-c88d-11cf-b347-00aa00a28331">
<PARAM NAME="LPKPath" VALUE="relative URL to .LPK file">
</OBJECT>
  1. Insérez la <balise OBJECT> pour votre contrôle sous licence après la balise Gestionnaire de licences.

    Par exemple, une page HTML qui affiche le contrôle Microsoft Masked Edit est illustrée ci-dessous. Le premier ID de classe concerne le contrôle License Manager, le deuxième ID de classe correspond au contrôle Masked Edit. Modifiez les balises pour qu’elles pointent vers le chemin relatif du fichier .lpk que vous avez créé précédemment et ajoutez une balise d’objet, y compris l’ID de classe de votre contrôle.

  2. Insérez l’attribut <E Mo ED> pour votre fichier LPK, si vous utilisez le plug-in ActiveX NCompass.

    Si votre contrôle peut être affiché sur d’autres navigateurs activés active( par exemple, Netscape à l’aide du plug-in NCompass ActiveX), vous devez ajouter la <syntaxe E Mo ED> comme indiqué ci-dessous.

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

Pour plus d’informations sur les licences de contrôle, consultez Contrôles ActiveX : Gestion des licences d’un contrôle ActiveX.

Code de signature

La signature de code est conçue pour identifier la source du code et garantir que le code n’a pas changé depuis sa signature. Selon les paramètres de sécurité du navigateur, les utilisateurs peuvent être avertis avant le téléchargement du code. Les utilisateurs peuvent choisir de faire confiance à certains propriétaires de certificats ou sociétés, auquel cas le code signé par ces personnes approuvées sera téléchargé sans avertissement. Le code est signé numériquement pour éviter toute falsification.

Vérifiez que votre code final est signé afin que votre contrôle puisse être téléchargé automatiquement sans afficher les messages d’avertissement d’approbation. Pour plus d’informations sur la façon de signer du code, case activée la documentation sur Authenticode dans le Kit de développement logiciel (SDK) ActiveX et voir Signature d’un fichier CAB.

Selon les paramètres de niveau de sécurité de confiance et de navigateur, un certificat peut s’afficher pour identifier la personne ou l’entreprise de signature. Si le niveau de sécurité n’est pas ou si le propriétaire du certificat du contrôle signé est approuvé, un certificat n’est pas affiché. Consultez le navigateur Internet Explorer Coffre ty Levels and Control Behavior pour plus d’informations sur la façon dont le paramètre de sécurité du navigateur détermine si votre contrôle est téléchargé et qu’un certificat s’affiche.

La signature numérique garantit que le code n’a pas changé depuis sa signature. Un hachage du code est pris et incorporé dans le certificat. Ce hachage est comparé ultérieurement à un hachage du code pris après le téléchargement du code, mais avant son exécution. Les entreprises telles que Verisign peuvent fournir des clés privées et publiques nécessaires pour signer du code. Le Kit de développement logiciel (SDK) ActiveX est fourni avec MakeCert, un utilitaire permettant de créer des certificats de test.

Gestion de la palette

Les conteneurs déterminent la palette et la rendent disponible en tant que propriété ambiante, DISPID_AMoIENT_PALETTE. Un conteneur (par exemple, Internet Explorer) choisit une palette utilisée par tous les contrôles ActiveX d’une page pour déterminer sa propre palette. Cela empêche l’affichage scintillement et présente une apparence cohérente.

Un contrôle peut remplacer OnAmbientPropertyChange pour gérer la notification des modifications apportées à la palette.

Un contrôle peut remplacer OnGetColorSet pour renvoyer un jeu de couleurs pour dessiner la palette. Les conteneurs utilisent la valeur de retour pour déterminer si un contrôle prend en charge la palette.

Dans les instructions OCX 96, un contrôle doit toujours réaliser sa palette en arrière-plan.

Les anciens conteneurs qui n’utilisent pas la propriété de palette ambiante envoient des messages WM_QUERYNEWPALETTE et WM_PALETTECHANGED. Un contrôle peut remplacer OnQueryNewPalette et OnPaletteChanged gérer ces messages.

Navigateur Internet Explorer Coffre ty niveaux et comportement de contrôle

Un navigateur dispose d’options pour le niveau de sécurité, configurable par l’utilisateur. Étant donné que les pages web peuvent contenir du contenu actif susceptible de nuire à l’ordinateur d’un utilisateur, les navigateurs permettent à l’utilisateur de sélectionner des options pour le niveau de sécurité. Selon la façon dont un navigateur implémente des niveaux de sécurité, un contrôle peut ne pas être téléchargé du tout, ou affiche un certificat ou un message d’avertissement pour permettre à l’utilisateur de choisir au moment de l’exécution s’il faut télécharger ou non le contrôle. Le comportement des contrôles ActiveX sous des niveaux de sécurité élevés, moyens et faibles sur Internet Explorer est répertorié ci-dessous.

Mode haute Coffre ty

  • Les contrôles non signés ne seront pas téléchargés.

  • Les contrôles signés affichent un certificat s’il n’est pas approuvé (un utilisateur peut choisir une option pour toujours approuver du code à partir de ce propriétaire de certificat à partir de maintenant).

  • Seuls les contrôles marqués comme sécurisés auront des données persistantes et/ou seront scriptables.

Mode de Coffre ty moyen

  • Les contrôles non signés affichent un avertissement avant le téléchargement.

  • Les contrôles signés affichent un certificat s’il n’est pas approuvé.

  • Les contrôles non marqués comme sécurisés affichent un avertissement.

Mode faible Coffre ty

  • Les contrôles sont téléchargés sans avertissement.

  • Les scripts et la persistance se produisent sans avertissement.

Voir aussi

Tâches de programmation Internet MFC
Notions de base de la programmation Internet MFC
Contrôles ActiveX MFC : gestion des licences d’un contrôle ActiveX