2010-05-25 12 views
6

Necesito obtener una lista del programa instalado en la máquina local con íconos de aplicación. A continuación se muestra el fragmento de código que estoy usando para obtener la lista del programa instalado y la ruta del directorio instalado.Obtenga una lista de programas instalados con iconos de aplicaciones

/// <summary> 
    /// Gets a list of installed software and, if known, the software's install path. 
    /// </summary> 
    /// <returns></returns> 
    private string Getinstalledsoftware() 
    { 
     //Declare the string to hold the list: 
     string Software = null; 

     //The registry key: 
     string SoftwareKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; 
     using (RegistryKey rk = Registry.LocalMachine.OpenSubKey(SoftwareKey)) 
     { 
      //Let's go through the registry keys and get the info we need: 
      foreach (string skName in rk.GetSubKeyNames()) 
      { 
       using (RegistryKey sk = rk.OpenSubKey(skName)) 
       { 
        try 
        { 
         //If the key has value, continue, if not, skip it: 
         if (!(sk.GetValue("DisplayName") == null)) 
         { 
          //Is the install location known? 
          if (sk.GetValue("InstallLocation") == null) 
           Software += sk.GetValue("DisplayName") + " - Install path not known\n"; //Nope, not here. 
          else 
           Software += sk.GetValue("DisplayName") + " - " + sk.GetValue("InstallLocation") + "\n"; //Yes, here it is... 
         } 
        } 
        catch (Exception ex) 
        { 
         //No, that exception is not getting away... :P 
        } 
       } 
      } 
     } 

     return Software; 
    } 

Ahora el problema es cómo puedo obtener el icono de la aplicación instalada?

Gracias de antemano.

+0

Una cosa más que el código de seguridad también incluye actualizaciones de ventanas, ¿cómo puedo excluir esos programas? – MUS

Respuesta

8

Para determinar si es una actualización, habrá una clave llamada IsMinorUpgrade. Esto está presente y configurado en 1 para actualizaciones. Si es 0 o no está presente, entonces no es una actualización.

Para obtener un icono de un archivo ejecutable, utilice este código:

VB:

Public Function IconFromFilePath(filePath As String) As Icon 
    Dim result As Icon = Nothing 
    Try 
     result = Icon.ExtractAssociatedIcon(filePath) 
    Catch ''# swallow and return nothing. You could supply a default Icon here as well 
    End Try 
    Return result 
End Function 

C#:

public Icon IconFromFilePath(string filePath) 
{ 
    Icon result = null; 
    try { 
     result = Icon.ExtractAssociatedIcon(filePath); 
    } catch { } 
    return result; 
} 
+0

estoy usando la tecla "DisplayIcon" para obtener el ícono contra el programa instalado pero obtuve resultados diferentes en comparación con Add Remove Program Utility disponible en el panel de control de WIN XP. Alguna sugerencia ? – MUS

+0

Eso es raro. No tengo ninguna idea, pero veré si puedo investigar esto más – Icemanind

0

Para extraer el icono de la aplicación de Windows instala por primera vez necesitamos averiguar la ubicación del ícono para la aplicación de Windows instalada. Esta información se almacena en el registro en las ubicaciones siguientes -

  1. Clave nombre - HEKY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Uninstall Valor - DisplayIcon
  2. nombre clave - HKEY_CLASSES_ROOT \ Installer \ Products {productID} Valor - ProductIcon

para más detalle y código para obtener los iconos de aplicaciones - http://newapputil.blogspot.in/2015/06/extract-icons-of-installed-windows_17.html

Cuestiones relacionadas