Compartilhar via


Instalando como um aplicativo de serviço

Além de ser executado como um EXE (servidor local executável), um objeto COM também pode ser empacotado para ser executado como um aplicativo de serviço quando ativado por um cliente local ou remoto. Os serviços dão suporte a vários recursos administrativos úteis e integrados à interface do usuário, incluindo início local e remoto, interrupção, pausa e reinicialização, bem como a capacidade de estabelecer o servidor para ser executado em uma conta de usuário específica e estação de janela.

Um objeto escrito como um serviço é instalado para uso pelo COM estabelecendo um valor LocalService sob sua chave AppID e executando uma instalação de serviço padrão.

As classes também podem ser configuradas para serem executadas em uma conta de usuário específica quando ativadas por um cliente remoto sem serem gravadas como um aplicativo de serviço. Para fazer isso, a classe instala um nome de usuário e uma senha a ser usada quando o SCM inicia seu processo de servidor local.

Quando uma classe é configurada dessa forma, as chamadas para CoRegisterClassObject com esse CLSID falharão, a menos que o processo tenha sido iniciado pelo COM em nome de uma solicitação de ativação real. Em outras palavras, as classes configuradas para serem executadas como um usuário específico podem não ser registradas em nenhuma outra identidade.

O nome de usuário é obtido do valor nomeado RunAs sob a chave APPID da classe. Se o nome de usuário for "Usuário Interativo", o código de classe será executado no contexto de segurança do usuário conectado no momento e estará conectado à estação de janela interativa.

Caso contrário, a senha será recuperada de uma parte oculta do registro disponível apenas para os administradores do computador e para o sistema. O nome de usuário e a senha são usados para criar uma sessão de logon na qual o código de classe é executado. Quando iniciado dessa forma, o código de classe é executado com sua própria área de trabalho e estação de janela e não compartilha identificadores de janela, a área de transferência ou outros elementos de interface do usuário com o usuário interativo ou outras classes em execução em outras contas de usuário.

Um servidor registrado com LocalService ou RunAs pode registrar um objeto na tabela de objetos em execução para permitir que qualquer cliente se conecte a ele. Para fazer isso, a chamada do servidor para IRunningObjectTable::Register deve definir o sinalizador ROTFLAGS_ALLOWANYCLIENT. Um servidor configurando este bit deve ter seu nome executável na seção AppID do registro que se refere ao AppID para o executável. Um servidor "ativar como ativador" (não registrado como LocalService ou RunAs) não deve registrar um objeto com esse sinalizador.

registrar uma classe no de instalação

registrando um servidor EXE em execução

registrando objetos no ROT

Auto-registro