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 09-10-2023
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 20
rretamar Va camino a la famarretamar Va camino a la fama
Exclamation Detectar trayecto de instalación de LibreOffice

Hola colegas pascaleros.


¿ Conocer alguna manera de averiguar si una aplicación está instalada (la opción "programas y características" del Panel de Control) pero que funcione si que nuestro ejecutable tenga privilegios de administrador ? En el registro hay una lista de software instalado, pero si no estoy ejecutando mi software como administrador no la puede leer. En particular es para detectar el trayecto de lnstalación de la suite LibreOffice, que la utilizo desde línea de comandos (en modo no-interactivo / invisible) para convertir archivos RTF o DOC hacia el formato PDF, con la ventaja de que puedo firmar los archivos con un certioficado. La versión de 64 bits por defecto se instala en C:\Program Files\LibreOffice\program ,igual estaba viendo de poder obtener este trayecto.

Saludos.
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.

Última edición por dec fecha: 13-10-2023 a las 12:09:29.
Responder Con Cita
  #2  
Antiguo 09-10-2023
lucho6007 lucho6007 is offline
Miembro
 
Registrado: ene 2009
Ubicación: Junín, pcia de BsAs, Argentina
Posts: 74
Poder: 16
lucho6007 Va por buen camino
Hola!
No se si ya pudiste resolver el problema, pero en Delphi podés usar la siguiente función:
Código Delphi [-]
function MyShellFindExecutable(const aFileName: string): string;
var
  Buffer: array[0..MAX_PATH] of Char;
begin
  Result := '';
  FillChar(Buffer, SizeOf(Buffer), #0);
  if (SHELLAPI.FindExecutable(PChar(aFileName), nil, Buffer) > 32) then
    Result := Buffer;
end;

Si le pasas un nombre de archivo válido, te devuelve el archivo asociado. Si buscás por un .DOC y lo tenés ascociado a LibreOffice, te va a devolver la ubicación del exe que abre los .DOC.
Hay que agregar ShellAPI a la lista de unidades del uses.


¡Espero te sirva!

Última edición por Neftali [Germán.Estévez] fecha: 09-10-2023 a las 15:30:57. Razón: Añadir TAGs al código
Responder Con Cita
  #3  
Antiguo 10-10-2023
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 20
rretamar Va camino a la famarretamar Va camino a la fama
Cita:
Empezado por lucho6007 Ver Mensaje
Hola!
No se si ya pudiste resolver el problema, pero en Delphi podés usar la siguiente función:
Código Delphi [-]function MyShellFindExecutable(const aFileName: string): string; var Buffer: array[0..MAX_PATH] of Char; begin Result := ''; FillChar(Buffer, SizeOf(Buffer), #0); if (SHELLAPI.FindExecutable(PChar(aFileName), nil, Buffer) > 32) then Result := Buffer; end;


Si le pasas un nombre de archivo válido, te devuelve el archivo asociado. Si buscás por un .DOC y lo tenés ascociado a LibreOffice, te va a devolver la ubicación del exe que abre los .DOC.
Hay que agregar ShellAPI a la lista de unidades del uses.


¡Espero te sirva!
Hola.
No necesitaría saber el ejecutavble asociado a una extensión, lo que necesito es saber el trayecto de instalación de LibreOffice, o poder consultar una lista de los programas instalados para buscar el libreoffice y obtener de alguna manera el trayecto.

Atte. Ramon
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.
Responder Con Cita
  #4  
Antiguo 10-10-2023
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Para obtener la ruta de instalación de otro programa utilizando Delphi, generalmente necesitarás buscar en el registro de Windows donde se suelen almacenar las rutas de instalación de las aplicaciones. Aquí te muestro cómo hacerlo:
  1. Accede al registro de Windows: Utiliza las funciones de la unidad Registry para acceder al registro de Windows.
  2. Encuentra la clave del registro del programa: Busca la clave del registro correspondiente al programa cuya ruta de instalación deseas obtener. La ubicación de esta clave puede variar según el programa. Generalmente, se encuentra en la ruta HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall o en HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall en sistemas de 64 bits.
  3. Lee el valor de la clave de instalación: Una vez que encuentres la clave del programa, lee el valor de la entrada del registro que contiene la ruta de instalación.
Aquí tienes un ejemplo básico en Delphi para obtener la ruta de instalación de un programa específico a partir de su clave de registro:
Código Delphi [-]
unit MainForm;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Registry;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Reg: TRegistry;
  ProgramName: string;
begin
  // Especifica el nombre del programa cuya ruta deseas obtener
  ProgramName := 'NombreDelPrograma';

  Reg := TRegistry.Create;
  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;
    if Reg.OpenKeyReadOnly('Software\Microsoft\Windows\CurrentVersion\Uninstall\' + ProgramName) then
    begin
      if Reg.ValueExists('InstallLocation') then
        Memo1.Lines.Add('Ruta de instalación de ' + ProgramName + ': ' + Reg.ReadString('InstallLocation'))
      else
        Memo1.Lines.Add('No se encontró la ruta de instalación para ' + ProgramName);
    end
    else
      Memo1.Lines.Add('No se encontró información en el registro para ' + ProgramName);
  finally
    Reg.Free;
  end;
end;

end.
Este ejemplo asume que estás buscando la ruta de instalación de un programa específico llamado "NombreDelPrograma". Asegúrate de reemplazar este nombre con el nombre real del programa que estás buscando. El código abrirá el registro en la ubicación comúnmente usada para programas instalados y buscará la clave del programa especificado. Luego, leerá el valor de la clave 'InstallLocation' para obtener la ruta de instalación.
Responder Con Cita
  #5  
Antiguo 11-10-2023
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 20
rretamar Va camino a la famarretamar Va camino a la fama
Gracias Casimito. El problema que tengo es que no puedo acceder HKEY_LOCAL_MACHINE si el usuario que ejecuta el software no tiene privilegios de administrador.
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.
Responder Con Cita
  #6  
Antiguo 14-10-2023
Avatar de rretamar
[rretamar] rretamar is offline
Miembro Premium
 
Registrado: ago 2006
Ubicación: San Francisco, Córdoba, Argentina
Posts: 1.168
Poder: 20
rretamar Va camino a la famarretamar Va camino a la fama
Al final como no encontré una manera de detectar ese trayecto sin tener privilegios de administrador, agregué un campo en la tabla de configuración donde especifico el trayecto manualmente.
__________________
Lazarus Codetyphon : Desarrollo de aplicaciones Object Pascal, libre y multiplataforma.
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
Detectar USB mefixxto API de Windows 6 31-12-2010 20:14:27
Detectar GPU madiazg Varios 5 28-08-2010 16:58:12
Detectar el uso de las Teclas pichi Vignola Varios 1 16-06-2006 14:18:38
Detectar directorio de instalación de MS Excel DanForever API de Windows 2 25-05-2006 13:38:29
Detectar IP Carliviris Varios 3 17-04-2006 19:18:26


La franja horaria es GMT +2. Ahora son las 11:05:46.


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