Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Bereitstellung von älteren COM-Komponenten war traditionell eine schwierige Aufgabe. Komponenten müssen global registriert werden und können somit unerwünschte Nebenwirkungen zwischen überlappenden Anwendungen verursachen. Diese Situation ist in der Regel kein Problem in .NET Framework-Anwendungen, da Komponenten vollständig von einer Anwendung isoliert sind oder nebeneinander kompatibel sind. Mit Visual Studio können Sie isolierte COM-Komponenten auf dem Windows-Betriebssystem bereitstellen.
ClickOnce bietet einen einfachen und sicheren Mechanismus für die Bereitstellung Ihrer .NET-Anwendungen. Wenn Ihre Anwendungen jedoch ältere COM-Komponenten verwenden, müssen Sie zusätzliche Schritte für die Bereitstellung ausführen. In diesem Thema wird beschrieben, wie isolierte COM-Komponenten bereitgestellt und systemeigene Komponenten referenziert werden (z. B. aus Visual Basic 6.0 oder Visual C++).
Weitere Informationen zum Bereitstellen isolierter COM-Komponenten finden Sie unter Vereinfachen der App-Bereitstellung mit ClickOnce und Registration-Free COM.
Registrierung kostenlos COM
Registrierungsfreie COM ist eine neue Technologie zum Bereitstellen und Aktivieren isolierter COM-Komponenten. Es funktioniert, indem alle Typbibliotheks- und Registrierungsinformationen der Komponente, die in der Regel in der Systemregistrierung installiert sind, in eine XML-Datei eingefügt werden, die als Manifest bezeichnet wird, die im selben Ordner wie die Anwendung gespeichert ist.
Das Isolieren einer COM-Komponente erfordert, dass sie auf dem Computer des Entwicklers registriert ist, aber nicht auf dem Computer des Endbenutzers registriert werden muss. Um eine COM-Komponente zu isolieren, müssen Sie lediglich die isolierte Eigenschaft des Verweises auf True festlegen. Standardmäßig ist diese Eigenschaft auf "False" festgelegt, die angibt, dass sie als registrierter COM-Verweis behandelt werden soll. Wenn diese Eigenschaft True ist, wird während der Build-Zeit ein Manifest für diese Komponente generiert. Außerdem werden die entsprechenden Dateien während der Installation in den Anwendungsordner kopiert.
Wenn der Manifestgenerator auf einen isolierten COM-Verweis trifft, listet er alle CoClass Einträge in der Typbibliothek der Komponente auf, wobei jeder Eintrag mit den entsprechenden Registrierungsdaten übereinstimmen und Manifestdefinitionen für alle COM-Klassen in der Typbibliotheksdatei generiert werden.
Bereitstellen von registrierungsfreien COM-Komponenten mithilfe von ClickOnce
ClickOnce-Bereitstellungstechnologie eignet sich gut für die Bereitstellung isolierter COM-Komponenten, da sowohl ClickOnce als auch registrierungsfreie COM erfordern, dass eine Komponente über ein Manifest verfügt, um bereitgestellt werden zu können.
In der Regel sollte der Autor der Komponente ein Manifest bereitstellen. Wenn dies nicht der Grund ist, kann Visual Studio automatisch ein Manifest für eine COM-Komponente generieren. Die Manifestgenerierung erfolgt während des ClickOnce-Veröffentlichungsprozesses; weitere Informationen finden Sie unter Veröffentlichen von ClickOnce-Anwendungen. Mit diesem Feature können Sie auch ältere Komponenten nutzen, die Sie in früheren Entwicklungsumgebungen erstellt haben, z. B. Visual Basic 6.0.
Es gibt zwei Möglichkeiten, wie ClickOnce COM-Komponenten bereitstellt:
Verwenden Sie den Bootstrapper, um Ihre COM-Komponenten bereitzustellen; dies funktioniert auf allen unterstützten Plattformen.
Verwenden Sie die systemeigene Komponentenisolation (auch als registrierungsfreie COM-Bereitstellung bezeichnet).
Beispiel für das Isolieren und Bereitstellen einer einfachen COM-Komponente
Um die Bereitstellung von registrierungsfreien COM-Komponenten zu veranschaulichen, erstellt dieses Beispiel eine Windows-basierte Anwendung in Visual Basic, die auf eine isolierte systemeigene COM-Komponente verweist, die mit Visual Basic 6.0 erstellt wurde, und stellt sie mithilfe von ClickOnce bereit.
Zuerst müssen Sie die systemeigene COM-Komponente erstellen:
So erstellen Sie eine systemeigene COM-Komponente
Klicken Sie in Visual Basic 6.0 im Menü "Datei " auf "Neu" und dann auf "Projekt".
Wählen Sie im Dialogfeld "Neues Projekt " den Visual Basic-Knoten und dann ein ActiveX-DLL-Projekt aus. Geben Sie im Feld "Name " den Namen
VB6Helloein.Hinweis
Nur ActiveX DLL- und ActiveX Control-Projekttypen werden mit registrierungsfreier COM unterstützt; ActiveX EXE- und ActiveX Document-Projekttypen werden nicht unterstützt.
Doppelklicken Sie im Projektmappen-Explorer auf Class1.vb, um den Text-Editor zu öffnen.
Fügen Sie in Class1.vb den folgenden Code nach dem generierten Code für die
NewMethode hinzu:Public Sub SayHello() MsgBox "Message from the VB6Hello COM component" End SubErstellen Sie die Komponente. Klicken Sie im Menü "Erstellen" auf "Lösung erstellen".
Hinweis
Registrierungsfreie COM unterstützt ausschließlich DLLs und COM-Steuerelement-Projekttypen. Sie können EXEs nicht mit registrierungsfreiem COM verwenden.
Jetzt können Sie eine Windows-basierte Anwendung erstellen und einen Verweis auf die COM-Komponente hinzufügen.
So erstellen Sie eine Windows-basierte Anwendung mit einer COM-Komponente
Klicken Sie mit Visual Basic im Menü "Datei " auf "Neu" und dann auf "Projekt".
Wählen Sie im Dialogfeld "Neues Projekt " den Visual Basic-Knoten und dann "Windows-Anwendung" aus. Geben Sie im Feld "Name " den Namen
RegFreeComDemoein.Klicken Sie im Projektmappen-Explorer auf die Schaltfläche "Alle Dateien anzeigen ", um die Projektverweise anzuzeigen.
Klicken Sie mit der rechten Maustaste auf den Knoten "Verweise ", und wählen Sie im Kontextmenü " Verweis hinzufügen " aus.
Klicken Sie im Dialogfeld "Verweis hinzufügen " auf die Registerkarte " Durchsuchen ", navigieren Sie zu VB6Hello.dll, und wählen Sie sie aus.
In der Referenzliste wird ein VB6Hello-Verweis angezeigt.
Zeigen Sie auf die Toolbox, wählen Sie ein Schaltflächen-Steuerelement aus, und ziehen Sie es in das Formular "Form1 ".
Legen Sie im Eigenschaftenfenster die Texteigenschaft der Schaltfläche auf "Hello" fest.
Doppelklicken Sie auf die Schaltfläche, um Handlercode hinzuzufügen, und fügen Sie in der Codedatei Code hinzu, damit der Handler wie folgt vorliest:
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 SubFühren Sie die Anwendung aus. Klicken Sie im Menü " Debuggen " auf " Debuggen starten".
Als Nächstes müssen Sie das Steuerelement isolieren. Jede com-Komponente, die Ihre Anwendung verwendet, wird in Ihrem Projekt als COM-Referenz dargestellt. Diese Verweise sind unter dem Verweise-Knoten im Projektmappen-Explorer-Fenster sichtbar. (Beachten Sie, dass Sie Verweise entweder direkt mithilfe des Befehls " Verweis hinzufügen " im Menü "Projekt " oder indirekt durch Ziehen eines ActiveX-Steuerelements auf das Formular hinzufügen können.)
Die folgenden Schritte zeigen, wie die COM-Komponente isoliert und die aktualisierte Anwendung veröffentlicht wird, die das isolierte Steuerelement enthält:
So isolieren Sie eine COM-Komponente
Wählen Sie im Projektmappen-Explorer im Knoten "Verweise " den VB6Hello-Verweis aus.
Ändern Sie im Eigenschaften-Fenster den Wert der isolierten Eigenschaft von False auf True.
Klicken Sie im Menü "Erstellen" auf "Lösung erstellen".
Wenn Sie nun F5 drücken, funktioniert die Anwendung erwartungsgemäß, aber sie wird jetzt unter der registrierungsfreien COM ausgeführt. Um dies zu beweisen, versuchen Sie, die Registrierung der VB6Hello.dll-Komponente aufzuheben und RegFreeComDemo1.exe außerhalb der Visual Studio-IDE auszuführen. Dieses Mal, wenn auf die Schaltfläche geklickt wird, funktioniert sie weiterhin. Wenn Sie das Anwendungsmanifest vorübergehend umbenennen, schlägt es erneut fehl.
Hinweis
Sie können das Fehlen einer COM-Komponente simulieren, indem Sie die Registrierung vorübergehend aufheben. Öffnen Sie eine Eingabeaufforderung, wechseln Sie zu Ihrem Systemordner, indem Sie cd /d %windir%\system32 eingeben, und registrieren Sie die Komponente ab, indem Sie regsvr32 /u VB6Hello.dll eingeben. Sie können es erneut registrieren, indem Sie regsvr32 VB6Hello.dll eingeben.
Der letzte Schritt besteht darin, die Anwendung mithilfe von ClickOnce zu veröffentlichen:
So veröffentlichen Sie ein Anwendungsupdate mit einer isolierten COM-Komponente
Klicken Sie im Menü "Erstellen " auf "RegFreeComDemo veröffentlichen".
Der Veröffentlichungsassistent wird angezeigt.
Geben Sie im Veröffentlichungs-Assistenten einen Speicherort auf dem Datenträger des lokalen Computers an, an dem Sie auf die veröffentlichten Dateien zugreifen und diese überprüfen können.
Klicken Sie auf "Fertig stellen ", um die Anwendung zu veröffentlichen.
Wenn Sie die veröffentlichten Dateien untersuchen, werden Sie feststellen, dass die Datei sysmon.ocx enthalten ist. Das Steuerelement ist völlig isoliert für diese Anwendung, d. h., wenn der Computer des Endbenutzers eine andere Anwendung mit einer anderen Version des Steuerelements verwendet, kann es diese Anwendung nicht beeinträchtigen.
Verweisen auf systemeigene Assemblys
Visual Studio unterstützt Verweise auf systemeigene Visual Basic 6.0- oder C++-Assemblys; Solche Verweise werden als systemeigene Verweise bezeichnet. Sie können feststellen, ob ein Verweis systemintern ist, indem Sie überprüfen, ob die Dateitypeigenschaft auf "Native" oder "ActiveX" festgelegt ist.
Um einen nativen Verweis hinzuzufügen, verwenden Sie den Befehl " Verweis hinzufügen ", und navigieren Sie zum Manifest. Einige Komponenten platzieren das Manifest in der DLL. In diesem Fall können Sie einfach die DLL selbst auswählen, und Visual Studio fügt sie als systemeigenen Verweis hinzu, wenn erkannt wird, dass die Komponente ein eingebettetes Manifest enthält. Visual Studio enthält auch automatisch alle abhängigen Dateien oder Assemblys, die im Manifest aufgelistet sind, wenn sie sich im selben Ordner wie die referenzierte Komponente befinden.
Die COM-Steuerelementisolation erleichtert die Bereitstellung von COM-Komponenten, die noch nicht über Manifeste verfügen. Wenn jedoch eine Komponente mit einem Manifest bereitgestellt wird, können Sie direkt auf das Manifest verweisen. Tatsächlich sollten Sie das vom Autor der Komponente bereitgestellte Manifest immer verwenden, wenn möglich, anstatt die Isolated-Eigenschaft zu verwenden.
Einschränkungen der Bereitstellung von registrierungsfreien COM-Komponenten
Registrierungsfreie COM bietet gegenüber herkömmlichen Bereitstellungstechniken klare Vorteile.
Nicht jede Komponente ist ein geeigneter Kandidat für die registrierungsfreie COM. Eine Komponente ist nicht geeignet, wenn eine der folgenden Bedingungen zutrifft:
Die Komponente ist ein Out-of-Process-Server. EXE-Server werden nicht unterstützt; nur DLLs werden unterstützt.
Die Komponente ist Teil des Betriebssystems oder eine Systemkomponente, z. B. XML, Browserkomponente oder Microsoft Data Access Components (MDAC). Sie sollten der Umverteilungsrichtlinie des Komponentenautors folgen; wenden Sie sich an Ihren Anbieter.
Die Komponente ist Teil einer Anwendung, z. B. Microsoft Office. Sie sollten beispielsweise nicht versuchen, das Microsoft Excel-Objektmodell zu isolieren. Dies ist Teil von Office und kann nur auf einem Computer verwendet werden, auf dem das vollständige Office-Produkt installiert ist.
Die Komponente ist für die Verwendung als Add-In oder als Snap-In vorgesehen, z. B. ein Office-Add-In oder ein Steuerelement in einem Webbrowser. Solche Komponenten erfordern in der Regel eine Art von Registrierungsschema, das von der Hostingumgebung definiert wird, die über den Umfang des Manifests selbst hinausgeht.
Die Komponente verwaltet ein physisches oder virtuelles Gerät für das System, z. B. einen Gerätetreiber für einen Druckerspooler.
Die Komponente ist eine weiterverteilbare Datenzugriffskomponente. Datenanwendungen erfordern in der Regel eine separate Weitergabe-Komponente für den Datenzugriff, bevor sie ausgeführt werden können. Sie sollten nicht versuchen, Komponenten wie das Microsoft ADO-Datensteuerelement, Microsoft OLE DB oder Microsoft Data Access Components (MDAC) zu isolieren. Wenn Ihre Anwendung stattdessen MDAC oder SQL Server Express verwendet, sollten Sie sie als Voraussetzungen festlegen. siehe How to: Install Prerequisites with a ClickOnce Application.
In einigen Fällen kann es für den Entwickler der Komponente möglich sein, sie für die registrierungsfreie COM neu zu gestalten. Wenn dies nicht möglich ist, können Sie weiterhin Anwendungen erstellen und veröffentlichen, die vom Standardregistrierungsschema mit dem Bootstrapper abhängen. Weitere Informationen finden Sie unter Erstellen von Bootstrapperpaketen.
Eine COM-Komponente kann nur einmal pro Anwendung isoliert werden. Sie können z. B. die gleiche COM-Komponente nicht aus zwei verschiedenen Klassenbibliotheksprojekten isolieren, die Teil derselben Anwendung sind. Dies führt zu einer Buildwarnung, und die Anwendung kann zur Laufzeit nicht geladen werden. Um dieses Problem zu vermeiden, empfiehlt Microsoft, COM-Komponenten in einer einzigen Klassenbibliothek zu kapseln.
Es gibt mehrere Szenarien, in denen die COM-Registrierung auf dem Computer des Entwicklers erforderlich ist, obwohl die Bereitstellung der Anwendung keine Registrierung erfordert. Für
Isolateddie Eigenschaft muss die COM-Komponente auf dem Computer des Entwicklers registriert werden, um das Manifest während des Builds automatisch zu generieren. Es gibt keine Registrierungserfassungsfunktionen, die die Selbstregistrierung während des Builds aufrufen. Außerdem werden alle Klassen, die nicht explizit in der Typbibliothek definiert sind, nicht im Manifest wiedergegeben. Wenn Sie eine COM-Komponente mit einem bereits vorhandenen Manifest verwenden, z. B. einen systemeigenen Verweis, muss die Komponente möglicherweise zur Entwicklungszeit nicht registriert werden. Die Registrierung ist jedoch erforderlich, wenn es sich bei der Komponente um ein ActiveX-Steuerelement handelt und Sie es in die Toolbox und den Windows Forms-Designer aufnehmen möchten.