ServiceController.ExecuteCommand

by Israel Aece 3. July 2008 12:31

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.

Tags:

.NET Framework

Comments

8/20/2009 2:03:22 PM #

Marcelo Furlan

Só para completar:

em Visual Basic:

    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


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

ServiceController1.ExecuteCommand(Fix(150))

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.

Marcelo Furlan Brazil

Comments are closed

Powered by BlogEngine.NET 1.5.0.0
Theme by Mads Kristensen

Sobre

Meu nome é Israel Aece e sou especialista em tecnologias de desenvolvimento Microsoft, atuando como desenvolvedor de aplicações para o mercado financeiro utilizando a plataforma .NET. [ Mais ]

Twitter

Host