O exemplo de serviço completo

Os tópicos nesta seção formam um exemplo de serviço completo:

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

  1. Crie a DLL da mensagem de Sample.mc usando as seguintes etapas:

    1. mc -U sample.mc
    2. rc -r sample.rc
    3. link -dll -noentry -out:sample.dll sample.res
  2. Crie Svc.exe, SvcConfig.exe e SvcControl.exe de Svc.cpp, SvcConfig.cpp e SvcControl.cpp, respectivamente.

  3. 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

  1. 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 .)

  2. 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".

  3. 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.

  4. 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".

  5. 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.

  6. 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.

  7. 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".

  8. 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".

  9. 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.

  10. 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.)

Usando serviços