Registrando o servidor DLL para ativação substituta
Um servidor DLL será carregado em um processo substituto nas seguintes condições:
- Deve haver um valor AppID especificado sob a chave CLSID no Registro e uma chave AppID correspondente.
- Em uma chamada de ativação, o CLSCTX_LOCAL_SERVER bit é configurado e a chave CLSID não especifica LocalServer32, LocalServerou LocalService. Se outras partes de CLSCTX estiverem configuradas, o algoritmo de processamento de 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 de DllSurrogate existe sob a chave AppID.
Se houver um LocalServer, LocalServer32ou 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 DllSurrogate named-value deve ser especificado para que ocorra a ativação substituta. A ativação refere-se a chamadas para qualquer uma destas 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 para uma cadeia de caracteres vazia ou para NULL. Para especificar o lançamento de um substituto personalizado, defina o valor para o caminho do substituto.
Se RemoteServerName e DllSurrogate forem 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 sempre ser executado sozinho em seu próprio processo substituto é melhor configurado com um AppID igual ao seu CLSID. Em AppID, basta especificar um valor nomeado DllSurrogate com uma cadeia vazia.
É melhor configurar um servidor DLL projetado para ser executado sozinho em seu próprio processo substituto e para atender a vários clientes em uma rede com um valor de 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 de 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