Pegar versão de pacote BPL pelo Delphi
Pesso@l,
alguém sabe como ler um BPL e capturar a versão do pacote, lembrando que essa versão é ajustada nas opções do pacote (assim como do exe)?
qualquer ajuda será bem vinda.
alguém sabe como ler um BPL e capturar a versão do pacote, lembrando que essa versão é ajustada nas opções do pacote (assim como do exe)?
qualquer ajuda será bem vinda.
Eniorm
Curtidas 0
Respostas
Eniorm
22/03/2011
Opa! achei na net um método para tal, com o objetivo que pegar versão de EXE porém testei e funciona perfeitamente com o pacote BPL.
o código do exemplo só pegava a versão do programa na qual a function era chamada, mas eu fiz uma mudança simples para passar como entrada o nome do arquivo e a função retorna uma string da versão.
function PegaVersao(Arquivo : String) : String;type PFFI = ^vs_FixedFileInfo;var F : PFFI; Handle : Dword; Len : Longint; Data : Pchar; Buffer : Pointer; Tamanho : Dword; Parquivo: Pchar;begin if not (FileExists(Arquivo)) then begin Result := 'NAO-ENCONTRADO'; Abort; end;
Parquivo := StrAlloc(Length(Arquivo) + 1); StrPcopy(Parquivo, Arquivo); Len := GetFileVersionInfoSize(Parquivo, Handle); Result := ''; if (Len > 0) then begin Data:=StrAlloc(Len+1); if GetFileVersionInfo(Parquivo,Handle,Len,Data) then begin VerQueryValue(Data, '\',Buffer,Tamanho); F := PFFI(Buffer); Result := Format('%d.%d.%d.%d', [HiWord(F^.dwFileVersionMs), LoWord(F^.dwFileVersionMs), HiWord(F^.dwFileVersionLs), Loword(F^.dwFileVersionLs)] ); end; StrDispose(Data); end; StrDispose(Parquivo);end;
o código do exemplo só pegava a versão do programa na qual a function era chamada, mas eu fiz uma mudança simples para passar como entrada o nome do arquivo e a função retorna uma string da versão.
function PegaVersao(Arquivo : String) : String;type PFFI = ^vs_FixedFileInfo;var F : PFFI; Handle : Dword; Len : Longint; Data : Pchar; Buffer : Pointer; Tamanho : Dword; Parquivo: Pchar;begin if not (FileExists(Arquivo)) then begin Result := 'NAO-ENCONTRADO'; Abort; end;
Parquivo := StrAlloc(Length(Arquivo) + 1); StrPcopy(Parquivo, Arquivo); Len := GetFileVersionInfoSize(Parquivo, Handle); Result := ''; if (Len > 0) then begin Data:=StrAlloc(Len+1); if GetFileVersionInfo(Parquivo,Handle,Len,Data) then begin VerQueryValue(Data, '\',Buffer,Tamanho); F := PFFI(Buffer); Result := Format('%d.%d.%d.%d', [HiWord(F^.dwFileVersionMs), LoWord(F^.dwFileVersionMs), HiWord(F^.dwFileVersionLs), Loword(F^.dwFileVersionLs)] ); end; StrDispose(Data); end; StrDispose(Parquivo);end;
GOSTEI 0