Ir para conteúdo
Faça parte da equipe! (2024) ×
Conheça nossa Beta Zone! Novas áreas a caminho! ×
  • Quem está por aqui   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.

Controlando os Serviços do windows


burdug
 Compartilhar

Posts Recomendados

Um serviço do Windows é uma aplicação que inicia quando o Windows é carregado e roda em segundo plano enquanto o Windows estiver em execução. Para quem conhece o Unix este conceito é similar a um daemon(um programa de computador que roda em segundo plano sendo iniciado como um processo) deste sistema operacional.

 

Uma aplicação do tipo serviço do Windows é útil quando você deseja monitorar de forma constante alguns arquivos, o teclado, criar um arquivo de log, ou efetuar qualquer tarefa em segundo plano enquanto o sistema esta ocupando efetuando o seu trabalho.

 

Você pode acessar o gerenciador de serviços do Windows XP clicando no menu iniciar, painel de controle, desempenho e manutenção, ferramentas administrativas e serviços, ou simplesmente clicando em iniciar, executar e digitando services.msc como mostrado na figura abaixo.

 

Neste artigo eu vou criar uma aplicação usando o Visual Basic 2005 para listar os serviços do Windows e dar a opção de parar ou iniciar um serviço.

 

Para alcançar o nosso objetivo iremos usar o namespace System.ServiceProcess . Este namespace fornece as classes que permitem a você implementar , instalar, e controlar as aplicações do tipo Windows Service.

 

Abra o Visual Basic 2005 ou 2008 Express Edition e crie um novo projeto do tipo Windows Forms usando a linguagem Visual Basic com o nome Controla_Servico.

 

Altere o nome do formulário form1.vb para ControlaServico.vb. Abaixo temos o leiaute do formulário e da aplicação em execução:

 

O leiaute do formulário foi montado usando os controles:

 

* TabControl - name: tabMain ; contendo um TabPage = tbpServices : Windows - Serviços

* ListView - name - lvwServices ; FullRowSelect=True ; GridLines = True ; View=Details

* Button - Text: Atualiza, Parar Serviço, Iniciar Serviço e Sair

* LinkLabel - Text:

É necessário se cadastrar para acessar o conteúdo.

 

No evento Load do formulário criado vamos incluir o seguinte código que irá chamar a rotina LeSvsc(). Esta rotina será responsável por identificar os processos e ler os serviços do Windows listando-os no controle ListView.

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

 

Call LeSvcs()

 

End Sub

 

A rotina LeSvcs() possui o seguinte código:

 

Sub LeSvcs()

 

 

Dim listaSvcs() As ServiceProcess.ServiceController

 

Dim SingleSvc As ServiceProcess.ServiceController

 

 

 

Dim LVW As ListViewItem

 

 

listaSvcs = ServiceProcess.ServiceController.GetServices

 

lvwServices.Items.Clear()

 

 

Try

 

For Each SingleSvc In listaSvcs

 

LVW = lvwServices.Items.Add(SingleSvc.DisplayName)

 

LVW.SubItems.Add(SingleSvc.ServiceName)

 

LVW.SubItems.Add(SingleSvc.Status.ToString)

 

LVW.SubItems.Add(SingleSvc.ServiceType.ToString)

 

Next

 

Catch e As Exception

 

MessageBox.Show("Não foi possivel iniciar o serviço. Reinicie o seu computador", "Erro Fatal: " & e.Source)

 

End Try

 

End Sub

 

Vamos entender o que foi feito:

 

- Declaramos um array listaSvsc() que receberá uma coleção de objetos do Windows service do tipo ServiceProcess.ServiceController

 

- Declaramos um variável SingeSvc que representa um único serviço do Windows como sendo do tipo ServiceProcess.ServiceController

Um ServiceProcess.ServiceController representa um serviço do Windows e permite que você manipule os serviços através de operações como se conectar o serviço, parar o serviço, iniciar o serviço e obter informações sobre o mesmo.

 

Estamos usando a classe ServiceController para controlar o comportamento de serviços do Windows já existentes. Ao criarmos a instância da classe ServiceController podemos definir suas propriedades de forma interagir com um serviço específico do Windows e realizar operações como parar, iniciar e manipular o serviço.

 

Os comandos que um serviço pode processar depende das suas propriedades.

 

- Declaramos a variável LVW como do tipo de um item do controle ListView.

 

- Preenchemos o array obtendo uma lista de serviços através do comando : ServiceProcess.ServiceController.GetServices

 

- Percorremos ao array criado obtendo o nome do serviço, o status e o tipo do serviço e preenchendo o controle ListView;

 

For Each SingleSvc In listaSvcs

 

LVW = lvwServices.Items.Add(SingleSvc.DisplayName)

 

LVW.SubItems.Add(SingleSvc.ServiceName)

 

LVW.SubItems.Add(SingleSvc.Status.ToString)

 

LVW.SubItems.Add(SingleSvc.ServiceType.ToString)

 

Next

 

 

 

Após ter os serviços exibidos no ListView devemos selecionar um serviço para Parar ou Iniciar. No evento Click do ListView incluímos o código que irá verificar se algum item selecionado, verificando em seguida qual o status do serviço. De acordo com o tipo do status o botão para Parar ou Iniciar o serviço será habilitado;

 

 

 

Private Sub lvwServices_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lvwServices.Click

 

 

If lvwServices.SelectedItems(0).Text <> "" Then

 

Select Case lvwServices.SelectedItems(0).SubItems(2).Text

 

Case "Stopped"

 

cmdParar.Enabled = False

 

cmdIniciar.Enabled = True

 

Case "Running"

 

cmdParar.Enabled = True

 

cmdIniciar.Enabled = False

 

Case Else

 

cmdParar.Enabled = False

 

cmdIniciar.Enabled = False

 

End Select

 

End If

 

End Sub

 

A abaixo temos o código so botões Parar Serviço e Iniciar Serviço :

 

Private Sub cmdParar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdParar.Click

 

If lvwServices.SelectedItems(0).Text <> "" Then

 

Call PararServico(lvwServices.SelectedItems(0).SubItems(1).Text) '

 

End If

 

End Sub

 

 

 

Private Sub cmdIniciar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdIniciar.Click

 

If lvwServices.SelectedItems(0).Text <> "" Then

 

Call IniciaServico(lvwServices.SelectedItems(0).SubItems(1).Text)

 

End If

 

End Sub

 

 

 

Agora vamos ao código das rotinas PararServico() e IniciarServico() :

 

Sub PararServico(ByVal nomeServico As String)

 

 

Dim listaSvcs() As ServiceProcess.ServiceController '

 

Dim SingleSvc As ServiceProcess.ServiceController

 

 

listaSvcs = ServiceProcess.ServiceController.GetServices

 

 

Try

 

For Each SingleSvc In listaSvcs

 

If UCase(SingleSvc.ServiceName) = UCase(nomeServico) Then

 

SingleSvc.Stop()

 

Call LeSvcs()

 

Exit For

 

End If

 

Next

 

Catch e As Exception

 

MessageBox.Show("Não é possivel parar o serviço. Veririque se o mesmo esta habilitado", "Erro Fatal : " & e.Source)

 

End Try

 

End Sub

 

 

 

Sub IniciarServico(ByVal nomeServico As String)

 

 

Dim listaSvcs() As ServiceProcess.ServiceController

 

Dim SingleSvc As ServiceProcess.ServiceController

 

 

listaSvcs = ServiceProcess.ServiceController.GetServices

 

 

Try

 

For Each SingleSvc In listaSvcs

 

If UCase(SingleSvc.ServiceName) = UCase(nomeServico) Then

 

SingleSvc.Start()

 

Call LeSvcs()

 

Exit For

 

End If

 

Next

 

Catch e As Exception

 

MessageBox.Show("O serviço não pode ser iniciado.. Verifique se esta realmente parado.", "Erro Fatal: " & e.Source)

 

End Try

 

End Sub

 

Pronto dessa forma voce consegue controlar os serviços do windows no Vb 2005 e 2008 tbm

 

Tutorial retirado de

É necessário se cadastrar para acessar o conteúdo.

Autor Original: José Carlos Macoratti

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.