Instalación de una aplicación de servicio

Además de ejecutarse como ejecutable de servidor local (EXE), un objeto COM también puede empaquetarse para ejecutarse como una aplicación de servicio cuando un cliente local o remoto activa. Los servicios admiten numerosas características administrativas útiles e integradas, como el inicio local y remoto, la detención, la pausa y el reinicio, así como la capacidad de establecer el servidor para que se ejecute en una cuenta de usuario y una estación de ventana específica.

Un objeto escrito como servicio se instala para su uso por COM estableciendo un valor localService en su clave AppID y realizando una instalación de servicio estándar.

Las clases también se pueden configurar para ejecutarse en una cuenta de usuario específica cuando un cliente remoto activa sin escribirse como una aplicación de servicio. Para ello, la clase instala un nombre de usuario y una contraseña que se usará cuando el SCM inicia su proceso de servidor local.

Cuando una clase se configura de esta manera, las llamadas a CoRegisterClassObject con este CLSID producirán un error a menos que COM inicie el proceso en nombre de una solicitud de activación real. Es decir, es posible que las clases configuradas para ejecutarse como un usuario determinado no se registren en ninguna otra identidad.

El nombre de usuario se toma del valor denominado RunAs en la clave APPID de la clase. Si el nombre de usuario es "Usuario interactivo", el código de clase se ejecuta en el contexto de seguridad del usuario que ha iniciado sesión actualmente y está conectado a la estación de ventana interactiva.

De lo contrario, la contraseña se recupera de una parte oculta del Registro disponible solo para los administradores del equipo y para el sistema. A continuación, el nombre de usuario y la contraseña se usan para crear una sesión de inicio de sesión en la que se ejecuta el código de clase. Cuando se inicia de esta manera, el código de clase se ejecuta con su propia estación de escritorio y ventana y no comparte identificadores de ventana, el Portapapeles u otros elementos de interfaz de usuario con el usuario interactivo u otras clases que se ejecutan en otras cuentas de usuario.

Un servidor registrado con LocalService o RunAs puede registrar un objeto en la tabla de objetos en ejecución para permitir que cualquier cliente se conecte a él. Para ello, la llamada del servidor a IRunningObjectTable::Register debe establecer la marca ROTFLAGS_ALLOWANYCLIENT. Un servidor que establece este bit debe tener su nombre ejecutable en la sección AppID del Registro que hace referencia al AppID para el ejecutable. Es posible que un servidor "activar como activador" (no registrado como LocalService o RunAs) no registre un objeto con esta marca.

Registrar una clase en la instalación

Registro de un servidor EXE en ejecución

Registrar objetos en el ROT

Autoregistro