Freigeben über


Registrieren von Assemblys mit COM

Sie können ein Befehlszeilentool namens Assemblyregistrierungstool (Regasm.exe) ausführen, um eine Assembly für die Verwendung mit COM zu registrieren oder aufzuheben. Regasm.exe fügt der Systemregistrierung Informationen zur Klasse hinzu, damit COM-Clients die .NET Framework-Klasse transparent verwenden können. Die RegistrationServices Klasse stellt die entsprechende Funktionalität bereit.

Eine verwaltete Komponente muss in der Windows-Registrierung registriert werden, bevor sie von einem COM-Client aktiviert werden kann. In der folgenden Tabelle werden die Schlüssel angezeigt, die Regasm.exe normalerweise der Windows-Registrierung hinzufügt. (0000000 gibt den tatsächlichen GUID-Wert an.)

Globale eindeutige Kennung (GUID) BESCHREIBUNG Registrierungsschlüssel
CLSID Klassenbezeichner HKEY_CLASSES_ROOT\CLSID\{000…000}
IID Schnittstellenbezeichner HKEY_CLASSES_ROOT\Interface\{000…000}
LIBID Bibliotheksbezeichner HKEY_CLASSES_ROOT\TypeLib\{000…000}
ProgID Programmkennung HKEY_CLASSES_ROOT\000... 000

Unter dem HKCR\CLSID\{0000...0000}-Schlüssel wird der Standardwert auf die ProgID der Klasse festgelegt, und zwei neue benannte Werte, Klasse und Assembly, werden hinzugefügt. Die Common Language Runtime liest den Wert „Assembly“ aus der Registrierung aus und übergibt ihn an den Assemblyresolver der Runtime. Der Assemblylöser versucht, die Assembly basierend auf Assemblyinformationen wie dem Namen und der Versionsnummer zu suchen. Damit der Assemblylöser eine Assembly finden kann, muss sich die Assembly an einem der folgenden Speicherorte befinden:

  • Im globalen Assemblycache (die Assembly muss einen starken Namen haben)

  • Im Anwendungsverzeichnis. Assemblies, die aus dem Anwendungspfad geladen wurden, sind nur von dieser Anwendung aus zugänglich.

  • Entlang eines Dateipfads, der mit der Option /codebase zu Regasm.exeangegeben ist.

Regasm.exe erstellt auch den InProcServer32-Schlüssel unter dem HKCR\CLSID\{0000…0000}-Schlüssel. Der Standardwert für den Schlüssel wird auf den Namen der DLL festgelegt, die die Common Language Runtime (Mscoree.dll) initialisiert.

Untersuchen von Registrierungseinträgen

COM-Interoperabilität stellt eine standardmäßige Klassenfabrikimplementierung bereit, um eine Instanz einer beliebigen .NET Framework-Klasse zu erstellen. Clients können DllGetClassObject für die verwaltete DLL aufrufen, um eine Klassenfactory abzurufen und Objekte zu erstellen, genau wie bei jeder anderen COM-Komponente.

Für den InprocServer32 Unterschlüssel wird anstelle einer herkömmlichen COM-Typbibliothek ein Verweis auf Mscoree.dll angezeigt, um anzugeben, dass die Common Language Runtime das verwaltete Objekt erstellt.

Siehe auch