Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: **Aincrad** en 1 Febrero 2018, 22:31 pm



Título: Como saber si tengo un programa instalado . VB.NET
Publicado por: **Aincrad** en 1 Febrero 2018, 22:31 pm
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


Título: Re: Como saber si tengo un programa instalado . VB.NET
Publicado por: Eleкtro en 2 Febrero 2018, 04:33 am
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:

(http://i.imgur.com/bHeMlXel.png) (https://i.imgur.com/bHeMlXe.png)

( 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.


Título: Re: Como saber si tengo un programa instalado . VB.NET
Publicado por: **Aincrad** en 2 Febrero 2018, 14:08 pm
Bueno , tienes razón tango que usar el registro .

Bueno logre listar todos los programas instalados :

Código
  1. Imports Microsoft.Win32
  2. Public Class Form1
  3.    Dim regkey As String = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
  4.    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  5.        listar()
  6.    End Sub
  7.    Private Sub listar()
  8.        ListBox2.Items.Clear()
  9.        Dim contador As Integer = 0
  10.        Using key As RegistryKey = Registry.LocalMachine.OpenSubKey(regkey)
  11.            Dim query = From a In key.GetSubKeyNames()
  12.                               Let r = key.OpenSubKey(a) _
  13.                               Select New With _
  14.                               {
  15.                                    .Application = r.GetValue("DisplayName")
  16.                               }
  17.            For Each item In query
  18.                If item.Application IsNot Nothing Then
  19.                    ListBox2.Items.Add(item.Application)
  20.                End If
  21.                contador += 1
  22.            Next
  23.        End Using
  24.        Label2.Text = contador & " Aplicaciones instaladas "
  25.    End Sub
  26. End Class
  27.  

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


Título: Re: Como saber si tengo un programa instalado . VB.NET
Publicado por: **Aincrad** en 2 Febrero 2018, 14:45 pm
bueno ya lo hice de la siguiente manera :

Código
  1. Private Sub FindMyString(ByVal searchString As String)
  2.        If searchString <> String.Empty Then
  3.            Dim index As Integer = ListBox2.FindString(searchString)
  4.            If index <> -1 Then
  5.                ListBox2.SetSelected(index, True)
  6.                Label2.Text = index
  7.                Label2.Text = "Detectado " & ListBox2.SelectedItem
  8.                Label2.ForeColor = Color.Red
  9.            Else
  10.                Label2.Text = "No Detectado "
  11.                Label2.ForeColor = Color.Green
  12.            End If
  13.        End If
  14.    End Sub
  15.  
  16.    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  17.        FindMyString("Cleo")
  18.    End Sub


Título: Re: Como saber si tengo un programa instalado . VB.NET
Publicado por: Eleкtro en 2 Febrero 2018, 14:45 pm
Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.



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.



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!


Título: Re: Como saber si tengo un programa instalado . VB.NET
Publicado por: **Aincrad** en 2 Febrero 2018, 14:56 pm
Gracias por tu ayuda @Elektro  , ni no me hubieras dicho lo del registro nunca hubiera podido hacerlo .  ;D  ;-)  ;-)