Share via


Inscription d’une classe lors de l’installation

Si une classe est destinée à être disponible pour les clients à tout moment, comme le sont la plupart des applications, vous l’inscrivez généralement par le biais d’un programme d’installation et d’installation. Cela implique de placer des informations sur l’application dans le Registre, notamment comment et où ses objets doivent être instanciés. Ces informations doivent être enregistrées pour tous les CLSID. Les autres informations sont facultatives. Des outils tels que Regsvr32 simplifient l’écriture d’un programme d’installation qui inscrit les serveurs lors de l’installation.

Si vous ne vous fiez pas aux valeurs système par défaut, il existe deux clés importantes dans le Registre : le CLSID et l’AppID. L’une des informations importantes sous ces clés est la façon dont l’objet doit être instancié. Les objets peuvent être désignés comme locaux in-process, hors processus ou hors processus distants.

Sous la clé AppID se trouvent plusieurs valeurs qui définissent des informations spécifiques à cette application. Parmi ceux-ci figurent RemoteServerName et ActivateAtStorage, qui peuvent tous deux être utilisés pour permettre à un client de créer un objet, le client n’ayant aucune connaissance intégrée de l’emplacement du serveur. (Pour plus d’informations sur l’instanciation à distance, consultez Localisation d’un objet distant et de fonctions d’assistance à la création d’instance.)

Un serveur peut également être installé en tant que service ou pour s’exécuter sous un compte d’utilisateur spécifique. Pour plus d’informations, consultez Installation en tant qu’application de service.

Un serveur ou un objet ROT qui n’est pas un service ou qui s’exécute sous un compte d’utilisateur spécifique peut être appelé serveur « activer en tant qu’activateur ». Pour ces serveurs, le contexte de sécurité et la station de fenêtre/bureau du client doivent correspondre à ceux du serveur. Un client qui tente de se connecter à un serveur distant est considéré comme ayant une station de fenêtre/bureau NULL. Par conséquent, seul le contexte de sécurité du serveur est comparé dans cette instance. (Pour plus d’informations sur les SID, consultez Sécurité dans COM.) COM met en cache la station de fenêtre/bureau d’un processus lorsque le processus se connecte pour la première fois au service COM distribué. Par conséquent, les clients et serveurs COM ne doivent pas modifier leur station de fenêtre ou leurs bureaux de thread du processus après avoir appelé CoInitialize ou CoInitializeEx.

Lorsqu’une classe est inscrite comme in-process, un appel à CoGetClassObject pour créer son objet de classe est automatiquement passé par COM à la fonction DllGetClassObject , que la classe doit implémenter pour donner à l’objet appelant un pointeur vers son objet de classe.

Les classes implémentées dans les exécutables peuvent spécifier que COM doit exécuter leur processus et attendre que le processus inscrive l’interface IClassFactory de leur objet de classe via un appel à la fonction CoRegisterClassObject .

Clés de Registre COM

Installation en tant qu’application de service

Inscription d’un serveur EXE en cours d’exécution

Inscription de composants

Inscription d’objets dans le ROT

Auto-inscription