Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   listados de software instalado (https://www.clubdelphi.com/foros/showthread.php?t=69980)

vroa74 22-09-2010 21:43:13

listados de software instalado
 
requiero obtener un listado del software instalado en windows vista y windows 7. ya que he corrido una rutina que encontre en la res mas solo funciona en windows xp.
en windows vista y windows 7 no me aroja nada..
alguien puede ayudarme ??????

Les dejo el codigo que encontre ...
gracias por la ayuda....



Código Delphi [-]
procedure TForm1.ListarAplicaciones( Lista: TListBox );
const
  INSTALADOS = '\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall';
var
  Registro: TRegistry;
  Lista1 : TStringList;
  Lista2 : TStringList;
  j, n : integer;
  auxx : string;
begin
  Registro := TRegistry.Create;
  Lista1 := TStringList.Create;
  Lista2 := TStringList.Create;   // Guardamos todas las claves en la lista 1
  with Registro do
  begin
    RootKey := HKEY_LOCAL_MACHINE;
    OpenKey( INSTALADOS, False );
    GetKeyNames( Lista1 );
  end;    // Recorremos la lista 1 y leemos el nombre del programa instalado
  for j := 0 to Lista1.Count-1 do
  begin
    Registro.OpenKey( INSTALADOS + '\' + Lista1.Strings[j], False );
    Registro.GetValueNames( Lista2 );    // Mostramos el programa instalado sólo si tiene DisplayName
    n := Lista2.IndexOf( 'DisplayName' );
    if ( n <> -1 ) and ( Lista2.IndexOf('UninstallString') <> -1 ) then
    begin  //      Listbox1.Items.Add( ( Registro.ReadString( Lista2.Strings[n] ) ) );
      RichEdit1.Lines.Add( (chr(9)+'-'+Registro.ReadString( Lista2.Strings[n] ) )+#9+auxx );
    end;
  end;   //  Listbox1.Sorted := True; // Ordenamos la lista alfabéticamente
  Lista1.Free;
  Lista2.Free;
  Registro.CloseKey;
  Registro.Destroy;
end;

cloayza 22-09-2010 22:26:25

No tengo Vista ni Windows 7, pero creo que debes buscar por aqui...

Código Delphi [-]
const
  INSTALADOS = '\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall';

Seguramente la clave del registro para Vista y Win7 debe ser diferente...revisa el registro y busca a mano hasta dar con las claves correctas...

Saludos

roman 23-09-2010 01:02:25

Probé el código en Windows Vista y sí me funciona. Quizá lo estás ejecutando desde una cuenta sin privilegios para leer esa clave del registro.

// Saludos

Neftali [Germán.Estévez] 23-09-2010 10:13:05

También puedes acceder utilizando WMI (Windows Management Instrumentation). Para ello existe la Clase Win32_Product. Hace tiempo hice un ejemplo para esto mismo y puedes descargar el código y el ejecutable desde mi web, además de la explicación de la clase y el proceso.


roman 23-09-2010 16:55:28

Guau! Neftalí, comienzo a sospechar que eres un clon de Zarko Gajic. ¿Hay algún tema al que no le hayas hincado el diente? :)

// Saludos

Neftali [Germán.Estévez] 23-09-2010 17:33:24

Cita:

Empezado por roman (Mensaje 377285)
¿Hay algún tema al que no le hayas hincado el diente?

Muchos, todavía hay muchos...

La verdad es que WMI es un tema muy interesante y hace tiempo que me estoy "peleando" con ella. El potencial es muy grande.

ElKurgan 23-09-2010 20:13:55

Me has dejado de piedra. ¡Eres un monstruo!

Saludos

Jose_Pérez 28-08-2012 14:15:27

Estoy utilizando WMI para acceder a la clase Win32_Product.

Para mí sorpesa, no me lista todo el software instalado.

Sin embargo, accediendo a Software\Microsoft\Windows\CurrentVersion\Uninstall a través de la API, me lista todo el software:

http://www.swissdelphicenter.ch/en/showcode.php?id=480

Mi interés en utilizar WMI es la facilidad de acceder a equipos remotos. ¿Cómo puedo solucionarlo?


La franja horaria es GMT +2. Ahora son las 21:46:29.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi