Déployer des composants COM avec ClickOnce

Le déploiement de composants COM hérités a toujours é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 simple 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 COM sans inscription.

COM sans inscription

COM sans inscription est une nouvelle technologie permettant de déployer et d’activer des composants COM isolés. Elle fonctionne en plaçant toutes les informations d’inscription et de bibliothèque de types 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 de l’inscrire sur l’ordinateur de l’utilisateur final. Pour isoler un composant COM, il vous suffit de définir la propriété Isolé de sa référence sur True. Par défaut, cette propriété est définie sur 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. Cela entraîne également la copie des fichiers correspondants dans le dossier de l’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 CoClass dans la bibliothèque de types du composant, en faisant correspondre chaque entrée avec ses données d’inscription correspondantes et en générant des définitions de manifeste pour toutes les classes COM dans le fichier de bibliothèque de types.

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

La technologie de déploiement ClickOnce est bien adaptée 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. Toutefois, 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.

ClickOnce déploie les composants COM de deux façons :

  • En utilisant le programme d’amorçage pour déployer vos composants COM. Cela fonctionne sur toutes les plateformes prises en charge.

  • En utilisant le déploiement d’isolation de composants natifs (également appelée 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 dans 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 sur Projet.

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

    Notes

    Seuls les types de projet DLL ActiveX et ActiveX Control sont pris en charge avec COM sans inscription. Les types de projet EXE ActiveX 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 méthode New :

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

Notes

COM sans inscription prend uniquement en charge les types de projet DLL et de contrôle COM. Vous ne pouvez pas utiliser d’EXE avec COM sans inscription.

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 sur Projet.

  2. Dans la boîte de dialogue Nouveau projet, sélectionnez Visual Basic dans le nœud, puis Application Windows. Dans le champ Nom, saisissez RegFreeComDemo.

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

  4. Cliquez avec le bouton droit sur le nœud Références, puis 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 au fichier 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, puis faites-le glisser vers le formulaire Form1.

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

  8. Double-cliquez sur le bouton pour ajouter du code de descripteur et, dans le fichier de code, ajoutez du code afin que le descripteur affiche ce qui 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éboguer, cliquez sur Démarrer le débogage.

    Ensuite, vous devez isoler le contrôle. Chaque composant COM utilisé par votre application 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 vers 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 Falsede la propriété Isolé par 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 le prouver, essayez de désinscrire le composant VB6Hello.dll et d’exécuter RegFreeComDemo1.exe en dehors de l’IDE Visual Studio. Cette fois, lorsque l’utilisateur clique sur le bouton, il fonctionne toujours. Si vous renommez temporairement le manifeste de l’application, il échoue à nouveau.

Notes

Vous pouvez simuler l’absence d’un composant COM en le désinscrivant 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 apparaît.

  2. Dans l’assistant de 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 notez 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 a une autre application utilisant une autre version du contrôle, il ne peut pas interférer avec cette application.

Référencer des assemblies natifs

Visual Studio prend en charge les références aux assemblies Visual Basic 6.0 ou C++ natifs. Ces références sont appelées références natives. Vous pouvez déterminer 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 à l’intérieur de 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 s’il détecte que le composant contient un manifeste incorporé. Visual Studio inclut également automatiquement tous les fichiers ou assemblies 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 des contrôles 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 effet, 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é.

Limitations du déploiement de composants COM sans inscription

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

Tous les composants ne sont pas des candidats appropriés pour COM sans inscription. 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 du navigateur ou Microsoft Data Access Components (MDAC). Vous devez suivre la stratégie de redistribution de l’auteur du composant. Vérifiez ceci 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 fait partie d’Office et ne peut être utilisé que sur un ordinateur sur lequel le produit Office complet est 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 l’étendue 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 un accès aux données redistribuable. Les applications de données nécessitent généralement l’installation d’un accès aux données distinct redistribuable avant de pouvoir s’exécuter. Vous ne devez pas tenter 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 en tant que prérequis. Consultez Guide pratique pour installer les prérequis avec une application ClickOnce.

    Dans certains cas, il peut être possible pour le développeur du composant de le redessiner pour un COM sans inscription. Si ce n’est pas possible, vous pouvez toujours créer et publier des applications qui en dépendent via le schéma d’inscription standard à l’aide du programme d’amorçage. Pour plus d’informations, consultez Création de packages de programme d’amorçage.

    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 génère un avertissement de génération et le chargement de l’application échoue au moment de l’exécution. Pour éviter ce problème, Microsoft recommande d’encapsuler les 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 propriété Isolated 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 d’inscription qui appelle l’inscription automatique pendant la génération. En outre, 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.