Compartilhar via


Registrando uma classe na instalação

Se uma classe se destina a estar disponível para os clientes a qualquer momento, como a maioria dos aplicativos, você geralmente a registra por meio de um programa de instalação e configuração. Isso significa colocar informações sobre o aplicativo no registro, incluindo como e onde seus objetos devem ser instanciados. Essas informações devem ser registradas para todos os CLSIDs. Outras informações são opcionais. Ferramentas como o Regsvr32 simplificam a escrita de um programa de instalação que registra servidores na instalação.

Se você não estiver confiando nos padrões do sistema, há duas chaves importantes no registro: o CLSID e o AppID. Entre as informações importantes sob essas chaves está como o objeto deve ser instanciado. Os objetos podem ser designados como remotos em processo, fora de processo local ou fora de processo.

Sob a chave AppID estão vários valores que definem informações específicas para esse aplicativo. Entre eles estão RemoteServerName e ActivateAtStorage, que podem ser usados para permitir que um cliente crie um objeto, com o cliente não tendo conhecimento interno do local do servidor. (Para obter mais informações sobre instanciação remota, consulte Localizando um objeto remoto e funções auxiliares de criação de instância.)

Um servidor também pode ser instalado como um serviço ou para ser executado em uma conta de usuário específica. Para obter mais informações, consulte Instalando como um aplicativo de serviço.

Um servidor ou objeto ROT que não é um serviço ou está em execução em uma conta de usuário específica pode ser chamado de servidor "ativar como ativador". Para esses servidores, o contexto de segurança e a estação/área de trabalho da janela do cliente devem corresponder ao do servidor. Um cliente que tenta se conectar a um servidor remoto é considerado como tendo uma estação/área de trabalho de janela NULL, portanto, somente o contexto de segurança do servidor é comparado nesta instância. (Para obter mais informações sobre SIDs, consulte Segurança em COM.) COM armazena em cache a estação/área de trabalho da janela de um processo quando o processo se conecta pela primeira vez ao serviço COM distribuído. Portanto, os clientes e servidores COM não devem alterar suas estações de janela ou desktops de thread do processo depois de chamar CoInitialize ou CoInitializeEx.

Quando uma classe é registrada como em processo, uma chamada para CoGetClassObject para criar seu objeto de classe é automaticamente passada por COM para a função DllGetClassObject, que a classe deve implementar para dar ao objeto de chamada um ponteiro para seu objeto de classe.

As classes implementadas em executáveis podem especificar que o COM deve executar seu processo e aguardar que o processo registre a interface IClassFactory de seu objeto de classe por meio de uma chamada para a função CoRegisterClassObject.

Chaves do Registro COM

Instalando como um aplicativo de serviço

Registrando um servidor EXE em execução

Registrando componentes

Registrando objetos no ROT

Auto-Cadastro