Ver la Versión Completa : Como obtener metadatos de un exe
JoAnCa
28-07-2023, 07:51:03
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?name=Downloads&d_op=viewdownloaddetails&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) :
https://i.imgur.com/a9nOyah.png
Lo he probado en Delphi 11 y funciona perfectamente.
Neftali [Germán.Estévez]
28-07-2023, 09:42:42
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.
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
;552180']Esto lo había mirado hace tiempo:
https://www.ajpdsoft.com/modules.php?name=Downloads&d_op=viewdownloaddetails&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) :
https://i.imgur.com/a9nOyah.png
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
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.
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
;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
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.
^\||/^\||/^\||/^\||/^\||/
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.