Partager via


Déployer des composants COM avec ClickOnce

Le déploiement de composants COM hérités a traditionnellement été une tâche difficile. Les composants doivent être enregistrés globalement et peuvent donc provoquer des effets secondaires indésirables entre les applications qui se chevauchent. Cette situation n’est généralement pas un problème dans les applications .NET Framework, car les composants sont complètement isolés d’une application ou sont compatibles côte à côte. Visual Studio vous permet de déployer des composants COM isolés sur le système d’exploitation Windows.

ClickOnce fournit un mécanisme facile et sécurisé pour le déploiement de vos applications .NET. Toutefois, si vos applications utilisent des composants COM hérités, vous devez prendre des mesures supplémentaires pour les déployer. Cette rubrique explique comment déployer des composants COM isolés et référencer des composants natifs (par exemple, à partir de Visual Basic 6.0 ou Visual C++).

Pour plus d’informations sur le déploiement de composants COM isolés, consultez Simplifier le déploiement d’applications avec ClickOnce et Registration-Free COM.

COM sans inscription dans le registre

COM sans inscription est une nouvelle technologie permettant de déployer et d’activer des composants COM isolés. Il fonctionne en plaçant toutes les informations de bibliothèque de types et d’inscription du composant qui sont généralement installées dans le registre système dans un fichier XML appelé manifeste, stocké dans le même dossier que l’application.

L’isolation d’un composant COM nécessite qu’il soit inscrit sur l’ordinateur du développeur, mais il n’est pas nécessaire d’être inscrit sur l’ordinateur de l’utilisateur final. Pour isoler un composant COM, il vous suffit de définir la propriété isolée de sa référence sur True. Par défaut, cette propriété a la valeur False, ce qui indique qu’elle doit être traitée comme une référence COM inscrite. Si cette propriété a la valeur True, un manifeste est généré pour ce composant au moment de la génération. Il provoque également la copie des fichiers correspondants dans le dossier d’application pendant l’installation.

Lorsque le générateur de manifeste rencontre une référence COM isolée, il énumère toutes les entrées de CoClass la bibliothèque de types du composant, correspondant à chaque entrée avec ses données d’inscription correspondantes et générant des définitions de manifeste pour toutes les classes COM du fichier de bibliothèque de types.

Déployer des composants COM sans inscription à l’aide de ClickOnce

La technologie de déploiement ClickOnce convient parfaitement au déploiement de composants COM isolés, car ClickOnce et COM sans inscription nécessitent qu’un composant dispose d’un manifeste pour être déployé.

En règle générale, l’auteur du composant doit fournir un manifeste. Si ce n’est pas le cas, Visual Studio est capable de générer automatiquement un manifeste pour un composant COM. La génération du manifeste est effectuée pendant le processus de publication ClickOnce ; pour plus d’informations, consultez Publication d’applications ClickOnce. Cette fonctionnalité vous permet également de tirer parti des composants hérités que vous avez créés dans des environnements de développement antérieurs tels que Visual Basic 6.0.

Il existe deux façons de déployer des composants COM par ClickOnce :

  • Utilisez le programme d’amorçage pour déployer vos composants COM ; cela fonctionne sur toutes les plateformes prises en charge.

  • Utilisez l'isolation des composants natifs pour le déploiement (également appelé COM sans inscription).

Exemple d’isolation et de déploiement d’un composant COM simple

Pour illustrer le déploiement de composants COM sans inscription, cet exemple crée une application Windows en Visual Basic qui référence un composant COM natif isolé créé à l’aide de Visual Basic 6.0 et le déploie à l’aide de ClickOnce.

Tout d’abord, vous devez créer le composant COM natif :

Pour créer un composant COM natif
  1. À l’aide de Visual Basic 6.0, dans le menu Fichier , cliquez sur Nouveau, puis Projet.

  2. Dans la boîte de dialogue Nouveau projet , sélectionnez le nœud Visual Basic et sélectionnez un projet DLL ActiveX . Dans la zone Nom , tapez VB6Hello.

    Note

    Seuls les types de projets ActiveX DLL et ActiveX Control sont pris en charge avec COM sans inscription ; Les types de projets ActiveX EXE et Document ActiveX ne sont pas pris en charge.

  3. Dans l’Explorateur de solutions, double-cliquez sur Class1.vb pour ouvrir l’éditeur de texte.

  4. Dans Class1.vb, ajoutez le code suivant après le code généré pour la New méthode :

    Public Sub SayHello()
       MsgBox "Message from the VB6Hello COM component"
    End Sub
    
  5. Construisez le composant. Dans le menu Générer , cliquez sur Générer la solution.

Note

COM sans enregistrement prend uniquement en charge les DLL et les types de projets de contrôle COM. Vous ne pouvez pas utiliser des fichiers EXE avec le COM sans enregistrement.

Vous pouvez maintenant créer une application Windows et y ajouter une référence au composant COM.

Pour créer une application Windows à l’aide d’un composant COM
  1. À l’aide de Visual Basic, dans le menu Fichier , cliquez sur Nouveau, puis Projet.

  2. Dans la boîte de dialogue Nouveau projet , sélectionnez le nœud Visual Basic et sélectionnez Application Windows. Dans la zone Nom , tapez RegFreeComDemo.

  3. Dans l’Explorateur de solutions, cliquez sur le bouton Afficher tous les fichiers pour afficher les références du projet.

  4. Cliquez avec le bouton droit sur le nœud Références et sélectionnez Ajouter une référence dans le menu contextuel.

  5. Dans la boîte de dialogue Ajouter une référence , cliquez sur l’onglet Parcourir , accédez à VB6Hello.dll, puis sélectionnez-le.

    Une référence VB6Hello apparaît dans la liste des références.

  6. Pointez sur la boîte à outils, sélectionnez un contrôle Bouton et faites-le glisser vers le formulaire Form1 .

  7. Dans la fenêtre Propriétés , définissez la propriété Text du bouton sur Hello.

  8. Double-cliquez sur le bouton pour ajouter du code de gestionnaire, puis dans le fichier de code, ajoutez du code afin que le gestionnaire lise comme suit :

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim VbObj As New VB6Hello.Class1
        VbObj.SayHello()
    End Sub
    
  9. Exécutez l’application. Dans le menu Débogage , cliquez sur Démarrer le débogage.

    Ensuite, vous devez isoler le contrôle. Chaque composant COM que votre application utilise est représenté dans votre projet en tant que référence COM. Ces références sont visibles sous le nœud Références dans la fenêtre Explorateur de solutions . (Notez que vous pouvez ajouter des références directement à l’aide de la commande Ajouter une référence dans le menu Projet ou indirectement en faisant glisser un contrôle ActiveX sur votre formulaire.)

    Les étapes suivantes montrent comment isoler le composant COM et publier l’application mise à jour contenant le contrôle isolé :

Pour isoler un composant COM
  1. Dans l’Explorateur de solutions, dans le nœud Références , sélectionnez la référence VB6Hello .

  2. Dans la fenêtre Propriétés, remplacez la valeur de la propriété Isolated de False à True.

  3. Dans le menu Générer , cliquez sur Générer la solution.

    Maintenant, lorsque vous appuyez sur F5, l’application fonctionne comme prévu, mais elle s’exécute désormais sous COM sans inscription. Pour prouver cela, essayez de désinscrire le composant VB6Hello.dll et d’exécuter RegFreeComDemo1.exe en dehors de l’IDE Visual Studio. Cette fois que le bouton est cliqué, il fonctionne toujours. Si vous renommez temporairement le manifeste de l’application, il échouera à nouveau.

Note

Vous pouvez simuler l’absence d’un composant COM en l’annulant temporairement. Ouvrez une invite de commandes, accédez à votre dossier système en tapant cd /d %windir%\system32, puis annulez l’inscription du composant en tapant regsvr32 /u VB6Hello.dll. Vous pouvez l’inscrire à nouveau en tapant regsvr32 VB6Hello.dll.

La dernière étape consiste à publier l’application à l’aide de ClickOnce :

Pour publier une mise à jour d’application avec un composant COM isolé
  1. Dans le menu Générer , cliquez sur Publier RegFreeComDemo.

    L’Assistant Publication s’affiche.

  2. Dans l’Assistant Publication, spécifiez un emplacement sur le disque de l’ordinateur local où vous pouvez accéder aux fichiers publiés et les examiner.

  3. Cliquez sur Terminer pour publier l’application.

    Si vous examinez les fichiers publiés, vous remarquerez que le fichier sysmon.ocx est inclus. Le contrôle est totalement isolé de cette application, ce qui signifie que si l’ordinateur de l’utilisateur final dispose d’une autre application à l’aide d’une autre version du contrôle, elle ne peut pas interférer avec cette application.

Référencer des assemblies natives

Visual Studio prend en charge les références aux assemblys Visual Basic 6.0 ou C++ natifs ; ces références sont appelées références natives. Vous pouvez indiquer si une référence est native en vérifiant que sa propriété Type de fichier est définie sur Native ou ActiveX.

Pour ajouter une référence native, utilisez la commande Ajouter une référence , puis accédez au manifeste. Certains composants placent le manifeste dans la DLL. Dans ce cas, vous pouvez simplement choisir la DLL elle-même et Visual Studio l’ajoutera en tant que référence native si elle détecte que le composant contient un manifeste incorporé. Visual Studio inclut également automatiquement tous les fichiers ou assemblys dépendants répertoriés dans le manifeste s’ils se trouvent dans le même dossier que le composant référencé.

L’isolation du contrôle COM facilite le déploiement de composants COM qui n’ont pas encore de manifestes. Toutefois, si un composant est fourni avec un manifeste, vous pouvez référencer le manifeste directement. En fait, vous devez toujours utiliser le manifeste fourni par l’auteur du composant dans la mesure du possible plutôt que d’utiliser la propriété isolée .

Limitations du déploiement de composants COM sans inscription

COM sans inscription offre des avantages clairs par rapport aux techniques de déploiement traditionnelles.

Tous les composants ne sont pas des candidats appropriés pour COM sans enregistrement. Un composant n’est pas approprié si l’un des éléments suivants est vrai :

  • Le composant est un serveur hors processus. Les serveurs EXE ne sont pas pris en charge ; seules les DLL sont prises en charge.

  • Le composant fait partie du système d’exploitation ou est un composant système, tel que XML, un composant de navigateur ou Microsoft Data Access Components (MDAC). Vous devez suivre la stratégie de redistribution de l’auteur du composant ; vérifiez auprès de votre fournisseur.

  • Le composant fait partie d’une application, telle que Microsoft Office. Par exemple, vous ne devez pas tenter d’isoler le modèle objet Microsoft Excel. Il s’agit d’une partie d’Office et ne peut être utilisé que sur un ordinateur avec le produit Office complet installé.

  • Le composant est destiné à être utilisé comme complément ou composant logiciel enfichable, par exemple un complément Office ou un contrôle dans un navigateur Web. Ces composants nécessitent généralement un type de schéma d’inscription défini par l’environnement d’hébergement qui dépasse la portée du manifeste lui-même.

  • Le composant gère un appareil physique ou virtuel pour le système, par exemple un pilote de périphérique pour un spouleur d’impression.

  • Le composant est redistribuable d’accès aux données. Les applications de données nécessitent généralement l’installation d’un redistribuable d’accès aux données distinct avant de pouvoir s’exécuter. Vous ne devez pas essayer d’isoler des composants tels que Microsoft ADO Data Control, Microsoft OLE DB ou Microsoft Data Access Components (MDAC). Au lieu de cela, si votre application utilise MDAC ou SQL Server Express, vous devez les définir comme prérequis ; voir Comment : installer les prérequis avec une application ClickOnce.

    Dans certains cas, le développeur du composant peut le concevoir à nouveau pour COM sans inscription. Si cela n’est pas possible, vous pouvez toujours générer et publier des applications qui dépendent de celles-ci via le schéma d’inscription standard à l’aide du programme d’amorçage. Pour plus d’informations, consultez Création de paquets Bootstrapper.

    Un composant COM ne peut être isolé qu’une seule fois par application. Par exemple, vous ne pouvez pas isoler le même composant COM de deux projets de bibliothèque de classes différents qui font partie de la même application. Cela entraîne un avertissement de build et l’application ne peut pas se charger au moment de l’exécution. Pour éviter ce problème, Microsoft vous recommande d’encapsuler des composants COM dans une bibliothèque de classes unique.

    Il existe plusieurs scénarios dans lesquels l’inscription COM est requise sur l’ordinateur du développeur, même si le déploiement de l’application ne nécessite pas d’inscription. La Isolated propriété exige que le composant COM soit inscrit sur l’ordinateur du développeur afin de générer automatiquement le manifeste pendant la génération. Il n'existe aucune fonctionnalité de capture de l'enregistrement qui appelle l'auto-inscription pendant la compilation. En outre, toutes les classes qui ne sont pas explicitement définies dans la bibliothèque de types ne sont pas reflétées dans le manifeste. Lors de l’utilisation d’un composant COM avec un manifeste préexistant, tel qu’une référence native, le composant n’a peut-être pas besoin d’être inscrit au moment du développement. Toutefois, l’inscription est requise si le composant est un contrôle ActiveX et que vous souhaitez l’inclure dans la boîte à outils et le concepteur Windows Forms.