Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Windows 8.1, Delphi XE2: ¿Cómo puedo saber la versión de mi ejecutable? (https://www.clubdelphi.com/foros/showthread.php?t=88476)

TiammatMX 10-06-2015 22:47:42

Windows 8.1, Delphi XE2: ¿Cómo puedo saber la versión de mi ejecutable?
 
Buen día/tarde/noche (según aplique), compañeros del Club.

Tengo un EXE compilado en Delphi XE2, y deseo extraer la versión del mismo, de preferencia sin utilizar componentes o productos de terceros...

Y como siempre, agradeciendo de antemano.

escafandra 11-06-2015 00:03:37

Si tu app usa el campo versión en tu ejecutable, puedes averiguar la versión de esta forma (Conocer la versión de un programa):

Código Delphi [-]
uses
  Windows, ...;

type
TVersion = record
  major: DWORD;
  minor: DWORD;
  release: DWORD;
  build: DWORD;
end;

implementation

function GetVersion(FileName: String; var Version: TVersion): boolean;
var
  dwHandle: DWORD;
  verInfo: PVSFIXEDFILEINFO;
  Data: Pointer;
  verSize, dataSize: DWORD;
begin
  Result:= false;
  ZeroMemory(@Version, sizeof(TVersion));
  dwHandle:= 0;
  dataSize:= GetFileVersionInfoSize(PCHAR(FileName), dwHandle);
  GetMem(Data, dataSize);
  if GetFileVersionInfo(PCHAR(FileName), dwHandle, dataSize, Data) then
  begin
    if VerQueryValue(Data, '\', Pointer(verInfo), verSize) then
    begin
      if verSize > 0 then
      begin
        if verInfo.dwSignature = $FEEF04BD then
        begin
          Version.major:= verInfo.dwFileVersionMS shr 16;
          Version.minor:= verInfo.dwFileVersionMS and $FFFF;
          Version.release:= verInfo.dwFileVersionLS shr 16;
          Version.build:= verInfo.dwFileVersionLS and $FFFF;
          Result:= true;
        end;
      end;
    end;
  end;
  FreeMem(Data);
end;

function GetVersionString(FileName: String): String;
var
  Version: TVersion;
begin
  GetVersion(FileName, Version);
  Result:= Format('%d.%d.%d.%d', [Version.major, Version.minor, Version.release, Version.build]);
end;

Saludos.

ecfisa 11-06-2015 00:37:35

Hola TiammatMX.

Otra variante: Saber la versión de un ejecutable

Saludos :)

nlsgarcia 11-06-2015 02:59:56

TiammatMX,

Cita:

Empezado por TiammatMX
...Tengo un EXE compilado en Delphi XE2, y deseo extraer la versión del mismo, de preferencia sin utilizar componentes o productos de tercero...

:rolleyes:

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetFileVersion(const FileName: String) : String;
var
   InfoSize, Handle : LongWord;
   Buffer : Array of Byte;
   FileInfo : PVSFixedFileInfo;

begin
   try
      InfoSize := GetFileVersionInfoSize(PChar(FileName), Handle);
      SetLength(Buffer, InfoSize);
      GetFileVersionInfo(PChar(FileName), Handle, InfoSize, Buffer);
      VerQueryValue(Buffer, '\', Pointer(FileInfo), InfoSize);

      Result := Format('%d.%d.%d.%d', [LongRec(FileInfo.dwFileVersionMS).Hi,
                                       LongRec(FileInfo.dwFileVersionMS).Lo,
                                       LongRec(FileInfo.dwFileVersionLS).Hi,
                                       LongRec(FileInfo.dwFileVersionLS).Lo]);
   except
      Result := '0.0.0.0';
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   FileName : String;
   MsgUsr, MsgApp : String;

begin

   FileName := 'C:\Program Files\Borland\Delphi7\Bin\delphi32.exe';
   MsgApp := 'GetFileVersion';
   MsgUsr := Format('%s v%s',[ExtractFileName(FileName),GetFileVersion(FileName)]);
   MessageBox(Handle, PChar(MsgUsr), PChar(MsgApp), MB_OK + MB_ICONINFORMATION);

end;

end.
El código anterior en Delphi 7 sobre Windows 7 Professional x32, Permite obtener la versión de un archivo ejecutable (Major version, Minor version, Release, Build), como se muestra en la siguiente imagen:



Espero sea útil :)

Nelson.


La franja horaria es GMT +2. Ahora son las 19:49:26.

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