Déployer des composants COM avec ClickOnceDeploy COM components with ClickOnce

Déploiement de composants COM hérités a toujours été une tâche difficile.Deployment of legacy COM components has traditionally been a difficult task. Composants doivent être inscrits dans le monde entier et peuvent donc entraîner des effets secondaires indésirables entre les applications qui se chevauche.Components need to be globally registered and thus can cause undesirable side effects between overlapping applications. Cette situation n’est généralement pas un problème dans les applications .NET Framework, car les composants sont complètement isolés dans une application ou offrent une compatibilité côte à côte.This situation is generally not a problem in .NET Framework applications because components are completely isolated to an application or are side-by-side compatible. Visual Studio vous permet de déployer des composants COM isolés sur le Windows XP ou un système d’exploitation ultérieur.Visual Studio allows you to deploy isolated COM components on the Windows XP or higher operating system.

ClickOnceClickOnce fournit un mécanisme simple et sécurisé pour le déploiement de vos applications .NET.provides an easy and safe mechanism for deploying your .NET applications. Toutefois, si vos applications utilisent les composants COM installés, vous devez prendre des mesures supplémentaires pour les déployer.However, if your applications use legacy COM components, you will need to take additional steps for deploying them. Cette rubrique décrit 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++).This topic describes how to deploy isolated COM components and reference native components (for example, from Visual Basic 6.0 or Visual C++).

Pour plus d’informations sur le déploiement des composants COM isolés, consultez Simplify App Deployment with ClickOnce and Registration-Free COM.For more information on deploying isolated COM components, see Simplify App Deployment with ClickOnce and Registration-Free COM.

Registration-free COMRegistration-free COM

COM sans inscription est une nouvelle technologie de déploiement et d’activation des composants COM isolés.Registration-free COM is a new technology for deploying and activating isolated COM components. Il fonctionne en plaçant la bibliothèque de types de tous les du composant et les informations d’inscription 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.It works by putting all the component's type-library and registration information that is typically installed into the system registry into an XML file called a manifest, stored in the same folder as the application.

Isoler un composant COM nécessite qu’il soit inscrit sur l’ordinateur du développeur, mais il ne devra pas être enregistré sur l’ordinateur de l’utilisateur final.Isolating a COM component requires that it be registered on the developer's machine, but it does not have to be registered on the end user's computer. Pour isoler un composant COM, il vous suffit de sa référence a la valeur isolé propriété True.To isolate a COM component, all you need to do is set its reference's Isolated property to True. Par défaut, cette propriété est définie False, indiquant qu’il doit être traité comme une référence COM inscrite.By default, this property is set to False, indicating that it should be treated as a registered COM reference. Si cette propriété est True, cela provoque un manifeste à générer pour ce composant au moment de la génération.If this property is True, it causes a manifest to be generated for this component at build time. Elle entraîne également les fichiers correspondants à copier vers le dossier d’application lors de l’installation.It also causes the corresponding files to be copied to the application folder during installation.

Lorsque le Générateur de manifeste rencontre une référence COM isolée, il énumère toutes les CoClass entrées dans la bibliothèque de types du composant, correspondant à chaque entrée aux données d’inscription correspondante et la génération des définitions de manifeste pour tout le modèle COM classes dans le fichier de bibliothèque de types.When the manifest generator encounters an isolated COM reference, it enumerates all of the CoClass entries in the component's type library, matching each entry with its corresponding registration data, and generating manifest definitions for all the COM classes in the type library file.

Déployer des composants COM sans inscription à l’aide de ClickOnceDeploy registration-free COM components using ClickOnce

ClickOnceClickOnce technologie de déploiement convient bien pour le déploiement de composants COM isolés, étant donné que les deux ClickOnceClickOnce et COM sans inscription nécessitent un composant qu’un manifeste pour être déployé.deployment technology is well-suited for deploying isolated COM components, because both ClickOnceClickOnce and registration-free COM require that a component have a manifest in order to be deployed.

En règle générale, l’auteur du composant doit fournir un manifeste.Typically, the author of the component should provide a manifest. Si ce n’est pas le cas, toutefois, Visual Studio est capable de générer automatiquement un manifeste pour un composant COM.If not, however, Visual Studio is capable of generating a manifest automatically for a COM component. La génération de manifeste est effectuée pendant la ClickOnceClickOnce processus de publication ; pour plus d’informations, consultez publication d’Applications ClickOnce.The manifest generation is performed during the ClickOnceClickOnce Publish process; for more information, see Publishing ClickOnce Applications. Cette fonctionnalité vous permet également de tirer parti des composants hérités qui vous avez créés dans des environnements de développement antérieurs tels que Visual Basic 6.0.This feature also allows you to leverage legacy components that you authored in earlier development environments such as Visual Basic 6.0.

Il existe deux façons qui ClickOnceClickOnce déploie les composants COM :There are two ways that ClickOnceClickOnce deploys COM components:

  • Utilisez le programme d’amorçage pour déployer vos composants COM ; Cela fonctionne sur toutes les plateformes prises en charge.Use the bootstrapper to deploy your COM components; this works on all supported platforms.

  • Utilisez le composant natif d’isolement (également appelé COM sans inscription) déploiement.Use native component isolation (also known as registration-free COM) deployment. Toutefois, cela ne fonctionne que sur un Windows XP ou un système d’exploitation ultérieur.However, this will only work on a Windows XP or higher operating system.

Exemple d’isolation et de déploiement d’un composant COM simpleExample of isolating and deploying a simple COM component

Afin d’illustrer le déploiement du composant COM sans inscription, cet exemple montre comment créer une application basée sur Windows en Visual Basic qui fait référence à un composant COM natif isolé créé à l’aide de Visual Basic 6.0 et le déployer en utilisant ClickOnceClickOnce.In order to demonstrate registration-free COM component deployment, this example will create a Windows-based application in Visual Basic that references an isolated native COM component created using Visual Basic 6.0, and deploy it using ClickOnceClickOnce.

Vous devez tout d’abord créer le composant COM natif :First you will need to create the native COM component:

Pour créer un composant COM natifTo create a native COM component
  1. À l’aide de Visual Basic 6.0, à partir de la fichier menu, cliquez sur New, puis projet.Using Visual Basic 6.0, from the File menu, click New, then Project.

  2. Dans le nouveau projet boîte de dialogue, sélectionnez le Visual Basic nœud et sélectionnez un DLL ActiveX projet.In the New Project dialog box, select the Visual Basic node and select an ActiveX DLL project. Dans la zone Nom , tapez VB6Hello.In the Name box, type VB6Hello.

    Notes

    Types de projets DLL ActiveX et le contrôle ActiveX sont pris en charge avec COM sans inscription ; Types de projets EXE ActiveX et ActiveX Document ne sont pas pris en charge.Only ActiveX DLL and ActiveX Control project types are supported with registration-free COM; ActiveX EXE and ActiveX Document project types are not supported.

  3. Dans l’Explorateur de solutions, double-cliquez sur Class1.vb pour ouvrir l’éditeur de texte.In Solution Explorer, double-click Class1.vb to open the text editor.

  4. Dans Class1.vb, ajoutez le code suivant après le code généré pour le New méthode :In Class1.vb, add the following code after the generated code for the New method:

    Public Sub SayHello()
       MsgBox "Message from the VB6Hello COM component"
    End Sub
    
  5. Générez le composant.Build the component. À partir de la Build menu, cliquez sur générer la Solution.From the Build menu, click Build Solution.

Notes

COM sans inscription prend en charge uniquement les DLL et COM contrôle les types de projets.Registration-free COM supports only DLLs and COM controls project types. Vous ne pouvez pas utiliser les fichiers exe avec COM sans inscription.You cannot use EXEs with registration-free COM.

Vous pouvez maintenant créer une application basée sur Windows et ajoutez une référence au composant COM à celui-ci.Now you can create a Windows-based application and add a reference to the COM component to it.

Pour créer une application Windows à l’aide d’un composant COMTo create a Windows-based application using a COM component
  1. À l’aide de Visual Basic, à partir de la fichier menu, cliquez sur New, puis projet.Using Visual Basic, from the File menu, click New, then Project.

  2. Dans le nouveau projet boîte de dialogue, sélectionnez le Visual Basic nœud et sélectionnez Windows Application.In the New Project dialog box, select the Visual Basic node and select Windows Application. Dans la zone Nom , tapez RegFreeComDemo.In the Name box, type RegFreeComDemo.

  3. Dans l’Explorateur de solutions, cliquez sur le afficher tous les fichiers bouton pour afficher les références du projet.In Solution Explorer, click the Show All Files button to display the project references.

  4. Cliquez sur le références nœud et sélectionnez ajouter une référence dans le menu contextuel.Right-click the References node and select Add Reference from the context menu.

  5. Dans le ajouter une référence boîte de dialogue, cliquez sur le Parcourir onglet, accédez au fichier VB6Hello.dll, puis sélectionnez-le.In the Add Reference dialog box, click the Browse tab, navigate to VB6Hello.dll, then select it.

    Un VB6Hello référence s’affiche dans la liste des références.A VB6Hello reference appears in the references list.

  6. Pointez sur le boîte à outils, sélectionnez un bouton contrôler et faites-la glisser vers le Form1 formulaire.Point to the Toolbox, select a Button control, and drag it to the Form1 form.

  7. Dans le propriétés fenêtre, définissez le bouton texte propriété Hello.In the Properties window, set the button's Text property to Hello.

  8. Double-cliquez sur le bouton pour ajouter du code de gestionnaire et dans le fichier de code, ajoutez le code afin que le gestionnaire se présente comme suit :Double-click the button to add handler code, and in the code file, add code so that the handler reads as follows:

    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.Run the application. À partir de la déboguer menu, cliquez sur démarrer le débogage.From the Debug menu, click Start Debugging.

    Ensuite, vous devez isoler le contrôle.Next you need to isolate the control. Chaque composant COM qui utilise votre application est représentée dans votre projet comme une référence COM.Each COM component that your application uses is represented in your project as a COM reference. Ces références sont visibles sous le références nœud dans le l’Explorateur de solutions fenêtre.These references are visible under the References node in the Solution Explorer window. (Notez que vous pouvez ajouter des références directement à l’aide du ajouter une référence commande sur le projet menu, ou indirectement en faisant glisser un contrôle ActiveX sur votre formulaire.)(Notice that you can add references either directly using the Add Reference command on the Project menu, or indirectly by dragging an ActiveX control onto your form.)

    Les étapes suivantes montrent comment isoler le composant COM et de publier l’application mise à jour qui contient le contrôle isolé :The following steps show how to isolate the COM component and publish the updated application containing the isolated control:

Pour isoler un composant COMTo isolate a COM component
  1. Dans l’Explorateur de solutions, dans le références nœud, sélectionnez le VB6Hello référence.In Solution Explorer, in the References node, select the VB6Hello reference.

  2. Dans le propriétés fenêtre, modifiez la valeur de la isolé propriété à partir de False à True.In the Properties window, change the value of the Isolated property from False to True.

  3. À partir de la Build menu, cliquez sur générer la Solution.From the Build menu, click Build Solution.

    Maintenant, lorsque vous appuyez sur F5, l’application fonctionne comme prévu, mais il est maintenant en cours d’exécution sous COM sans inscription.Now, when you press F5, the application works as expected, but it is now running under registration-free COM. Afin de prouver que cela, essayez d’annuler l’inscription du composant VB6Hello.dll et RegFreeComDemo1.exe en dehors de l’IDE Visual Studio en cours d’exécution.In order to prove this, try unregistering the VB6Hello.dll component and running RegFreeComDemo1.exe outside of the Visual Studio IDE. Cette fois, lorsque le bouton est cliqué, elle fonctionne comme prévu.This time when the button is clicked, it still works. Si vous renommez temporairement le manifeste d’application, il échoue à nouveau.If you temporarily rename the application manifest, it will again fail.

Notes

Vous pouvez simuler l’absence d’un composant COM en annulant temporairement son enregistrement.You can simulate the absence of a COM component by temporarily unregistering it. 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.Open a command prompt, go to your system folder by typing cd /d %windir%\system32, then unregister the component by typing regsvr32 /u VB6Hello.dll. Vous pouvez l’inscrire à nouveau en tapant regsvr32 VB6Hello.dll.You can register it again by typing regsvr32 VB6Hello.dll.

L’étape finale consiste à publier l’application à l’aide de ClickOnceClickOnce:The final step is to publish the application using ClickOnceClickOnce:

Pour publier une mise à jour de l’application avec un composant COM isoléTo publish an application update with an isolated COM component
  1. À partir de la Build menu, cliquez sur Publier RegFreeComDemo.From the Build menu, click Publish RegFreeComDemo.

    L'Assistant Publication apparaît.The Publish Wizard appears.

  2. Dans l’Assistant Publication, spécifiez un emplacement sur le disque de l’ordinateur local où vous pouvez accéder et examinez les fichiers publiés.In the Publish Wizard, specify a location on the local computer's disk where you can access and examine the published files.

  3. Cliquez sur Terminer pour publier l’application.Click Finish to publish the application.

    Si vous examinez les fichiers publiés, vous noterez que le fichier sysmon.ocx est inclus.If you examine the published files, you will note that the sysmon.ocx file is included. Le contrôle est totalement isolé de cette application, ce qui signifie que si l’ordinateur de l’utilisateur final possède une autre application à l’aide d’une version différente du contrôle, il ne peut pas interférer avec cette application.The control is totally isolated to this application, meaning that if the end user's machine has another application using a different version of the control, it cannot interfere with this application.

Assemblys de référence nativesReference native assemblies

Visual Studio prend en charge les références à Visual Basic 6.0 ou natifs des assemblys C++ ; Ces références sont appelées des références natives.Visual Studio supports references to native Visual Basic 6.0 or C++ assemblies; such references are called native references. Vous pouvez indiquer si une référence est native en vérifiant que son Type de fichier propriété est définie sur natif ou ActiveX.You can tell whether a reference is native by verifying that its File Type property is set to Native or ActiveX.

Pour ajouter une référence native, utilisez la ajouter une référence commande, puis naviguez jusqu’au manifeste.To add a native reference, use the Add Reference command, then browse to the manifest. Certains composants placent le manifeste à l’intérieur de la DLL.Some components place the manifest inside the DLL. Dans ce cas, vous pouvez simplement choisir la DLL proprement dite et Visual Studio ajoutera comme une référence native si elle détecte que le composant contient un manifeste incorporé.In this case, you can simply choose the DLL itself and Visual Studio will add it as a native reference if it detects that the component contains an embedded manifest. Visual Studio inclut également automatiquement tous les fichiers dépendants ou les assemblys répertoriés dans le manifeste si elles se trouvent dans le même dossier que le composant référencé.Visual Studio will also automatically include any dependent files or assemblies listed in the manifest if they are in the same folder as the referenced component.

Isolation d’un contrôle COM rend plus facile à déployer des composants COM qui n’ont pas déjà les manifestes.COM control isolation makes it easy to deploy COM components that do not already have manifests. Toutefois, si un composant est fourni avec un manifeste, vous pouvez référencer directement le manifeste.However, if a component is supplied with a manifest, you can reference the manifest directly. En fait, vous devez toujours utiliser le manifeste fourni par l’auteur du composant autant que possible au lieu d’utiliser le isolé propriété.In fact, you should always use the manifest supplied by the author of the component wherever possible rather than using the Isolated property.

Limitations du déploiement du composant COM sans inscriptionLimitations of registration-free COM component deployment

COM sans inscription fournit des avantages en techniques de déploiement traditionnelles.Registration-free COM provides clear advantages over traditional deployment techniques. Toutefois, il existe quelques limitations et mises en garde convient également de remarquer. La plus grande limitation est qu’elle fonctionne uniquement sur Windows XP ou version ultérieure.However, there are a few limitations and caveats that should also be pointed out. The greatest limitation is that it only works on Windows XP or higher. L’implémentation de COM sans inscription obligatoire des modifications à la façon dont dans lequel les composants sont chargés dans le système d’exploitation principal.The implementation of registration-free COM required changes to the way in which components are loaded in the core operating system. Malheureusement, il n’existe aucune couche de prise en charge de bas niveau pour COM sans inscription.Unfortunately, there is no down-level support layer for registration-free COM.

Pas chaque composant est un candidat approprié pour COM sans inscription.Not every component is a suitable candidate for registration-free COM. Un composant n’est pas approprié si une des opérations suivantes est vraie :A component is not a suitable if any of the following are true:

  • Le composant est un serveur out-of-process.The component is an out-of-process server. Les serveurs EXE ne sont pas pris en charge ; Seules les DLL sont pris en charge.EXE servers are not supported; only DLLs are supported.

  • Le composant fait partie du système d’exploitation, ou est un composant système, telles que XML, Internet Explorer ou Microsoft Data Access Components (MDAC).The component is part of the operating system, or is a system component, such as XML, Internet Explorer, or 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.You should follow the redistribution policy of the component author; check with your vendor.

  • Le composant fait partie d’une application, telles que Microsoft Office.The component is part of an application, such as Microsoft Office. Par exemple, vous ne devez pas essayer d’isoler le modèle objet de Microsoft Excel.For example, you should not attempt to isolate Microsoft Excel Object Model. Cela fait partie d’Office et utilisable uniquement sur un ordinateur avec le produit Office complète installé.This is part of Office and can only be used on a computer with the full Office product installed.

  • Le composant est destiné à être utilisé comme un complément ou un logiciel enfichable, par exemple un complément dans Office ou un contrôle dans un navigateur Web.The component is intended for use as an add-in or a snap-in, for example an Office add-in or a control in a Web browser. Ces composants requièrent généralement une sorte d’inscription du schéma de défini par l’environnement d’hébergement qui dépasse le cadre du manifeste lui-même.Such components typically require some kind of registration scheme defined by the hosting environment that is beyond the scope of the manifest itself.

  • 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.The component manages a physical or virtual device for the system, for example, a device driver for a print spooler.

  • Le composant est un redistribuable Data Access.The component is a Data Access redistributable. Les applications de données requièrent généralement un redistribuable Data Access distinct doit être installé avant de pouvoir exécuter.Data applications generally require a separate Data Access redistributable to be installed before they can run. Vous ne devez pas essayer d’isoler des composants tels que le contrôle de données Microsoft ADO, OLE DB de Microsoft ou Microsoft Data Access Components (MDAC).You should not attempt to isolate components such as the Microsoft ADO Data Control, Microsoft OLE DB, or Microsoft Data Access Components (MDAC). Au lieu de cela, si votre application utilise MDAC ou SQL Server Express, vous devez les définir comme composants requis ; consultez Comment : Installer les composants requis avec une Application ClickOnce.Instead, if your application uses MDAC or SQL Server Express, you should set them as prerequisites; see How to: Install Prerequisites with a ClickOnce Application.

    Dans certains cas, il peut être possible pour le développeur du composant à reconcevoir pour COM sans inscription.In some cases, it may be possible for the developer of the component to redesign it for registration-free COM. Si ce n’est pas possible, vous pouvez toujours générer et publier des applications qui en dépendent, via le modèle d’inscription standard à l’aide du programme d’amorçage.If this is not possible, you can still build and publish applications that depend on them through the standard registration scheme using the Bootstrapper. Pour plus d’informations, consultez création de Packages de programme d’amorçage.For more information, see Creating Bootstrapper Packages.

    Un composant COM ne peut être isolé qu’une seule fois par application.A COM component can only be isolated once per application. Par exemple, vous ne pouvez pas isoler le même composant COM à partir de deux différentes bibliothèque de classes projets qui font partie de la même application.For example, you can't isolate the same COM component from two different Class Library projects that are part of the same application. Cela entraînerait un avertissement de génération et l’application ne sera pas chargé au moment de l’exécution.Doing so will result in a build warning, and the application will fail to load at run time. Pour éviter ce problème, Microsoft recommande d’encapsuler des composants COM dans une bibliothèque de classes unique.In order to avoid this problem, Microsoft recommends that you encapsulate COM components in a single class library.

    Il existe plusieurs scénarios dans quel COM, l’inscription est obligatoire sur l’ordinateur du développeur, même si le déploiement de l’application ne nécessite pas d’inscription.There are several scenarios in which COM registration is required on the developer's machine, even though the application's deployment does not require registration. Le Isolated propriété requiert que l’inscription du composant COM sur l’ordinateur du développeur afin de générer automatiquement le manifeste pendant la génération.The Isolated property requires that the COM component be registered on the developer's machine in order to auto-generate the manifest during the build. Il n’existe aucune fonctionnalité de capture de l’inscription qui appellent l’inscription automatique pendant la génération.There are no registration-capturing capabilities that invoke the self-registration during the build. En outre, toutes les classes ne sont pas explicitement définies dans la bibliothèque de types seront répercutées dans le manifeste.Also, any classes not explicitly defined in the type library will not be reflected in the manifest. Lorsque vous utilisez un composant COM avec un manifeste existant, comme une référence native, le composant peut-être pas être inscrite au moment du développement.When using a COM component with a pre-existing manifest, such as a native reference, the component may not need to be registered at development time. Toutefois, l’inscription est requise si le composant est un contrôle ActiveX et que vous souhaitez inclure dans le boîte à outils et le Concepteur Windows Forms.However, registration is required if the component is an ActiveX control and you want to include it in the Toolbox and the Windows Forms designer.

Voir aussiSee also