Ir al contenido


Foto

Listar programas instalados y en que ruta se han instalado


  • Por favor identifícate para responder
7 respuestas en este tema

#1 alquimista

alquimista

    Member

  • Miembros
  • PipPip
  • 15 mensajes

Escrito 10 septiembre 2009 - 11:00

¿Como se pueden listar los programas instalados en Windows y la ubicación del exe?
Me interesa que aparezcan en dos listas, la primera con todos los instalados y en la segunda los que yo quiero añadir para obtener su ruta y nombre de la aplicación.
Mas o menos como una lista dual.
Ya mire la Cadena del registro de Windows UNistall, pero la ruta de los mismos no aparece.
Alguna sugerencia...

Gracias...
  • 0

#2 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 10 septiembre 2009 - 11:06

Listar los programas instalados en Windows
Windows almacena la lista de programas instalados (Agregar/Quitar
programas) en la clave de registro:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
\
En esa clave hay tantas subclaves como programas instalados. Pero lo que nos
interesa a nosotros no es el nombre de la clave del programa instalado sino el
nombre del programa que muestra Windows en Agregar/Quitar programas.
Para ello entramos en cada clave y leemos el valor DisplayName.
Lo primero añadimos la unidad:
uses
Windows, Messages, ..., Registry;
Y aquí­ tenemos un procedimiento al cual le pasamos un ListBox y nos lo
rellena con la lista de programas instalados en Windows:
procedure ListarAplicaciones( Lista: TListBox );
const
INSTALADOS = '\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall';
var
Registro: TRegistry;
Lista1 : TStringList;
Lista2 : TStringList;
j, n : integer;
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
Lista.Items.Add( ( Registro.ReadString( Lista2.Strings[n] ) ) );
end;
Lista.Sorted := True; // Ordenamos la lista alfabéticamente
Lista1.Free;
Lista2.Free;
Registro.CloseKey;
Registro.Destroy;
end;
Con esto se podrí­a hacer un programa que eliminara de Agregar/Quitar
programas aquellas claves de programas mal desinstalados.
Pruebas realizadas en Delphi 7.                 


lo encontre en un manual llamado delphi al limite, chequea si te sirve por lo menos de guia
  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 10 septiembre 2009 - 11:12



delphi
  1. Uses Registry;
  2.  
  3. ...
  4.  
  5. procedure TForm1.Button1Click(Sender: TObject);
  6. var
  7.   MyList: TStringList;
  8.   MyRegistry: TRegistry;
  9.   i: Integer;
  10.   Str: string;
  11. begin
  12.   MyRegistry:=TRegistry.Create;
  13.   MyList:=TStringList.Create;
  14.   with MyRegistry do
  15.   begin
  16.     RootKey:=HKEY_LOCAL_MACHINE;
  17.     if OpenKey(
  18.       'Software\Microsoft\Windows\CurrentVersion\Uninstall',
  19.       False)=True then GetKeyNames(MyList);
  20.     CloseKey;
  21.  
  22.     for i:=0 to MyList.Count-1 do
  23.     begin
  24.       RootKey:=HKEY_LOCAL_MACHINE;
  25.       OpenKey(
  26.         'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+
  27.         MyList[i],
  28.         False);
  29.       Str:=ReadString('DisplayName');
  30.       if Str<>'' then
  31.         Memo1.Lines.Add(ReadString('DisplayName'));
  32.       CloseKey;
  33.     end;
  34.   end;
  35. end;



Saludos.
  • 0

#4 alquimista

alquimista

    Member

  • Miembros
  • PipPip
  • 15 mensajes

Escrito 10 septiembre 2009 - 11:16

gracias por responder tan rápido....
Como os comente esa solución ya la mire y en el registro de windos aparece la cadena de desinstalación pero no la ruta del exe principal.
otra sugerencia??

Saludos
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 10 septiembre 2009 - 11:23

Hola, aquí­ pongo con la ruta del .exe, que se me pasó en el code anterior:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   MyList: TStringList;
  4.   MyRegistry: TRegistry;
  5.   i: Integer;
  6.   Str: string;
  7. begin
  8.   MyRegistry:=TRegistry.Create;
  9.   MyList:=TStringList.Create;
  10.   with MyRegistry do
  11.   begin
  12.     RootKey:=HKEY_LOCAL_MACHINE;
  13.     if OpenKey(
  14.       'Software\Microsoft\Windows\CurrentVersion\Uninstall',
  15.       False)=True then GetKeyNames(MyList);
  16.     CloseKey;
  17.  
  18.     for i:=0 to MyList.Count-1 do
  19.     begin
  20.       RootKey:=HKEY_LOCAL_MACHINE;
  21.       OpenKey(
  22.         'Software\Microsoft\Windows\CurrentVersion\Uninstall\'+
  23.         MyList[i],
  24.         False);
  25.       Str:=ReadString('DisplayName');
  26.       if Str<>'' then
  27.         Memo1.Lines.Add(ReadString('DisplayName')+' - '+ReadString('InstallSource'));
  28.       CloseKey;
  29.     end;
  30.   end;
  31. end;



Saludos.
  • 0

#6 alquimista

alquimista

    Member

  • Miembros
  • PipPip
  • 15 mensajes

Escrito 10 septiembre 2009 - 03:33

Probado pero no sale la ruta y el nombre del exe, sino el lugar(path) desde el que se instaló (sin el exe) o en algunos programas no sale nada.

Lo que quiero es por ejemplo:
Nombre descriptivo ----> Ruta y Exe.
Microsoft Word 2003---> c:\Officeword\WINWORD.EXE

Gracias de nuevo...

A ver si se puede o no... :embarrassed:
  • 0

#7 alquimista

alquimista

    Member

  • Miembros
  • PipPip
  • 15 mensajes

Escrito 11 septiembre 2009 - 03:26

Bueno cambiando 'InstallSource' por 'InstallLocation' obtengo la ruta.

Google Earth - C:\Archivos de programa\Google\Google Earth\

Ahora solo falta obtener el exe (EARTH.exe)

¿Existe alguna API que dando su descripción saque el exe? (Google Earth-->EARTH.exe)

:smiley:
  • 0

#8 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 11 septiembre 2009 - 07:27

Hola, aquí­ el asunto es un poco difí­cil creo hasta imposible, no hay manera que ví­a registro conseguir el .exe especí­fico de todo aquél programa cuya forma de instalación no haya sido a través de MSI que es el estandar de Windows, para obtener los programas instalados a través de MSI tal vez esto te sirva, sólo así­ sí­ podrás conseguir el .exe de cada aplicación instalada, tal vez me equivoque, si es así­ que me corrijan please :D.

Saludos.
  • 0




IP.Board spam blocked by CleanTalk.