Registrieren von Assemblys mit COM
Um eine Assembly in COM zu registrieren oder eine Registrierung aufzuheben, können Sie ein Befehlszeilentool namens Assembly Registration-Tool (Regasm.exe) ausführen. Mit Regasm.exe werden Informationen über die Klasse zur Systemregistrierung hinzugefügt, sodass COM-Clients die .NET-Klasse transparent verwenden können. Die RegistrationServices-Klasse stellt die entsprechenden Funktionen zur Verfügung.
Eine verwaltete Komponente muss in der Windows-Registrierung registriert werden, damit sie von COM-Clients aktiviert werden kann. In der folgenden Tabelle werden die Schlüssel dargestellt, die durch Regasm.exe gewöhnlich in der Windows-Registrierung eingetragen werden. (000000 gibt den eigentlichen GUID-Wert an.)
GUID |
Description |
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 |
Programmbezeichner |
HKEY_CLASSES_ROOT\000…000 |
Unter dem HKCR\CLSID\{0000…0000}-Schlüssel ist der Standardwert auf die ProgID der Klasse festgelegt, und zwei neue benannte Werte, Class und Assembly, werden hinzugefügt. Der Assemblywert wird von Common Language Runtime in der Registrierung gelesen und an den Assemblyresolver von Common Language Runtime weitergeleitet. Mithilfe von Assemblyinformationen wie Name und Versionsnummer sucht der Assemblyresolver nach der Assembly. Zum Suchen einer Assembly durch den Assemblyresolver muss sich die Assembly an einem der folgenden Speicherorte befinden:
Globaler Assemblycache (es muss sich um eine Assembly mit starkem Namen handeln).
Anwendungsverzeichnis. Auf Assemblys, die aus dem Anwendungspfad geladen werden, kann nur aus der Anwendung zugegriffen werden.
Dateipfad zu Regasm.exe, der mit der /codebase-Option festgelegt wurde.
Regasm.exe erstellt auch den InProcServer32-Schlüssel unter dem HKCR\CLSID\{0000…0000}-Schlüssel. Als Standardwert für den Schlüssel wird der Name der DLL-Datei festgelegt, die die Common Language Runtime initialisiert (Mscoree.dll ).
Untersuchen von Registrierungseinträgen
In COM-Interop steht eine standardmäßige Klassenfactoryimplementierung zum Erstellen einer Instanz einer beliebigen .NET Framework-Klasse zur Verfügung. Clients können DllGetClassObject für die verwaltete DLL-Datei aufrufen, um wie für eine beliebige andere COM-Komponente eine Klassenfactory zu erhalten und Objekte zu erstellen.
Anstelle der traditionellen COM-Typbibliothek wird ein Verweis auf Mscoree.dll angezeigt. Dadurch wird signalisiert, dass Common Language Runtime das verwaltete Objekt erstellt.
Siehe auch
Aufgaben
Gewusst wie: Verweisen auf .NET-Typen in COM