LINQ - Exibindo todas as aplicações instaladas (VB.NET/C#)
Neste artigo vou usar o LINQ para exibir todas as aplicações instaladas em um computador local.
Para saber mais sobre o LINQ veja a Seção LINQ do Site.
Vamos usar o namespace Microsoft.Win32 em nossa aplicação sendo que este namespace fornece dois tipos de classes: as classes que tratam os eventos disparados pelo sistema operacional e as classes que manipulam o registro do sistema.
Nosso objetivo é percorrer uma coleção de objetos RegistryKey dentro de "LocalMachine\SOFTWARE\Microsoft\WindowsCurrentVersion\Uninstall" para recuperar todos os aplicativos instalados na máquina Windows.
A classe RegistryKey representa uma chave a nível de nó no registro do Windows. Esta classe é um encapsulamento de registro.
Criando o projeto no Visual C#
Eu vou usar o Visual C# 2010 Express Edition e criar um projeto do tipo WIndows Forms Application com o nome ListandoAplicacoesInstaladas;
A seguir no formulário form1.cs vamos declarar o namespace usado:
using
System;using
System.Linq;using
System.Windows.Forms;using
Microsoft.Win32;No formulário form1.cs inclua um controle ListBox (lstbAplicacoes) , um controle Button (btnExibir) e um controle Label(lblmsg) conforme o leiaute abaixo:
Após a declaração da classe formulário form1.cs defina a variável regkey conforme o código abaixo:
string
regkey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall";A seguir no evento Click do botão de comando btnExibir inclua o seguinte código:
private void btnExibir_Click(object sender, EventArgs e) { lstbAplicacoes.Items.Clear(); int contador = 0; using (RegistryKey key = Registry.LocalMachine.OpenSubKey(regkey)) { var query = from a in key.GetSubKeyNames() let r = key.OpenSubKey(a) select new { Application = r.GetValue("DisplayName") }; foreach (var item in query) { if (item.Application != null) lstbAplicacoes.Items.Add(item.Application); contador++; } } lblmsg.Text = contador + " Aplicações instaladas "; } |
A classe Registry fornece os Registrykeys base que acessam os valores e subchaves no registro.
Essa classe fornece o conjunto das chaves-raiz padrão encontradas no registro
em máquinas usando o Windows. O registro é uma local de armazenamento de
informações sobre os aplicativos, usuários e configurações do sistema padrão.
Por exemplo, os aplicativos podem usar o Registro para armazenar informações que
precisam ser preservadas uma vez que o aplicativo é fechado, e acessar a essa
informação quando o aplicativo for recarregado. Por exemplo, você pode armazenar
as preferências de cores, locais de tela, ou o tamanho da janela. Você pode
controlar isso para cada usuário, armazenando as informações em um local
diferente no registro.
O campo LocalMachine contém os dados de configuração da máquina local. Este campo lê a chave base de registro do Windows HKEY_LOCAL_MACHINE.
O método OpenSubKey recupera uma subchave especificada e determina se o acesso de escrita é para ser aplicado à chave.
A consulta LINQ usada é a seguinte:
var query = from a in key.GetSubKeyNames() let r = key.OpenSubKey(a) select new { Application = r.GetValue("DisplayName") }; |
Dim query = From a In key.GetSubKeyNames() Let r = key.OpenSubKey(a) _ Select New With _ { .Application = r.GetValue("DisplayName") } |
C# | VB .NET |
Estamos usando a cláusula let para armazenar um valor.
Em uma expressão de consulta, as vezes é útil armazenar o resultado de uma
sub-expressão a fim de utilizá-la em seções subsequentes.
Você pode fazer isso com a palavra-chave let, a qual cria uma nova
variável de intervalo e a inicializa com o resultado da expressão que você
fornece.
Uma vez inicializado com um valor, o variável de intervalo não pode ser usada
para armazenar um outro valor. No entanto, se a variável de intervalo tem um
tipo queryable, ela pode ser consultada. É isso que é feito com a
variável r. (r.GetValue("DisplayName")
Executando o projeto iremos obter:
A versão para VB .NET feita no Visual Basic 2010 Express Edition e usando os mesmos controles com os mesmos nomes é dado a seguir:
Imports Microsoft.Win32 Public Class Form1 Dim regkey As String = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" Private Sub btnExibir_Click(sender As System.Object, e As System.EventArgs) Handles btnExibir.Click lstbAplicacoes.Items.Clear() Dim contador As Integer = 0 Using key As RegistryKey = Registry.LocalMachine.OpenSubKey(regkey) Dim query = From a In key.GetSubKeyNames() Let r = key.OpenSubKey(a) _ Select New With _ { .Application = r.GetValue("DisplayName") } For Each item In query If item.Application IsNot Nothing Then lstbAplicacoes.Items.Add(item.Application) End If contador += 1 Next End Using lblmsg.Text = contador & " Aplicações instaladas " End Sub End Class |
Versão VB.NET do projeto |
Pegue o projeto completo aqui : ListandoAplicacoesInstaladas_C#.zip e ListandoAplicacoesInstaladas_VB.zip
Salmos 5:9
Porque não há fidelidade na boca deles; as suas entranhas são verdadeiras maldades, a sua garganta é um sepulcro aberto; lisonjeiam com a sua língua.Veja os Destaques e novidades do SUPER CD VB 2012 (sempre atualizado) : clique e confira ! Quer migrar para o VB .NET ? Veja mais sistemas completos para a plataforma .NET no Super CD .NET e no Super DVD .NET , confira... Quer aprender C# ?? Chegou o
Super DVD C# 2012
com exclusivo material de
suporte e vídeo aulas com curso básico sobre C# |