Delen via


COM-onderdelen implementeren met ClickOnce

De implementatie van verouderde COM-onderdelen is traditioneel een moeilijke taak geweest. Onderdelen moeten globaal worden geregistreerd en kunnen dus ongewenste bijwerkingen veroorzaken tussen overlappende toepassingen. Deze situatie is over het algemeen geen probleem in .NET Framework-toepassingen omdat onderdelen volledig zijn geïsoleerd voor een toepassing of compatibel zijn met elkaar. Met Visual Studio kunt u geïsoleerde COM-onderdelen implementeren op het Windows-besturingssysteem.

ClickOnce biedt een eenvoudig en veilig mechanisme voor het implementeren van uw .NET-toepassingen. Als uw toepassingen echter verouderde COM-onderdelen gebruiken, moet u aanvullende stappen uitvoeren om ze te implementeren. In dit onderwerp wordt beschreven hoe u geïsoleerde COM-onderdelen implementeert en verwijst naar systeemeigen onderdelen (bijvoorbeeld van Visual Basic 6.0 of Visual C++).

Zie De implementatie van apps vereenvoudigen met ClickOnce en Registration-Free COM voor meer informatie over het implementeren van geïsoleerde COM-onderdelen.

COM zonder registratie

Com zonder registratie is een nieuwe technologie voor het implementeren en activeren van geïsoleerde COM-onderdelen. Het werkt door alle typebibliotheek- en registratiegegevens van het onderdeel in het systeemregister te plaatsen in een XML-bestand dat een manifest wordt genoemd, opgeslagen in dezelfde map als de toepassing.

Voor het isoleren van een COM-onderdeel moet het worden geregistreerd op de computer van de ontwikkelaar, maar het hoeft niet te worden geregistreerd op de computer van de eindgebruiker. Als u een COM-onderdeel wilt isoleren, hoeft u alleen maar de Isolated-eigenschap van de verwijzing in te stellen op Waar. Deze eigenschap is standaard ingesteld op False, waarmee wordt aangegeven dat deze moet worden behandeld als een geregistreerde COM-verwijzing. Als deze eigenschap Waar is, wordt er tijdens de build een manifest gegenereerd voor dit onderdeel. Het zorgt er ook voor dat de bijbehorende bestanden tijdens de installatie naar de toepassingsmap worden gekopieerd.

Wanneer de manifestgenerator een geïsoleerde COM-verwijzing tegenkomt, worden alle vermeldingen in de CoClass typebibliotheek van het onderdeel opgesomd, waarbij elke vermelding overeenkomt met de bijbehorende registratiegegevens en manifestdefinities worden gegenereerd voor alle COM-klassen in het typebibliotheekbestand.

COM-onderdelen zonder registratie implementeren met ClickOnce

ClickOnce-implementatietechnologie is geschikt voor het implementeren van geïsoleerde COM-onderdelen, omdat zowel ClickOnce als registratievrije COM vereisen dat een onderdeel een manifest heeft om te worden geïmplementeerd.

Normaal gesproken moet de auteur van het onderdeel een manifest opgeven. Als dat niet zo is, kan Visual Studio echter automatisch een manifest genereren voor een COM-onderdeel. Het genereren van het manifest wordt uitgevoerd tijdens het ClickOnce Publish-proces; Zie ClickOnce-toepassingen publiceren voor meer informatie. Met deze functie kunt u ook gebruikmaken van verouderde onderdelen die u in eerdere ontwikkelomgevingen hebt gemaakt, zoals Visual Basic 6.0.

Er zijn twee manieren waarop ClickOnce COM-onderdelen implementeert:

  • Gebruik de bootstrapper om uw COM-onderdelen te implementeren; dit werkt op alle ondersteunde platforms.

  • Gebruik de implementatie van systeemeigen onderdeelisolatie (ook wel com-implementatie zonder registratie genoemd).

Voorbeeld van het isoleren en implementeren van een eenvoudig COM-onderdeel

Om de implementatie van com-onderdelen zonder registratie te demonstreren, maakt dit voorbeeld een Windows-toepassing in Visual Basic die verwijst naar een geïsoleerd systeemeigen COM-onderdeel dat is gemaakt met Visual Basic 6.0 en deze implementeert met ClickOnce.

Eerst moet u het systeemeigen COM-onderdeel maken:

Een systeemeigen COM-onderdeel maken
  1. Met Visual Basic 6.0 klikt u in het menu Bestand op Nieuw en vervolgens op Project.

  2. Selecteer in het dialoogvenster Nieuw project het Visual Basic-knooppunt en selecteer een ActiveX DLL-project . Typ VB6Hello in het vak Naam.

    Opmerking

    Alleen ActiveX DLL- en ActiveX Control-projecttypen worden ondersteund met COM zonder registratie; ActiveX EXE- en ActiveX-documentprojecttypen worden niet ondersteund.

  3. Dubbelklik in Solution Explorer op Class1.vb om de teksteditor te openen.

  4. Voeg in Class1.vb de volgende code toe na de gegenereerde code voor de New methode:

    Public Sub SayHello()
       MsgBox "Message from the VB6Hello COM component"
    End Sub
    
  5. Bouw het onderdeel. Klik in het menu Bouwen op Oplossing bouwen.

Opmerking

COM zonder registratie ondersteunt alleen DLL's en COM-controles voor projecttypen. U kunt GEEN EXE's gebruiken met COM zonder registratie.

U kunt nu een Windows-toepassing maken en er een verwijzing naar het COM-onderdeel aan toevoegen.

Een Windows-toepassing maken met behulp van een COM-onderdeel
  1. Klik met Visual Basic in het menu Bestand op Nieuw en vervolgens op Project.

  2. Selecteer in het dialoogvenster Nieuw project het Visual Basic-knooppunt en selecteer Windows-toepassing. Typ in het Naam vak RegFreeComDemo.

  3. Klik in Solution Explorer op de knop Alle bestanden weergeven om de projectverwijzingen weer te geven.

  4. Klik met de rechtermuisknop op het knooppunt Verwijzingen en selecteer Verwijzing toevoegen in het contextmenu.

  5. Klik in het dialoogvenster Verwijzing toevoegen op het tabblad Bladeren, navigeer naar VB6Hello.dll en selecteer het.

    Er wordt een VB6Hello-verwijzing weergegeven in de lijst met verwijzingen.

  6. Wijs de Toolbox aan, selecteer een knopbesturingselement en sleep het naar de Form1 vorm.

  7. Stel in het venster Eigenschappen de eigenschap Tekst van de knop in op Hallo.

  8. Dubbelklik op de knop om handlercode toe te voegen en voeg in het codebestand code toe zodat de handler als volgt wordt gelezen:

    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. Voer de toepassing uit. Klik in het menu Foutopsporing op Foutopsporing starten.

    Vervolgens moet u het besturingselement isoleren. Elk COM-onderdeel dat door uw toepassing wordt gebruikt, wordt in uw project weergegeven als COM-verwijzing. Deze verwijzingen zijn zichtbaar onder het knooppunt Verwijzingen in het venster Solution Explorer . (U kunt verwijzingen rechtstreeks toevoegen met behulp van de opdracht Verwijzing toevoegen in het menu Project of indirect door een ActiveX-besturingselement naar uw formulier te slepen.)

    De volgende stappen laten zien hoe u het COM-onderdeel kunt isoleren en de bijgewerkte toepassing met het geïsoleerde besturingselement publiceert:

Een COM-onderdeel isoleren
  1. Selecteer in Solution Explorer in het knooppunt Verwijzingen de VB6Hello-verwijzing .

  2. Wijzig in het venster Eigenschappen de waarde van de geïsoleerde eigenschap van Onwaar in Waar.

  3. Klik in het menu Bouwen op Oplossing bouwen.

    Wanneer u nu op F5 drukt, werkt de toepassing zoals verwacht, maar deze wordt nu uitgevoerd onder com zonder registratie. U kunt dit bewijzen door de registratie van het VB6Hello.dll onderdeel ongedaan te maken en RegFreeComDemo1.exe buiten de Visual Studio IDE uit te voeren. Deze keer wanneer op de knop wordt geklikt, werkt deze nog steeds. Als u de naam van het toepassingsmanifest tijdelijk wijzigt, mislukt deze opnieuw.

Opmerking

U kunt de afwezigheid van een COM-onderdeel simuleren door de registratie tijdelijk ongedaan te maken. Open een opdrachtprompt, ga naar de systeemmap door te typen cd /d %windir%\system32 en deregistreer de component door te typen regsvr32 /u VB6Hello.dll. U kunt het opnieuw registreren door te typen regsvr32 VB6Hello.dll.

De laatste stap is het publiceren van de toepassing met behulp van ClickOnce:

Een toepassingsupdate publiceren met een geïsoleerd COM-onderdeel
  1. Klik in het menu Build op RegFreeComDemo publiceren.

    De wizard Publiceren wordt weergegeven.

  2. Geef in de wizard Publiceren een locatie op op de schijf van de lokale computer waar u de gepubliceerde bestanden kunt openen en onderzoeken.

  3. Klik op Voltooien om de toepassing te publiceren.

    Als u de gepubliceerde bestanden bekijkt, ziet u dat het bestand sysmon.ocx is opgenomen. Het besturingselement is volledig geïsoleerd voor deze toepassing, wat betekent dat als de computer van de eindgebruiker een andere toepassing heeft met een andere versie van het besturingselement, deze toepassing niet kan verstoren.

Verwijzingen naar systeemeigen assembly's

Visual Studio ondersteunt verwijzingen naar systeemeigen Visual Basic 6.0- of C++-assembly's; dergelijke verwijzingen worden systeemeigen verwijzingen genoemd. U kunt zien of een verwijzing systeemeigen is door te controleren of de eigenschap Bestandstype is ingesteld op Native of ActiveX.

Als u een systeemeigen verwijzing wilt toevoegen, gebruikt u de opdracht Verwijzing toevoegen en bladert u naar het manifest. Sommige onderdelen plaatsen het manifest in het DLL-bestand. In dit geval kunt u gewoon het DLL-bestand zelf kiezen en Visual Studio voegt het toe als systeemeigen verwijzing als het detecteert dat het onderdeel een ingesloten manifest bevat. Visual Studio bevat ook automatisch afhankelijke bestanden of assembly's die in het manifest worden vermeld als ze zich in dezelfde map bevinden als het onderdeel waarnaar wordt verwezen.

Met COM-besturingsisolatie kunt u eenvoudig COM-onderdelen implementeren die nog geen manifesten hebben. Als een onderdeel echter wordt geleverd met een manifest, kunt u rechtstreeks naar het manifest verwijzen. In feite moet u altijd het manifest gebruiken dat is opgegeven door de auteur van het onderdeel, waar mogelijk in plaats van de geïsoleerde eigenschap te gebruiken.

Beperkingen van com-onderdeelimplementatie zonder registratie

Com zonder registratie biedt duidelijke voordelen ten opzichte van traditionele implementatietechnieken.

Niet elk onderdeel is een geschikte kandidaat voor registratievrije COM. Een onderdeel is niet geschikt als een van de volgende voorwaarden waar is:

  • Het onderdeel is een out-of-process-server. EXE-servers worden niet ondersteund; alleen DLL's worden ondersteund.

  • Het onderdeel maakt deel uit van het besturingssysteem of is een systeemonderdeel, zoals XML, een browseronderdeel of Microsoft Data Access Components (MDAC). U moet het herdistributiebeleid van de auteur van het onderdeel volgen; neem contact op met uw leverancier.

  • Het onderdeel maakt deel uit van een toepassing, zoals Microsoft Office. U moet bijvoorbeeld niet proberen microsoft Excel-objectmodel te isoleren. Dit is onderdeel van Office en kan alleen worden gebruikt op een computer waarop het volledige Office-product is geïnstalleerd.

  • Het onderdeel is bedoeld voor gebruik als een invoegtoepassing of een module, bijvoorbeeld een Office-invoegtoepassing of een besturingselement in een webbrowser. Voor dergelijke onderdelen is doorgaans een soort registratieschema vereist dat is gedefinieerd door de hostingomgeving die buiten het bereik van het manifest zelf valt.

  • Het onderdeel beheert een fysiek of virtueel apparaat voor het systeem, bijvoorbeeld een apparaatstuurprogramma voor een afdrukspooler.

  • Het onderdeel is een herdistribueerbare Data Access. Voor gegevenstoepassingen moet over het algemeen een afzonderlijk herdistribueerbaar Data Access-exemplaar worden geïnstalleerd voordat ze kunnen worden uitgevoerd. U moet geen onderdelen zoals Microsoft ADO-gegevensbeheer, Microsoft OLE DB of Microsoft Data Access Components (MDAC) isoleren. Als uw toepassing in plaats daarvan MDAC of SQL Server Express gebruikt, moet u deze instellen als vereisten; zie Procedure: Vereisten installeren met een ClickOnce-toepassing.

    In sommige gevallen kan de ontwikkelaar van het onderdeel het opnieuw ontwerpen voor registratievrije COM. Als dit niet mogelijk is, kunt u nog steeds toepassingen bouwen en publiceren die hiervan afhankelijk zijn via het standaardregistratieschema met behulp van de Bootstrapper. Zie Bootstrapper-pakketten maken voor meer informatie.

    Een COM-onderdeel kan slechts eenmaal per toepassing worden geïsoleerd. U kunt bijvoorbeeld hetzelfde COM-onderdeel niet isoleren van twee verschillende klassebibliotheekprojecten die deel uitmaken van dezelfde toepassing. Als u dit doet, resulteert dit in een buildwaarschuwing en kan de toepassing niet worden geladen tijdens de uitvoering. Om dit probleem te voorkomen, raadt Microsoft u aan COM-onderdelen in één klassebibliotheek in te kapselen.

    Er zijn verschillende scenario's waarin COM-registratie vereist is op de computer van de ontwikkelaar, zelfs als de implementatie van de toepassing geen registratie vereist. De Isolated eigenschap vereist dat het COM-onderdeel wordt geregistreerd op de computer van de ontwikkelaar om het manifest automatisch te genereren tijdens de build. Er zijn geen mogelijkheden voor het vastleggen van registraties die de zelfregistratie tijdens het bouwproces aanroepen. Bovendien worden alle klassen die niet expliciet zijn gedefinieerd in de typebibliotheek, niet weergegeven in het manifest. Wanneer u een COM-onderdeel gebruikt met een bestaand manifest, zoals een systeemeigen verwijzing, hoeft het onderdeel mogelijk niet te worden geregistreerd tijdens de ontwikkeling. Registratie is echter vereist als het onderdeel een ActiveX-besturingselement is en u het wilt opnemen in de Werkset en de Ontwerpfunctie voor Windows Forms.