Rejestrowanie klasy w instalacji

Jeśli klasa ma być dostępna dla klientów w dowolnym momencie, jak to ma miejsce w większości aplikacji, zazwyczaj rejestruje się ją za pośrednictwem programu instalacyjnego i konfiguracyjnego. Oznacza to umieszczenie informacji o aplikacji w rejestrze, w tym, jak i gdzie ma zostać dokonana instancjacja jej obiektów. Te informacje muszą być zarejestrowane dla wszystkich identyfikatorów CLSID. Inne informacje są opcjonalne. Narzędzia, takie jak Regsvr32, ułatwiają pisanie programu instalacyjnego, który rejestruje serwery podczas instalacji.

Jeśli nie korzystasz z domyślnych ustawień systemowych, w rejestrze znajdują się dwa ważne klucze: CLSID i AppID. Jedną z ważnych informacji znajdujących się w tych kluczach jest sposób instancjowania obiektu. Obiekty można wyznaczyć jako wewnątrzprocesowe, zewnętrznie lokalne lub zewnętrznie zdalne.

W kluczu AppID znajduje się kilka wartości, które definiują informacje specyficzne dla tej aplikacji. Wśród nich są RemoteServerName i ActivateAtStorage, z których oba mogą służyć do zezwalania klientowi na tworzenie obiektu, a klient nie ma wbudowanej wiedzy o lokalizacji serwera. (Aby uzyskać więcej informacji na temat zdalnego tworzenia wystąpienia, zobacz lokalizowanie obiektów zdalnych i funkcje pomocnika tworzenia wystąpienia .

Serwer można również zainstalować jako usługę lub uruchomić w ramach określonego konta użytkownika. Aby uzyskać więcej informacji, zobacz Instalowanie jako aplikacja serwisowa.

Serwer lub obiekt ROT, który nie jest usługą ani nie działa w ramach określonego konta użytkownika, może być określany jako serwer "aktywuj jako aktywator". W przypadku tych serwerów kontekst zabezpieczeń oraz stacja okien i pulpit klienta muszą zgadzać się z serwerem. Klient próbujący nawiązać połączenie z serwerem zdalnym jest uważany za NULL stacja robocza/pulpit, dlatego w tym przypadku porównywany jest tylko kontekst zabezpieczeń serwera. (Aby uzyskać więcej informacji na temat identyfikatorów SID, zobacz Security in COM.) COM buforuje stację okien/pulpit procesu, gdy proces najpierw łączy się z rozproszoną usługą COM. W związku z tym klienci i serwery COM nie powinni zmieniać stacji okien lub pulpitu wątku procesu po wywołaniu CoInitialize lub CoInitializeEx.

Gdy klasa jest zarejestrowana jako wewnątrzprocesowa, wywołanie CoGetClassObject w celu utworzenia obiektu klasy jest automatycznie przekazywane przez COM do funkcji DllGetClassObject, którą klasa musi zaimplementować, aby dostarczyć obiektowi wywołującemu wskaźnik do jego obiektu klasy.

Klasy zaimplementowane w plikach wykonywalnych mogą określać, że COM powinien uruchomić ich proces i poczekać na zarejestrowanie interfejsu IClassFactory obiektu klasy za pomocą wywołania funkcji CoRegisterClassObject.

Klucze rejestru COM

Instalowanie jako aplikacja serwisowa

Rejestrowanie uruchomionego serwera EXE

Rejestrowanie Komponentów

Rejestrowanie obiektów w ROT

Samodzielna rejestracja