Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como obtener metadatos de un exe (https://www.clubdelphi.com/foros/showthread.php?t=96316)

JoAnCa 28-07-2023 07:51:03

Como obtener metadatos de un exe
 
Hola a todos

Quisiera obtener los metadatos de un archivo .exe, en especifico el Nombre del Producto y la version.

Estoy usando delphi XE7, probé algunas soluciones que encontré:

- Con TFileVersionInfo, pero no funcionan en XE7

- Con:

...
GetFileVersionInfo(PChar(FileName), 0, InfoSize, VerInfo)
...
VerQueryValue(VerInfo, '\StringFileInfo\040904B0\ProductName', Pointer(VerValue), VerValueSize)
...

pero no funciona en todos los casos

Alguien tiene alguna solucion que funcione en todos los casos

Neftali [Germán.Estévez] 28-07-2023 09:41:19

Esto lo había mirado hace tiempo:
https://www.ajpdsoft.com/modules.php...etails&lid=127

Está la explicación y puedes descargar código fuente y un proyecto que te obtiene esta información (a ver si es lo necesitas) :



Lo he probado en Delphi 11 y funciona perfectamente.

Neftali [Germán.Estévez] 28-07-2023 09:42:42

Cita:

Empezado por JoAnCa (Mensaje 552179)
pero no funciona en todos los casos


Habría que saber qué casos son los que no te funcionan.

identsoft 28-07-2023 09:48:47

Si lo que quieres es ver la versión del ejecutable, te pongo una función que devuelve dicha versión.
Esta función, creo que la saqué del club delphi ( o de alguno de sus miembros).
Hay que pasarle como parámetro la ruta donde esté el ejecutable.

Código Delphi [-]
function TfrmMain.VersionExe(const ruta: string) : string;
var
  Pt, Pt2: Pointer;
  Size, Size2: DWord;
  ruta_aux : string;
begin
  Result := '';
  ruta_aux := ruta + 'NOMBRE DEL EJECUTABLE.EXE';
  if not FileExists(ruta_aux) then Exit;
  Size := GetFileVersionInfoSize(PChar(ruta_aux), Size2);
  if (Size > 0) then begin
    GetMem(Pt, Size);
    try
      GetFileVersionInfo(PChar(ruta_aux), 0, Size, Pt);
      VerQueryValue (Pt, '\', Pt2, Size2);
      with TVSFixedFileInfo (Pt2^) do begin
        Result :=
        IntToStr(HiWord(dwFileVersionMS))+'.'+
        IntToStr(LoWord(dwFileVersionMS))+'.'+
        IntToStr(HiWord(dwFileVersionLS))+'.'+
        IntToStr(LoWord(dwFileVersionLS));
      end;
    finally
      FreeMem(Pt);
    end;
  end;
end;

Espero que te sirva
Saludos

JoAnCa 28-07-2023 17:02:14

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 552180)
Esto lo había mirado hace tiempo:
https://www.ajpdsoft.com/modules.php...etails&lid=127

Está la explicación y puedes descargar código fuente y un proyecto que te obtiene esta información (a ver si es lo necesitas) :



Lo he probado en Delphi 11 y funciona perfectamente.

Muchas gracias por la respuesta.
Ahora que lo veo, recuerdo que una vez tambien lo habia visto, pero parece que mi memoria ya no esta buena jejeje :D

JoAnCa 28-07-2023 17:06:11

Cita:

Empezado por identsoft (Mensaje 552182)
Si lo que quieres es ver la versión del ejecutable, te pongo una función que devuelve dicha versión.
Esta función, creo que la saqué del club delphi ( o de alguno de sus miembros).
Hay que pasarle como parámetro la ruta donde esté el ejecutable.

Código Delphi [-]
function TfrmMain.VersionExe(const ruta: string) : string;
var
  Pt, Pt2: Pointer;
  Size, Size2: DWord;
  ruta_aux : string;
begin
  Result := '';
  ruta_aux := ruta + 'NOMBRE DEL EJECUTABLE.EXE';
  if not FileExists(ruta_aux) then Exit;
  Size := GetFileVersionInfoSize(PChar(ruta_aux), Size2);
  if (Size > 0) then begin
    GetMem(Pt, Size);
    try
      GetFileVersionInfo(PChar(ruta_aux), 0, Size, Pt);
      VerQueryValue (Pt, '\', Pt2, Size2);
      with TVSFixedFileInfo (Pt2^) do begin
        Result :=
        IntToStr(HiWord(dwFileVersionMS))+'.'+
        IntToStr(LoWord(dwFileVersionMS))+'.'+
        IntToStr(HiWord(dwFileVersionLS))+'.'+
        IntToStr(LoWord(dwFileVersionLS));
      end;
    finally
      FreeMem(Pt);
    end;
  end;
end;

Espero que te sirva
Saludos

Gracias por la respuesta, para la version tambien me sirve, pero tambien necesito el nombre del producto.

JoAnCa 28-07-2023 17:13:36

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 552181)
Habría que saber qué casos son los que no te funcionan.

En los metodos que probé, que decia que no funcionaba siempre, en los que no devolvia nada fueron en estos archivos exe que probé:
draw.io, adobe acrobat y WPS

Con la solucion que me diste de AjpdSoft, funciona en todos los casos que probé

JoAnCa 28-07-2023 17:25:51

Revisando el codigo de AjpdSoft, veo el por que no me funcionaba el codigo que yo tenia.
El problema esta en el idioma, que en mi codigo estaba fijo, y si no coincidia con el del archivo, no daba ningun resultado.

En el codigo de AjpdSoft, se usa el mismo metodo, pero se obtiene el idioma del archivo primero, para despues poder pasarselo como parametro, y asi el idioma sera el correcto.

Neftali [Germán.Estévez] 31-07-2023 08:30:12

Cita:

Empezado por JoAnCa (Mensaje 552187)
En el codigo de AjpdSoft, se usa el mismo metodo, pero se obtiene el idioma del archivo primero, para despues poder pasarselo como parametro, y asi el idioma sera el correcto.


^\||/^\||/^\||/^\||/^\||/


La franja horaria es GMT +2. Ahora son las 20:23:10.

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