Registrieren einer Klasse bei der Installation

Wenn eine Klasse wie die meisten Anwendungen jederzeit für Clients verfügbar sein soll, registrieren Sie sie in der Regel über ein Installations- und Setupprogramm. Dies bedeutet, dass Informationen über die Anwendung in die Registrierung aufgenommen werden, einschließlich wie und wo ihre Objekte instanziiert werden sollen. Diese Informationen müssen für alle CLSIDs registriert werden. Andere Informationen sind optional. Tools wie Regsvr32 erleichtern das Schreiben eines Setupprogramms, das Server bei der Installation registriert.

Wenn Sie sich nicht auf Systemstandardeinstellungen verlassen, gibt es zwei wichtige Schlüssel in der Registrierung: die CLSID und die AppID. Zu den wichtigen Informationen unter diesen Schlüsseln gehört, wie das Objekt instanziiert werden soll. Objekte können als in-process, out-of-process local oder out-of-process remote festgelegt werden.

Unter dem AppID-Schlüssel befinden sich mehrere Werte, die spezifische Informationen für diese Anwendung definieren. Dazu gehören RemoteServerName und ActivateAtStorage,die beide verwendet werden können, um einem Client das Erstellen eines Objekts zu ermöglichen, wobei der Client keine integrierten Kenntnisse über den Speicherort des Servers hat. (Weitere Informationen zur Remoteinstanziierung finden Sie unter Suchen eines Remoteobjekts und Hilfsfunktionen für die Instanzerstellung.)

Ein Server kann auch als Dienst installiert oder unter einem bestimmten Benutzerkonto ausgeführt werden. Weitere Informationen finden Sie unter Installing as a Service Application.

Ein Server oder ROT-Objekt, das kein Dienst ist oder unter einem bestimmten Benutzerkonto ausgeführt wird, kann als "Activate as activator"-Server bezeichnet werden. Für diese Server müssen der Sicherheitskontext und die Fensterstation/der Desktop des Clients mit dem des Servers übereinstimmen. Ein Client, der versucht, eine Verbindung mit einem Remoteserver herzustellen, wird als NULL-Fensterstation/Desktop betrachtet, sodass in dieser Instanz nur der Serversicherheitskontext verglichen wird. (Weitere Informationen zu SIDs finden Sie unter Sicherheit in COM.) COM speichert die Fensterstation/den Desktop eines Prozesses zwischen, wenn der Prozess zum ersten Mal eine Verbindung mit dem verteilten COM-Dienst herstellt. Daher sollten COM-Clients und -Server ihre Fensterstation oder Threaddesktops des Prozesses nach dem Aufruf von CoInitialize oder CoInitializeExnicht ändern.

Wenn eine Klasse als in-process registriert ist, wird ein Aufruf von CoGetClassObject zum Erstellen ihres Klassenobjekts automatisch von COM an die DllGetClassObject-Funktion übergeben, die die Klasse implementieren muss, um dem aufrufenden Objekt einen Zeiger auf das Klassenobjekt zuzuweisen.

In ausführbaren Dateien implementierte Klassen können angeben, dass COM ihren Prozess ausführen und warten soll, bis der Prozess die IClassFactory-Schnittstelle ihres Klassenobjekts durch einen Aufruf der CoRegisterClassObject-Funktion registriert.

COM-Registrierungsschlüssel

Installieren als Dienstanwendung

Registrieren eines ausgeführten EXE-Servers

Registrieren von Komponenten

Registrieren von Objekten in rot

Selbstregistrierung