ServiceController.ExecuteCommand


Quando criamos Windows Services sob a plataforma .NET, podemos sobrescrever o método OnCustomCommand fornecido pela classe ServiceBase para que, via ServiceController (classe que permite a interceptação da execução do serviço), possamos disparar esse método customizado e, conseqüentemente, executarmos uma determinada tarefa dentro do mesmo.

protected override void OnCustomCommand(int command) { …. }

Com isso, podemos simplesmente em uma aplicação cliente, instanciarmos a classe ServiceController, especificarmos o serviço e a máquina onde ele reside e, finalmente, invocar o método ExecuteCommand, algo como é mostrado no exemplo abaixo:

new ServiceController(“MeuServico”, “.”).ExecuteCommand(N);

Onde o parametro N representa o número inteiro que será passado para o método OnCustomCommand. A questão é que temos um detalhe a ser considerado aqui: se esse valor inteiro for menor que 128, uma exceção do tipo Win32Exception com a seguinte mensagem é atirada: Access denied. Isso ocorre porque provavelmente valores menores que 128 são reservados para o próprio sistema operacional.

Se não me engano, nas versões 1.x do .NET Framework, a exceção atirada era algo como “parametro incorreto”, o que me parece mais significativo para o caso.

Anúncios

Um comentário sobre “ServiceController.ExecuteCommand

  1. Só para completar:

    em Visual Basic:

    [quote]Protected Overrides Sub OnCustomCommand(ByVal command As Integer)
    MyBase.OnCustomCommand(command)
    Select Case command
    Case 150
    ‘Aqui é chamada a função/sub
    Teste()
    Case Else
    Exit Sub
    End Select
    End Sub[/quote]

    Este exemplo deve ser incluído no Serviço. No client de controle do Serviço deve ser incluído seguinte Código:

    [quote]ServiceController1.ExecuteCommand(Fix(150))[/quote]

    Desta forma, ao chamar ExecuteCommand (e isso pode estar no evento onclick de um button) ele executa a rotina 150 automaticamente (no exemplo: Teste()).

    Att.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s