A função a seguir ( fonte: DtDelphi ) pega informações do exe ( desde que
você faça o compilador do incluí-las com a Opção Version Info  do projeto )

function FileVerInfo(const FileName: string;var FileInfo: TStringList):
Boolean; // // Obtem diversas informações de um arquivo executável // //
Requer um StringList criado antes de executar a função // deve ser declarado
na clausula Var no inicio da Unit // StrLst := TStringList.Create; // //
const   Key: array[1..9] of string =('CompanyName',   'FileDescription',
'FileVersion',   'InternalName',   'LegalCopyright',   'OriginalFilename',
'ProductName',   'ProductVersion',   'Comments');   KeyBr: array [1..9] of
string = ('Empresa..........................',
'Descricao........................',   'Versao do Arquivo...........',
'Nome Interno...................',   'Copyright..........................',
'Nome Original do Arquivo.',   'Produto.............................',
'Versao do Produto............',   'Comentarios...............:'); var
Dummy : THandle;   BufferSize, Len : Integer;   Buffer : PChar;   LoCharSet,
HiCharSet : Word;   Translate, Return : Pointer;   StrFileInfo, Flags :
string;   TargetOS, TypeArq : string;   FixedFileInfo : Pointer;   i : Byte;
begin Result := False; If not FileExists(FileName) then   begin
showmessage('Arquivo não encontrado');   Result := False;   exit;
end; BufferSize
:= GetFileVersionInfoSize(PChar(FileName), Dummy); if BufferSize <> 0 then
begin   GetMem(Buffer, Succ(BufferSize));   try   if
GetFileVersionInfo(PChar(FileName),
0, BufferSize,Buffer) then   begin   if VerQueryValue(Buffer,
'\VarFileInfo\Translation', Translate, UINT(Len)) then   begin   LoCharSet
:= LoWord(Longint(Translate^));   HiCharSet := HiWord(Longint(Translate^));
for i := 1 to 9 do   begin   StrFileInfo :=
Format('\StringFileInfo\0%x0%x\%s',[LoCharSet, HiCharSet, Key[i]]);
ifVerQueryValue(Buffer,PChar(StrFileInfo), Return,UINT(Len))
then   begin   FileInfo.Add(KeyBr[i] + ': ' + PChar(Return));   end;   end;
if VerQueryValue(Buffer,'\',FixedFileInfo, UINT(Len)) then
withTVSFixedFileInfo(FixedFileInfo^)
do   begin   Flags := '';   if (dwFileFlags and VS_FF_DEBUG) = VS_FF_DEBUG
then   begin   Flags := Concat(Flags,'*Debug* ');   end;   if (dwFileFlags
and VS_FF_SPECIALBUILD) = VS_FF_SPECIALBUILD then   begin   Flags :=
Concat(Flags, '*Special Build* ');   end;   if (dwFileFlags and
VS_FF_PRIVATEBUILD) = VS_FF_PRIVATEBUILD then   begin   Flags :=
Concat(Flags, '*Private Build* ');   end;   if (dwFileFlags and
VS_FF_PRERELEASE) = VS_FF_PRERELEASE then   begin   Flags := Concat(Flags,
'*Pre-Release Build* ');   end;   if (dwFileFlags and VS_FF_PATCHED) =
VS_FF_PATCHED then   begin   Flags := Concat(Flags, '*Patched* ');   end;
if Flags <> '' then   begin   FileInfo.Add('Atributos: ' + Flags);   end;
TargetOS := 'Plataforma (OS): ';   case dwFileOS of   VOS_UNKNOWN : TargetOS
:= Concat(TargetOS, 'Desconhecido');   VOS_DOS : TargetOS :=
Concat(TargetOS, 'MS-DOS');   VOS_OS216 : TargetOS := Concat(TargetOS,
'16-bit OS/2');   VOS_OS232 : TargetOS := Concat(TargetOS, '32-bit OS/2');
VOS_NT : TargetOS := Concat(TargetOS, 'Windows NT');   VOS_NT_WINDOWS32, 4:
TargetOS := Concat(TargetOS, 'Win32 API');   VOS_DOS_WINDOWS16: TargetOS :=
Concat(TargetOS, '16-bit Windows ','sob MS-DOS');   else   TargetOS :=
Concat(TargetOS, 'Fora do Padrão. Código: ', IntToStr(dwFileOS));   end;
FileInfo.Add(TargetOS);   TypeArq := 'Tipo de Arquivo: ';   case dwFileType
of   VFT_UNKNOWN : TypeArq := Concat(TypeArq,'Desconhecido');   VFT_APP :
TypeArq := Concat(TypeArq,'Aplicacao');   VFT_DLL : TypeArq :=
Concat(TypeArq,'Dynamic-Link Lib.');   VFT_DRV : begin   TypeArq :=
Concat(TypeArq,'Device driver - Driver ');   case dwFileSubtype of
VFT2_UNKNOWN : TypeArq := Concat(TypeArq,'Desconhecido');   VFT2_DRV_PRINTER
: TypeArq := Concat(TypeArq,'de Impressao');   VFT2_DRV_KEYBOARD : TypeArq
:= Concat(TypeArq,'de Teclado');   VFT2_DRV_LANGUAGE : TypeArq :=
Concat(TypeArq,'de Idioma');   VFT2_DRV_DISPLAY : TypeArq :=
Concat(TypeArq,'de Vídeo');   VFT2_DRV_MOUSE : TypeArq := Concat(TypeArq,'de
Mouse');   VFT2_DRV_NETWORK : TypeArq := Concat(TypeArq,'de Rede');
VFT2_DRV_SYSTEM : TypeArq := Concat(TypeArq,'de Sistema');
VFT2_DRV_INSTALLABLE : TypeArq := Concat(TypeArq,'Instalavel');
VFT2_DRV_SOUND : TypeArq := Concat(TypeArq,'Multimida');   end;   end;
VFT_FONT : begin   TypeArq := Concat(TypeArq,'Fonte - Fonte ');   case
dwFileSubtype
of   VFT2_UNKNOWN : TypeArq := Concat(TypeArq, 'Desconhecida');
VFT2_FONT_RASTER : TypeArq := Concat(TypeArq,'Raster');   VFT2_FONT_VECTOR :
TypeArq := Concat(TypeArq,'Vetorial');   VFT2_FONT_TRUETYPE : TypeArq :=
Concat(TypeArq,'TrueType');   end;   end;   VFT_VXD : TypeArq :=
Concat(TypeArq,'Virtual Device');   VFT_STATIC_LIB: TypeArq :=
Concat(TypeArq,'Static-Link Lib.');   end;   FileInfo.Add(TypeArq);   end;
end;   end;   finally   FreeMem(Buffer, Succ(BufferSize));   Result :=
FileInfo.Text <> '';   end;   end; end;

Em 22/02/08, Carlos <[EMAIL PROTECTED]> escreveu:
>
>   Ta... entendo
>
> Mas como faço isso? Alguem tem algum exemplo prático?
>
> obrigado
>
> Consultores Software <[EMAIL PROTECTED]<consultoressoftware%40gmail.com>>
> escreveu:
> Pelo menos nas empresas onde trabalhei, essa solução de manter um só exe
> no
> servidor funciona muito bem. O único problema é fazer com que os usuários
> (
> cerca de 50, em média) fechem o aplicativo no momento da atualização, o
> que
> pode ser contornado se as atualizações puderem ser feitas em horários em
> que
> o sistema não é utilizado.
>
> Agora, se não tiver jeito mesmo, melhor comparar as versões dos arquivos
> exe
> ( servidor e local ) e fazer a cópia, caso necessário.
>
> Em 22/02/08, Guionardo Furlan <[EMAIL PROTECTED] <guionardo%40gmail.com>>
> escreveu:
> >
> > Será mesmo uma boa idéia? Discordo.
> >
> > Eu deixaria uma versão do executável no servidor, com um arquivo texto
> > indicando a versão.
> > Nos clientes, um aplicativo inicializador compararia a versão do
> > executável local com a versão do executável remoto. Em caso de
> > diferença, copiará do servidor.
> > Por último, o aplicativo inicializador chama o executável localmente.
> >
> > Em 22/02/08, Consultores Software <[EMAIL 
> > PROTECTED]<consultoressoftware%40gmail.com>
> <consultoressoftware%40gmail.com>>
> > escreveu:
> > >
> > > Antes de pensar num atualizador, não seria mais fácil deixar um
> > executável
> > > só no servidor e mapear para que cada usuário tenha acesso a ele via
> > rede,
> > > do que distribuir várias cópias ? Assim, você teria que atualizar uma
> > vez
> > > só. Um ponto crítico aí é que, para atualizar esse aplicativo, todos
> os
> > > usuários terão que sair dele em suas máquinas, a menos que o servidor
> > seja
> > > linux, que permite sobrescrever o exe mesmo que ele esteja em uso .
> > >
> > > Em 22/02/08, Carlos <[EMAIL PROTECTED]<ca_programador007%40yahoo.com.br>
> <ca_programador007%40yahoo.com.br>>
> > escreveu:
> > > >
> > > > Olá amigos,
> > > >
> > > > Tenho um aplicativo onde o banco de dados fica no servidor e cada
> > maquina
> > > > tem um executavel .exe para acessar o banco de dados.
> > > > Muitas vezes eu preciso atualizar o .exe e preciso ir de máquina em
> > > > máquina para atualizar o arquivo, e isso é muito chato porque são
> > várias
> > > > máquinas.
> > > > Eu sei que existe uma forma fácil de resolver isso, utilizando um
> > > > atualizador automático que fica direto no servidor e todos os
> usuarios
> > > > quando executam o executavel busca a atualizacao no servidor.
> > > > Gostaria de saber como faz isso. Alguem me ajuda a começar? Nem sei
> > por
> > > > onde começar.
> > > >
> > > > Obrigado e aguardo ajuda.
> > > > Carlos
> > > >
> >
> > --
> > Timeo hominem unius libri
> > Cogito ergo sum - Carpe diem
> >
> > []s
> > Guionardo Furlan
> > http://guionardo.blogspot.com
> >
> >
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> ---------------------------------
> Abra sua conta no Yahoo! Mail, o único sem limite de espaço para
> armazenamento!
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>


[As partes desta mensagem que não continham texto foram removidas]

Responder a