O exemplo de serviço completo
Os tópicos nesta seção formam um exemplo de serviço completo:
- Sample.mc (contém mensagens de erro)
- Svc.cpp (contém o código do serviço)
- SvcConfig.cpp (contém código de configuração de serviço)
- SvcControl.cpp (contém código de controle de serviço)
Criando o serviço
O procedimento a seguir descreve como criar o serviço e registrar a DLL da mensagem de evento.
Para compilar o serviço e registrar a DLL da mensagem de evento
Crie a DLL da mensagem de Sample.mc usando as seguintes etapas:
- mc -U sample.mc
- rc -r sample.rc
- link -dll -noentry -out:sample.dll sample.res
Crie Svc.exe, SvcConfig.exe e SvcControl.exe de Svc.cpp, SvcConfig.cpp e SvcControl.cpp, respectivamente.
Crie a chave do Registro HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\SvcName e adicione os seguintes valores de Registro a essa chave.
Valor Type Descrição EventMessageFile = dll_path REG_SZ O caminho para a DLL somente de recurso que contém cadeias de caracteres que o serviço pode gravar no log de eventos. TypesSupported = 0x00000007 REG_DWORD Uma máscara de bits que especifica os tipos de evento com suporte. O valor 0x000000007 indica que todos os tipos têm suporte.
Testando o serviço
O procedimento a seguir descreve como testar o serviço.
Para testar o serviço
Em Painel de Controle, inicie o aplicativo Serviços. (Nas etapas a seguir, use a tecla F5 para atualizar a exibição depois de executar um comando que modifica as informações no aplicativo Serviços .)
Execute o seguinte comando para instalar o serviço:
instalação do svc
O serviço gravará "Serviço instalado com êxito" no console se a operação for bem-sucedida ou uma mensagem de erro de outra forma.
Se a instalação do serviço for bem-sucedida, o serviço será exibido no aplicativo Serviços . Observe que Name está definido como "SvcName", Description e Status estão em branco e o Tipo de Inicialização está definido como "Manual".
Execute o seguinte comando para iniciar o serviço:
svccontrol start SvcName
Se a operação for bem-sucedida, o programa de controle de serviço gravará "Início do serviço pendente..." e , em seguida, "Serviço iniciado com êxito" para o console. Caso contrário, o programa gravará uma mensagem de erro no console.
Se o serviço for iniciado com êxito, Status será definido como "Iniciado". O código na função ServiceMain é executado pelo SCM. Se ocorrer um erro, o serviço gravará uma mensagem de erro no log de eventos. Essa mensagem inclui o nome da função que falhou e o código de erro que foi retornado em caso de falha.
Execute o seguinte comando para atualizar a descrição do serviço:
svcconfig describe SvcName
O programa de configuração de serviço gravará "Descrição do serviço atualizada com êxito" no console se a operação for bem-sucedida ou uma mensagem de erro caso contrário.
Se a atualização for bem-sucedida, a Descrição será definida como "Esta é uma descrição de teste".
Execute o seguinte comando para consultar a configuração de serviço:
svcconfig query SvcName
O programa de configuração de serviço gravará as informações de configuração de serviço no console se a operação for bem-sucedida ou uma mensagem de erro caso contrário.
Execute o seguinte comando para alterar a DACL de serviço:
svccontrol dacl SvcName
O programa de configuração de serviço grava "DACL de serviço atualizada com êxito" no console se a operação for bem-sucedida ou uma mensagem de erro caso contrário.
Execute o seguinte comando para desabilitar o serviço:
svcconfig disable SvcName
O programa de configuração de serviço gravará "Serviço desabilitado com êxito" no console se a operação for bem-sucedida ou uma mensagem de erro caso contrário.
Se o serviço for desabilitado com êxito, o Tipo de Inicialização será definido como "Desabilitado".
Execute o seguinte comando para habilitar o serviço:
svcconfig enable SvcName
O programa de configuração de serviço gravará "Serviço habilitado com êxito" no console se a operação for bem-sucedida ou uma mensagem de erro caso contrário.
Se o serviço estiver habilitado com êxito, o Tipo de Inicialização será definido como "Manual".
Execute o seguinte comando para interromper o serviço:
svccontrol stop SvcName
Se a operação for bem-sucedida, o programa de controle de serviço gravará "Parada de serviço pendente..." e , em seguida, "Serviço interrompido com êxito" para o console. Caso contrário, o programa gravará uma mensagem de erro no console.
Se o serviço for interrompido com êxito, o Status ficará em branco.
Se o serviço não for interrompido, o programa de controle de serviço gravará uma mensagem de erro no log de eventos que inclui o nome da função que falhou e o código de erro retornado em caso de falha.
Execute o seguinte comando para excluir o serviço:
svcconfig delete SvcName
O programa de configuração de serviço gravará "Serviço excluído com êxito" no console se a operação for bem-sucedida ou uma mensagem de erro caso contrário.
Se o serviço for excluído com êxito, ele não será mais exibido no aplicativo Serviços . (Observe que, se você tentar excluir um serviço que não foi interrompido, a operação terá êxito, mas o Tipo de Inicialização será definido como "Desabilitado" e a entrada de serviço será excluída na reinicialização do sistema ou quando o serviço for encerrado usando o Gerenciador de Tarefas.)
Tópicos relacionados