¿Cómo puedo leer los detalles de un archivo exe como la Versión del archivo, la Versión del producto y cualquier otra cosa almacenada en la pestaña Detalles en la ventana Propiedades de ese archivo? Gracias.¿Cómo puedo leer los detalles del archivo?
Respuesta
Esto ha sido descrito en About:
Básicamente, sólo tiene que utilizar la función GetFileVersionInfo
para obtener los datos y luego VerQueryValue
función para leerlo.
Debido a estas funciones de API son un poco 'duro' para usar, he escrito un ejemplo sencillo:
type
TEXEVersionData = record
CompanyName,
FileDescription,
FileVersion,
InternalName,
LegalCopyright,
LegalTrademarks,
OriginalFileName,
ProductName,
ProductVersion,
Comments,
PrivateBuild,
SpecialBuild: string;
end;
function GetEXEVersionData(const FileName: string): TEXEVersionData;
type
PLandCodepage = ^TLandCodepage;
TLandCodepage = record
wLanguage,
wCodePage: word;
end;
var
dummy,
len: cardinal;
buf, pntr: pointer;
lang: string;
begin
len := GetFileVersionInfoSize(PChar(FileName), dummy);
if len = 0 then
RaiseLastOSError;
GetMem(buf, len);
try
if not GetFileVersionInfo(PChar(FileName), 0, len, buf) then
RaiseLastOSError;
if not VerQueryValue(buf, '\VarFileInfo\Translation\', pntr, len) then
RaiseLastOSError;
lang := Format('%.4x%.4x', [PLandCodepage(pntr)^.wLanguage, PLandCodepage(pntr)^.wCodePage]);
if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\CompanyName'), pntr, len){ and (@len <> nil)} then
result.CompanyName := PChar(pntr);
if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\FileDescription'), pntr, len){ and (@len <> nil)} then
result.FileDescription := PChar(pntr);
if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\FileVersion'), pntr, len){ and (@len <> nil)} then
result.FileVersion := PChar(pntr);
if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\InternalName'), pntr, len){ and (@len <> nil)} then
result.InternalName := PChar(pntr);
if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\LegalCopyright'), pntr, len){ and (@len <> nil)} then
result.LegalCopyright := PChar(pntr);
if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\LegalTrademarks'), pntr, len){ and (@len <> nil)} then
result.LegalTrademarks := PChar(pntr);
if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\OriginalFileName'), pntr, len){ and (@len <> nil)} then
result.OriginalFileName := PChar(pntr);
if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\ProductName'), pntr, len){ and (@len <> nil)} then
result.ProductName := PChar(pntr);
if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\ProductVersion'), pntr, len){ and (@len <> nil)} then
result.ProductVersion := PChar(pntr);
if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\Comments'), pntr, len){ and (@len <> nil)} then
result.Comments := PChar(pntr);
if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\PrivateBuild'), pntr, len){ and (@len <> nil)} then
result.PrivateBuild := PChar(pntr);
if VerQueryValue(buf, PChar('\StringFileInfo\' + lang + '\SpecialBuild'), pntr, len){ and (@len <> nil)} then
result.SpecialBuild := PChar(pntr);
finally
FreeMem(buf);
end;
end;
intentarlo. Pero cuidado: actualmente, este solo funciona para en-us EXEs! No funciona para la mayoría de los EXEs en mi máquina sueca, por ejemplo. Es tarde ahora; mañana ampliaré esto para que funcione con cualquier lenguaje EXE, si solo me queda algo de tiempo. [El código About.com tiene el mismo problema, pero ni siquiera pretenden que sea un problema.]
Actualización: El código ahora funciona con cualquier lenguaje EXE.
Sample usage on Connect.exe http://privat.rejbrand.se/verinfo.png
(es-es)
Sample usage on Explorer.exe (Swedish) http://privat.rejbrand.se/verinfo2.png
(sueco)
- 1. cómo recuperar los detalles del archivo de audio en iPhone
- 2. curl: leer los encabezados del archivo
- 3. ¿Cómo puedo leer datos grandes del archivo de proceso?
- 4. PHP: Leer los metadatos TrueType/OpenType del archivo de fuente
- 5. leer archivo del almacenamiento externo
- 6. ¿Cómo puedo leer un archivo .docx?
- 7. ¿Cómo puedo leer un archivo con Ruby?
- 8. ¿Cómo puedo recuperar los detalles del video de YouTube desde la URL del video usando PHP?
- 9. Leer valores nulos del archivo
- 10. Cómo leer los detalles de la tarjeta VISA inteligente basada en EMV
- 11. Leer del archivo o stdin
- 12. Leer del archivo en Eclipse
- 13. ¿Cómo leer el contenido del archivo desde un archivo?
- 14. Mostrar detalles del importador
- 15. ¿La mejor colección para guardar los detalles del estudiante?
- 16. Cómo puedo leer el archivo json de la tarjeta SD
- 17. ¿Puedo leer un archivo .TXT con PHP?
- 18. HP-UX - ¿Cómo puedo leer un archivo de texto del archivo tar sin extraerlo?
- 19. Leer del archivo, borrarlo, escribir en él
- 20. PHP: Leer línea específica del archivo
- 21. Identifique los detalles del sistema operativo en C#
- 22. ¿Cómo leer un archivo del jar en Java?
- 23. ¿Cómo se pueden leer bytes del archivo en Python
- 24. ¿Cómo puedo leer un archivo de texto sin bloquearlo?
- 25. ¿Cómo puedo leer un archivo .tar.gz con PHP?
- 26. Threads, QRunnable y QThreadPool, no puedo encajar en los detalles
- 27. Leer el archivo HTML de los recursos
- 28. Obtenga los detalles del carrito de compras en Magento
- 29. Cómo leer un archivo pim.vol
- 30. Leer datos estructurados del archivo binario -?
Muy útil. mi primera fuente de búsqueda fue ABOUT, pero no pude encontrarla, ¡me pregunto por qué! Realmente gracias – Armin
Me sale este error al compilar: "Los tipos de parámetros var reales y formales deben ser idénticos" ¿Dónde está el problema? ¡No hice ningún cambio en las funciones descritas! – Armin
@Armin: Ayudaría si nos dijera en qué línea aparece el error. –