Vous êtes sur la page 1sur 9

16/04/2019 C# - Exibindo todos serviços ativos do Windows no ListView - II

C# - Listando os serviços ativos do Windows no ListView - II

 O artigo de hoje vamos recordar como tratar com os serviços do Windows em uma aplicação
C# listando os serviços ativos do Windows em um controle ListView.

Na primeira parte do artigo eu mostrei como exibir todos os serviços do Windows, vamos agora listar apenas os
processos ativos em execução.

Para realizar essa tarefa vamos usar os recursos do namespace System.Management que fornece acesso a um rico
conjunto de informação de gerenciamento e gestão de eventos sobre o sistema, dispositivos e aplicativos
instrumentados para a infraestrutura do Windows Management Instrumentation (WMI).

Os aplicativos e serviços podem consultar informações como a quantidade de espaço livre que resta no disco, qual a
atual utilização da CPU, qual banco de dados esta conectado a  determinado aplicativo, etc., usando as classes
derivadas de ManagementObjectSearcher e ManagementQuery , ou inscrever-se em uma variedade de eventos de
gerenciamento usando a classe ManagementEventWatcher.

Vamos utilizar também o namespace System.Diagnostics que contém tipos que permitem interagir com os processos
do sistema, logs de eventos, e contadores de desempenho; seus namespaces filhos contém tipos para interagir com
código de ferramenta de análise, suportar contratos, estender o suporte em tempo de projeto para o monitoramento
da aplicação e instrumentação, logar dados de eventos usando o subsistema de trace Event Tracing for Windows
(ETW), ler e escrever a partir de arquivos de logs, coletar dados de desempenho e ler e escrever informação sobre
debug.

Recursos usados :

Visual Studio 2013 Express for Windows Desktop

www.macoratti.net/15/09/c_winserv2.htm 1/9
16/04/2019 C# - Exibindo todos serviços ativos do Windows no ListView - II

Incluindo um novo projeto na solução


Abra a solução Tratando_Servicos,  criada no VS 2013 Express for Windows desktop, no artigo anterior.

A seguir clique em FILE -> Add -> New Project;

Selecione o template  Visual C# -> Windows Forms Application;

Informe o nome Listar_Servicos_Ativos e clique no botão OK;

No formulário form1.cs do projeto vamos incluir os seguintes controles a partir da ToolBox:

1 GroupBox - Text = Serviços Ativos do Windows

1 ListView - lvServicosAtivos, Dock=Fill, View=Details, AllowColumnReOrder=True, GridLines=True

www.macoratti.net/15/09/c_winserv2.htm 2/9
16/04/2019 C# - Exibindo todos serviços ativos do Windows no ListView - II

1 Button - btnListarServicos

Disponha os controles no formulário conforme o leiaute da figura abaixo:

Vamos definir as colunas usadas no controle ListView usando a propriedade Columns da caixa de propriedades do
controle.

Clique em Columns(Collection) para abrir a caixa de diálogo ColumnHeader Collection Editor e defina 4  colunas
conforme a configuração abaixo:

ID - TextAlign= Left , Width = 60

Nome - TextAlign= Left , Width = 250

Localizacao - TextAlign= Left , Width = 400


www.macoratti.net/15/09/c_winserv2.htm 3/9
16/04/2019 C# - Exibindo todos serviços ativos do Windows no ListView - II

Descricao - TextAlign= Left , Width = 500

Precisamos incluir uma referência ao namespace System.Management em nosso projeto.

Clique no menu PROJECT e a seguir em Add Reference e selecione o namespace conforme a figura abaixo:

www.macoratti.net/15/09/c_winserv2.htm 4/9
16/04/2019 C# - Exibindo todos serviços ativos do Windows no ListView - II

No início do formulário vamos agora declarar os seguintes namespaces:

using System.Management;
using System.Diagnostics;

No formulário Form1.cs vamos incluir o código abaixo no evento Click do botão de comando Listar Serviços Ativos:

       private void btnListarServicos_Click(object sender, EventArgs e)


        {
            ManagementClass management = new ManagementClass("Win32_Process");
            ManagementObjectCollection mCollection = management.GetInstances();

            foreach (ManagementObject process in mCollection)


            {
                ListViewItem novoListViewItem = new ListViewItem();

                novoListViewItem.Text = (process["ProcessId"].ToString());


                novoListViewItem.SubItems.Add((string)process["Name"]);
                novoListViewItem.SubItems.Add((string)process["ExecutablePath"]);
www.macoratti.net/15/09/c_winserv2.htm 5/9
16/04/2019 C# - Exibindo todos serviços ativos do Windows no ListView - II

                try
                {
                    FileVersionInfo info = FileVersionInfo.GetVersionInfo((string)process["ExecutablePath"]);
                    novoListViewItem.SubItems.Add(info.FileDescription);
                }
                catch
                {
                    novoListViewItem.SubItems.Add("Não Disponível");
                }

                lvServicosAtivos.Items.Add(novoListViewItem);
            }
      }

Vamos entender o código acima:

No laço foreach estamos percorrendo o array de serviços obtidos por GetIstances().

Criamos então uma instância de ListViewItem que iremos usar para incluir as informações dos serviços.

Estamos usando as classes ManagementClass e ManagementCollection para nos ajudar a percorrer os processos
ativos.

Poderíamos ter feito isso usando Process.GetProcess() mas essa abordagem possui uma limitação pois com ela
somente podemos visualizar os mesmos processos vistos pelos seus arquivos .EXE e assim não poderíamos ver todos os
processos, e por isso que estamos usando as duas classes mencionadas acima.

Após isso precisamos criar nosso laço foreach para obter a informação para cada processo encontrado adicionando em
nosso ListView.

Estamos obtendo apenas o ID, Nome , Localização e Descrição dos processos.

Para obter o ID do processo precisamos usar a classe ManagementObject para obter o ID e nome do processo do
objeto e a seguir converter o resultado para string para exibir no Listview.

Se usarmos a classe Win32_Process para obter a descrição do processo o resultado não será o desejado pois ela
retorna o nome e não a descrição.

Para fazer isso usamos a classe FileVersionInfo que obtém a descrição do processo a partir do caminho especificado.
www.macoratti.net/15/09/c_winserv2.htm 6/9
16/04/2019 C# - Exibindo todos serviços ativos do Windows no ListView - II

Desde de que nem todos os processos possui uma descrição disponível estamos usando o bloco try/catch para evitar
uma exceção e atribuir o valor "Não disponível" quando isso ocorre.

Executando o projeto iremos obter o seguinte resultado:

Na terceira parte do artigo eu vou mostrar como podemos Parar, Iniciar e Reiniciar serviços do Windows.

Pegue o projeto completo aqui :  Tratando_Servicos_2.zip

Rom 3:10 como está escrito: Não há justo, nem sequer um.
Rom 3:11 Não há quem entenda; não há quem busque a Deus.
www.macoratti.net/15/09/c_winserv2.htm 7/9
16/04/2019 C# - Exibindo todos serviços ativos do Windows no ListView - II

Rom 3:12 Todos se extraviaram; juntamente se fizeram inúteis. Não há quem faça o bem, não há nem um só.

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Curso Básico VB .NET - Vídeo Aulas

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#.

Curso C# Basico - Video Aulas

Quer aprender os conceitos da Programação Orientada a objetos ?

Curso Fundamentos da Programação Orientada a Objetos com VB .NET

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

 Curso - Gerando Relatórios com o ReportViewer no VS 2013 - Vídeo Aulas

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter


Referências:

Seção VB .NET do Site Macoratti.net


Super DVD .NET - A sua porta de entrada na plataforma .NET
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Seção C# do site Macoratti.net
Super DVD C#

www.macoratti.net/15/09/c_winserv2.htm 8/9
16/04/2019 C# - Exibindo todos serviços ativos do Windows no ListView - II

Super DVD Visual Basic


Curso Básico VB .NET - Vídeo Aulas
Curso C# Básico - Vídeo Aulas
macoratti - YouTube
Macoratti.net | Facebook
Jose C Macoratti (@macorati) | Twitter
VB.NET - Usando o controle ListView - Macoratti.net
VB6 - Tratamento de dados com ListView - Macoratti.net
VB .NET - O controle ListView Revisitado - Macoratti.net
C# - ListView - Macoratti.net
Criando um serviço do Windows - Macoratti.net
WCF - Introdução - Macoratti.net
Criando Web Services - Calculo IMC - Macoratti.net
WCF - Macoratti.net

José Carlos Macoratti

www.macoratti.net/15/09/c_winserv2.htm 9/9