Registrando o servidor DLL para ativação substituta
Um servidor DLL será carregado em um processo substituto sob as seguintes condições:
- Precisa haver um valor de AppID especificado sob a chave CLSID no registro e uma chave AppID correspondente.
- Em uma chamada de ativação, o bit CLSCTX_LOCAL_SERVER é definido e a chave CLSID não especifica LocalServer32, LocalServer ou LocalService. Se outros bits CLSCTX estiverem definidos, o algoritmo de processamento para os sinalizadores de execução em processo, local ou remoto será seguido.
- A chave CLSID contém a subchave InprocServer32.
- A DLL especificada na chave InprocServer32 existe.
- O valor DllSurrogate existe sob a chave AppID.
Se houver um LocalServer, LocalServer32 ou LocalService, indicando a existência de um EXE, o servidor ou serviço EXE sempre será iniciado em preferência ao carregamento de um servidor DLL em um processo substituto.
O valor nomeado DllSurrogate precisa ser especificado para que a ativação substituta ocorra. A ativação refere-se a chamadas para qualquer uma das seguintes funções de ativação:
- CoGetClassObject
- CoCreateInstanceEx
- CoGetInstanceFromFile
- CoGetInstanceFromIStorage
- IMoniker::BindToObject
Para iniciar uma instância do substituto fornecido pelo sistema, defina o valor de DllSurrogate como uma cadeia de caracteres vazia ou como NULL. Para especificar a inicialização de um substituto personalizado, defina o valor para o caminho do substituto.
Se RemoteServerName e DllSurrogate forem ambos especificados para o mesmo AppID, o valor RemoteServerName será ignorado e o valor DllSurrogate causará uma ativação no computador local. Para ativação substituta remota, especifique RemoteServerName, mas não DllSurrogate no cliente e especifique DllSurrogate no servidor.
Um servidor DLL projetado para ser executado sempre sozinho no processo substituto dele é melhor configurado com um AppID igual ao CLSID. Em AppID, basta especificar um valor nomeado DllSurrogate com um valor de cadeia de caracteres vazio.
É melhor configurar um servidor DLL projetado para ser executado sozinho no processo substituto dele e para atender vários clientes em uma rede com um valor RunAs especificado na chave do Registro AppID. Se o RunAs especifica "Usuário interativo" ou uma identidade de usuário específica depende da interface do usuário, da segurança e de outros requisitos do servidor. Quando um valor RunAs é especificado, apenas uma instância do servidor é carregada para atender a todos os clientes, independentemente da identidade do cliente. Por outro lado, não configure o servidor com RunAs se a intenção for ter uma instância do servidor DLL em execução substituta para atender a cada identidade de cliente remoto.
Tópicos relacionados