Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-07-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cómo saber si está instalado un programa y dónde

Hola, eso, no recuerdo ninguna función que me diga si está instalado un programa, y si lo está que me devuelva la ruta al mismo.
Algo así como:

Código Delphi [-]
function EstaInstalado(cPrograma:string):string;
begin
  result:='';  
  if jfdsjfdsfj(cPrograma) then
    result PathAlPrograma;
end;

Ejemplo:
Código Delphi [-]
ShowMessage( EstaInstalado('ibexpert') );
Responder Con Cita
  #2  
Antiguo 08-07-2011
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
En el peor de los casos, buscar en el registro. Supongo que es ahí de donde obtiene la lista el "Instalar y eliminar programas", ¿no?

Ahora bien, saber la clave y la variable y cómo se llama ya es otra cosa.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 08-07-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Revisa esta entrada: Inventario de software instalado (WMI)

No son 3 líneas, pero bueno...
En el foro está también en este hilo junto con otras soluciones.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 08-07-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¡¡¡Gracias!!!,
Sabía que lo había visto antes, pero ya no tengo cabeza para recordar tanta cosa, me hace falta un implante de disco duro.
Responder Con Cita
  #5  
Antiguo 08-07-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Casimiro Notevi Ver Mensaje
...me hace falta un implante de disco duro.


Lo único que las aplicaciones que aparecen son las que se han instalado utilizando Windows Installer.
Para otros casos habría que ir a leer directamente el registro.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 08-07-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Antonio.

Aca te pongo una version un poco modificada de la conocida versión del código.
Código Delphi [-]
uses Registry;
function isAppInstalled(AppName: string): Boolean;
const
  CLAVE = '\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall';
var
  Reg: TRegistry;
  L1,L2 : TStringList;
  j,dn,us: integer;
begin
  Reg:= TRegistry.Create;
  L1:= TStringList.Create;
  L2:= TStringList.Create;
  try
    Reg.RootKey:= HKEY_LOCAL_MACHINE;
    Reg.OpenKey(CLAVE, False);
    Reg.GetKeyNames(L1);
    Result:= False;
    for j := 0 to L1.Count-1 do
    begin
      Reg.OpenKeyReadOnly(CLAVE+'\'+L1.Strings[j]);
      Reg.GetValueNames(L2);
      if(L2.IndexOf('DisplayName')<> -1)and
        (L2.IndexOf('UninstallString')<> -1)and
        (Reg.ReadString('DisplayName')=AppName) then
          Result:= True;
    end;
  finally
    L1.Free;
    L2.Free;
    Reg.Free;
  end;
end;
Devuelve verdadero si encuentra el nombre de la aplicación.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 08-07-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Gracias amigos, ahora a hacer pruebas para ver por qué me decido.
Responder Con Cita
  #8  
Antiguo 08-07-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo Antonio.

Me acabo de dar cuenta que pegué una de mis pruebas pero no la final y aunque igual funciona, te hacerco mis disculpas.

Esta la versión que corresponde:
Código Delphi [-]
function isAppInstalled(AppName: string): Boolean;
const
  CLAVE = '\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\';
var
  Reg: TRegistry;
  L1,L2 : TStringList;
  c: integer;
begin
  Reg:= TRegistry.Create;
  L1:= TStringList.Create;
  L2:= TStringList.Create;
  try
    Reg.RootKey:= HKEY_LOCAL_MACHINE;
    Reg.OpenKey(CLAVE, False);
    Reg.GetKeyNames(L1);
    Result:= False;
    c:= 0;
    while not Result and (c < L1.Count) do
    begin
      Reg.OpenKeyReadOnly(CLAVE+L1[c]);
      Reg.GetValueNames(L2);
      if(L2.IndexOf('DisplayName')<> -1)and
        (L2.IndexOf('UninstallString')<> -1)and
        (Reg.ReadString('DisplayName')=AppName) then
          Result:= True;
      Inc(c);
    end;
  finally
    L1.Free;
    L2.Free;
    Reg.Free;
  end;
end;
Para obtener la ruta estoy un poco complicado.
En teoría deberían estar en: \SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\, pero no estan todas.
Y además hay casos como por ejemplo: Malwarebytes' Anti-Malware, cuyo nombre aparece como: mbam.exe. Allí si encontramos Path = C:\Program Files\Malwarebytes' Anti-Malware.
Entonces deberíamos enviar como argumento mbam y no Malwarebytes' Anti-Malware para que lo encuentre...
Voy a tener que investigar un poco mas.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 08-07-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.057
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
Para obtener la ruta estoy un poco complicado.
En teoría deberían estar en: \SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\, pero no estan todas.
Y además hay casos como por ejemplo: Malwarebytes' Anti-Malware, cuyo nombre aparece como: mbam.exe. Allí si encontramos Path = C:\Program Files\Malwarebytes' Anti-Malware.
Entonces deberíamos enviar como argumento mbam y no Malwarebytes' Anti-Malware para que lo encuentre...
Voy a tener que investigar un poco mas.
Un saludo.
Sí, ya he visto que no siempre se corresponden los nombres "publicitarios" con los registrados en el sistema.
Parece que no es tan sencillo como se suponía debería ser.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cómo saber si un .OCX está instalado luisdevis API de Windows 2 22-09-2018 10:28:14
¿ Cómo saber que cliente de correo está instalado por defecto en un PC ? Aldo Internet 5 12-06-2013 11:58:15
Como saber en donde esta posicionado el foco RedVenom Varios 9 02-12-2008 19:19:14
saber si esta php instalado coulthard Internet 4 20-04-2006 19:56:43
Como saber si esta instalado el BDE en un ordenador Jose Manuel Conexión con bases de datos 6 13-05-2003 10:07:49


La franja horaria es GMT +2. Ahora son las 16:13:03.


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
Copyright 1996-2007 Club Delphi