Verificando a versão de um aplicativo ou DLL

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (2)  (0)

 

A seguir, uma função que pode ser muito útil quando precisamos mostrar ao usuário final (ou mesmo atualizar) um programa executável/DLL. Note que no caso do executável ser compilado e criado em Delphi, algumas configurações devem ser marcadas para que a função retorne a versão correta e não exiba uma mensagem de erro.

Abra seu projeto, vá em Project->Options, na paleta Version Info. A opção Include version information in project e Auto-increment build number deve estar marcados. A versão de um programa é composta de 4 itens básicos:

Major version: A versão ‘maior’ do programa

Minor version: A versão ‘menor’ do programa

Release A versão de release

Build Número de vezes que o programa foi compilado e criado

 

A cada criação do executável o build do mesmo é acrescido de um, conforme marcado na opção Auto-increment build number. Ao selecionar estas opções e salvar o projeto, serão criados mais três arquivos:

 

a) Um arquivo .DOF (Delphi Option File) . Arquivo de opções do projeto

b) Um arquivo .CFG com as opções de compilação, linkedição e pacotes

c) Um arquivo .BKM

 

 

A função PegaVersão utiliza-se de três chamadas a API do Windows, são elas:

 

Nota: Esta função só é compatível com arquivos Win32!

 

a) GetFileVersionInfo, tipo boolean

b) GetFileVersionInfoSize, tipo dword

c) VerQueryValue, tipo boolean

 

BOOL GetFileVersionInfo(

LPTSTR lptstrFilename, // ponteiro para o nome do arquivo, string

DWORD dwHandle, // ignorado

DWORD dwLen, // comprimento do buffer

LPVOID lpData // ponteiro do buffer que recebe as // informações da versão

);

 

dwLen deve ser obtido com a função GetFileVersionInfoSize:

 

DWORD GetFileVersionInfoSize(

LPTSTR lptstrFilename, // ponteiro para o nome do arquivo, string

LPDWORD lpdwHandle // ponteiro para a variável para receber zero

);

 

BOOL VerQueryValue(

const LPVOID pBlock, // endereço do buffer para recurso da versão

LPTSTR lpSubBlock, // endereço do valor a retornar

LPVOID *lplpBuffer, // endereço do buffer para o ponteiro de versão

PUINT puLen // endereço do buffer do comprimento do valor- versão

);

 

A função contém as seguintes variáveis:

 

function PegaVersao(const Arquivo: string): String;

var

  Major, Minor, Release, Build: Integer;

  Zero: DWORD; {a variável que recebe zero}

  TamanhoVersao: DWORD;

  PDadosVersao: pointer;

  PInfoFixaArquivo: PVSFixedFileInfo;

  TamanhoFixoInfoArquivo: UINT;

 

Note o tipo de variável PVSFixedFileInfo (API do Windows), que é composta dos seguintes valores:

 

typedef struct _VS_FIXEDFILEINFO { // vsffi

DWORD dwSignature;

DWORD dwStrucVersion;

DWORD dwFileVersionMS;

DWORD dwFileVersionLS;

DWORD dwProductVersionMS;

DWORD dwProductVersionLS;

DWORD dwFileFlagsMask;

DWORD dwFileFlags;

DWORD dwFileOS;

DWORD dwFileType;

DWORD dwFileSubtype;

DWORD dwFileDateMS;

DWORD dwFileDateLS;

} VS_FIXEDFILEINFO;

 

Assim, para retornar a versão do executável/DLL, as seguintes funções devem ser chamadas:

 

1) GetFileVersionInfo(pChar(Arquivo), 0, TamanhoVersao, PDadosVersao)

2) VerQueryValue(PDadosVersao, '\', pointer(PInfoFixaArquivo), TamanhoFixoInfoArquivo)

3) As duas anteriores sendo verdadeiras:

 

Major := PInfoFixaArquivo^.dwFileVersionMS shr 16;

Minor := PInfoFixaArquivo^.dwFileVersionMS and $FFFF;

Release := PInfoFixaArquivo^.dwFileVersionLS shr 16;

Build := PInfoFixaArquivo^.dwFileVersionLS and $FFFF;

 

Para utilizar a função:

 

<variável string>:=Pegaversao(<path do executável, ou da DLL>

 

No exemplo anexo, foi criado um form com um button. Ao clicá-lo, veremos a versão do próprio programa versão.exe.

 

 

Danilo Lattuf Zanaga (zanagadanilo@uol.com.br), 32, Programador Sênior graduado em Ciências da Computação e Pós-graduado em Sistemas de Informatização Empresarial pela Universidade Paulista – UNIP - SP. Trabalha na área de saúde hospitalar desde 1997 e utiliza Delphi desde a sua primeira versão.

Para fazer o download do programa de seu código fonte , clique aqui.

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?