Registro del servidor DLL para la activación suplente
Un servidor DLL se cargará en un proceso suplente en las condiciones siguientes:
- Debe haber un valor AppID especificado en la clave CLSID del Registro y una clave AppID correspondiente.
- En una llamada de activación, se establece el bit de CLSCTX_LOCAL_SERVER y la clave CLSID no especifica LocalServer32, LocalServerni LocalService. Si se establecen otros bits CLSCTX, se sigue el algoritmo de procesamiento para las marcas de ejecución local, local o remota en proceso.
- La clave CLSID contiene la subclave InprocServer32.
- El archivo DLL especificado en la clave InprocServer32 existe.
- El valor DllSurrogate existe en la clave AppID.
Si hay un LocalServer, LocalServer32o LocalService que indica la existencia de un EXE, el servidor o servicio EXE siempre se iniciará antes que cargar un servidor DLL en un proceso suplente.
El valor con nombre DllSurrogate debe especificarse para que se produzca la activación suplente. La activación hace referencia a llamadas a cualquiera de las siguientes funciones de activación:
- CoGetClassObject
- CoCreateInstanceEx
- CoGetInstanceFromFile
- CoGetInstanceFromIStorage
- IMoniker::BindToObject
Para iniciar una instancia del suplente proporcionado por el sistema, establezca el valor de DllSurrogate en una cadena vacía o en NULL. Para especificar el inicio de un suplente personalizado, establezca el valor en la ruta de acceso del suplente.
Si se especifican RemoteServerName y DllSurrogate para el mismo AppID, se omite el valor RemoteServerName y el valor DllSurrogate provoca una activación en el equipo local. Para la activación de suplente remota, especifique RemoteServerName, pero no DllSurrogate en el cliente, y especifique DllSurrogate en el servidor.
Un servidor DLL diseñado para ejecutarse siempre solo en su propio proceso suplente se configura mejor con un AppID igual a su CLSID. En AppID, simplemente especifique un valor con nombre DllSurrogate con un valor de cadena vacío.
Es mejor configurar un servidor DLL diseñado para ejecutarse solo en su propio proceso suplente y para atender a varios clientes a través de una red con un valor RunAs especificado en la clave del Registro AppID. Si el RunAs especifica "Usuario interactivo" o una identidad de usuario específica depende de la interfaz de usuario, la seguridad y otros requisitos del servidor. Cuando se especifica un valor RunAs, solo se carga una instancia del servidor para atender a todos los clientes, independientemente de la identidad del cliente. Por otro lado, no configure el servidor con RunAs si la intención es tener una instancia del servidor DLL que se ejecuta como suplente para atender cada identidad de cliente remota.
Temas relacionados