Colunista ainda sem descrição. Caro colunista, por favor envie-nos sua descrição.
//Retorna o build de um arquivo function GetBuildInfo(prog: String): String; var VerInfoSize: DWORD; VerInfo: Pointer; VerValueSize: DWORD; VerValue: PVSFixedFileInfo; Dummy: DWORD; V1, V2, V3, V4: Word; begin VerInfoSize := GetFileVersionInfoSize(PChar(prog),Dummy); GetMem(VerInfo,VerInfoSize); GetFileVersionInfo(PChar(prog),0,VerInfoSize,VerInfo); VerQueryValue(VerInfo,'',Pointer(VerValue),VerValueSize); with VerValue^ do begin V1 := dwFileVersionMS shr 16; V2 := dwFileVersionMS and $FFFF; V3 := dwFileVersionLS shr 16; V4 := dwFileVersionLS and $FFFF; end; FreeMem(VerInfo,VerInfoSize); result := Copy(IntToStr(100 + v1),3,2) + '.' + Copy(IntToStr(100 + V2),3,2) + '.' + Copy(IntToStr(100 + V3),3,2) + '.' + Copy(IntToStr(100 + V4),3,2); end;
//Retorna o tamanho de um arquivo em bytes function DSiFileSize(const fileName: string): int64; var fHandle: DWORD; begin fHandle := CreateFile(PChar(fileName), 0, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if fHandle = INVALID_HANDLE_VALUE then Result := -1 else try Int64Rec(Result).Lo := GetFileSize(fHandle, @Int64Rec(Result).Hi); finally CloseHandle(fHandle); end; end;
procedure Atualiza_Versao_Aplicacao; var versao_local, versao_servidor : string; tamanho_original, tamanho_recebido : integer; local_arquivo_servidor : string; iArq : Tinifile; begin //Verifico onde esta armazenado o arquivo a ser atualizado if FileExists(GetCurrentDir + '\CONFIG.INI') then begin try iArq := TInifile.Create(GetCurrentDir + '\CONFIG.INI'); local_arquivo_servidor := iArq.ReadString('UPDATE','LOCAL','\\SERVIDOR\PASTA\ARQUIVO.EXE'); finally iArq.Free; end; end; //Armazeno a versão da aplicação atualmente em uso versao_local := GetBuildInfo(GetCurrentDir + '\ARQUIVO.EXE'); //Armazeno a versão do aplicação que esta disponivel no servidor versao_servidor := GetBuildInfo(local_arquivo_servidor); //Comparo as versões if versao_local <> versao_servidor then begin //Guardo na váriavel o tamanho do arquivo que esta no servidor tamanho_original := DSiFileSize(local_arquivo_servidor); //Copio a versão que esta no servidor para o computador atual CopyFile(PChar(local_arquivo_servidor),PChar(GetCurrentDir+'\ARQUIVO.NEW'),False); //Guardo na váriavel o tamanho do arquivo copiado tamanho_recebido := DSiFileSize(GetCurrentDir+'\ARQUIVO.NEW'); //Verifico se o arquivo copiado chegou intacto if tamanho_original = tamanho_recebido then begin //Apago se existir versão antiga DeleteFile(ARQUIVO.OLD'); //Renomeio o arquivo atual RenameFile(ARQUIVO.EXE', ARQUIVO.OLD'); //Renomeio o arquivo novo para poder usa-lo RenameFile(ARQUIVO.NEW', ARQUIVO.EXE'); //Informo que a aplicação foi atualizado com sucesso ShowMessage('Aplicação atualizada com sucesso!'); //Mando abrir a nova versão do teclado ShellExecute(0,Nil,PChar(GetCurrentDir+'\ARQUIVO.EXE'),'', Nil, SW_SHOWNORMAL); //Fecho a aberta Close; end else begin //Caso o arquivo copiado não seja copiado com sucesso ShowMessage('Copia de arquivo falhou! Tente novamente!'); end; end else begin //Se a aplicação já estiver atualizada ShowMessage(Aplicativo já possui a ultima atualização disponível!'); end; end;
Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009