Como saber si tengo un programa instalado . VB.NET

Iniciado por **Aincrad**, 1 Febrero 2018, 22:31 PM

0 Miembros y 2 Visitantes están viendo este tema.

**Aincrad**

hola a todo , quisiera saber Como saber si tengo un programa instalado .

ejemplo hay un programa llamado: Cleo el cuel posee muchas versiones pero todas al principio tienen la palabra CLEO.

EJEMPLO :

Cleo 1.0 / Cleo 2.3 / Cleo 3.2.5 / Cleo 4.0  . en fin .

lo que quiero es que al presionar un boton el programa busque mis aplicación instaladas las que empiezan por CLEO Y si encuentra alguna que me coloque su nombre en un label así sabre cual versión es .

eso se podra? Gracias de antemano .  ;D




Eleкtro

#1
Cita de: **Aincrad** en  1 Febrero 2018, 22:31 PM
eso se podra?

Por supuesto, se puede, pero no hay una varita mágica o forma guiada para averiguar si "X" programa está instalado. Las entradas que hacen referencia a los programas instalados (aquellos que disponen de un desinstalador) se almacenan (unicamente) en el registro de Windows. Debes buscar en las siguientes claves de registro:


  • HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall
  • HKEY_CURRENT_USER\Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall
  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
  • HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall

El valor que te interesa analizar se llama 'DisplayNane'. Te muestro una imagen de ejemplo del registro de programas instalados:



( Hacer click en la imagen para ver en tamaño real. )

Para leer el registro de Windows puedes utilizar los miembros del espacio de nombres 'Microsoft.Win32': clase 'Registry', 'RegistryHive', 'RegistryKey', etcétera... encontrarás miles de ejemplos en Google. Al utilizar las clases del registro, recuerda especificar el visor de registro adecuado en caso de 64-Bits para leer las claves de registro de 32 o 64-bits (si no sabes a lo que me refiero, entonces debes documentarte sobre la clave WOW6432Node antes de ponerte a manipular el registro), de lo contrario irás dando palos de ciego...
Y para comparar los caracteres iniciales de un string, puedes utilizar la función 'String.StartsWith()'.

Saludos.








**Aincrad**

Bueno , tienes razón tango que usar el registro .

Bueno logre listar todos los programas instalados :

Código (vbnet) [Seleccionar]
Imports Microsoft.Win32
Public Class Form1
    Dim regkey As String = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        listar()
    End Sub
    Private Sub listar()
        ListBox2.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
                    ListBox2.Items.Add(item.Application)
                End If
                contador += 1
            Next
        End Using
        Label2.Text = contador & " Aplicaciones instaladas "
    End Sub
End Class


ahora como puedo buscar en ese  ListBox la linea que tanga la Palabra CLEO Y mostrar esa lienea completa en un label ?.

Gracias de Antemano .  ;D




**Aincrad**

bueno ya lo hice de la siguiente manera :

Código (vbnet) [Seleccionar]
Private Sub FindMyString(ByVal searchString As String)
        If searchString <> String.Empty Then
            Dim index As Integer = ListBox2.FindString(searchString)
            If index <> -1 Then
                ListBox2.SetSelected(index, True)
                Label2.Text = index
                Label2.Text = "Detectado " & ListBox2.SelectedItem
                Label2.ForeColor = Color.Red
            Else
                Label2.Text = "No Detectado "
                Label2.ForeColor = Color.Green
            End If
        End If
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        FindMyString("Cleo")
    End Sub





Eleкtro

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.



Cita de: **Aincrad** en  2 Febrero 2018, 14:08 PM
ahora como puedo buscar en ese  ListBox la linea que tanga la Palabra CLEO

Igual que en el código que has mostrado, puedes usar LINQ con la propiedad ListBox.Items. O bien puedes usar la función ListBox.FindString() para buscar un string que empiece por los caracteres especificados, y devolver el índice del elemento.




Cita de: **Aincrad** en  2 Febrero 2018, 14:08 PM
Y mostrar esa lienea completa en un label ?.

Resolviendo lo primero, resolverás esto otro (con LINQ devolviendo el string, o de otras formas obteniendo el índice del elemento).

Saludos!








**Aincrad**

Gracias por tu ayuda @Elektro , ni no me hubieras dicho lo del registro nunca hubiera podido hacerlo .  ;D  ;-)  ;-)