Ver Mensaje Individual
  #6  
Antiguo 20-01-2010
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Reputación: 27
delphi.com.ar Va por buen camino
Ok!.. fíjate que internamente la función VersionExe utiliza la winapi GetFileVersionInfo a la cual hice referencia. También terminas obteniendo un registro del tipo TVSFixedFileInfo con dos valores que luego descompones en cuatro. Yo lo que digo es utilizar esos dos valores sin pasarlos a string, es algo mucho mas óptimo ya que se trata de únicamente dos evaluaciones aritméticas por cada comparación.

Hice esto, está sin probar:

Código Delphi [-]
function GetFileInfo(AFileName: PChar): TVSFixedFileInfo;
var
  dwSize, dwSize2: DWORD;
  lpData, lpData2: Pointer;
begin
  ZeroMemory(@Result, SizeOf(TVSFixedFileInfo));
  if FileExists(AFileName) then
  begin
    dwSize := GetFileVersionInfoSize(AFileName, dwSize2);
    if dwSize > 0 then
    begin
      GetMem(lpData, dwSize);
      try
        GetFileVersionInfo(AFileName, 0, dwSize, lpData);
        VerQueryValue(lpData, '\', lpData2, dwSize2);
        Move(lpData2^, Result, dwSize2);
      finally
        FreeMem(lpData);
      end;
    end;
  end;
end;


function GetFileVersion(AFileName: string): string;
begin
  with GetFileInfo(PChar(AFileName)) do
    Result:= Format('%d.%d.%d.%d', [HiWord(dwFileVersionMS),
                                    LoWord(dwFileVersionMS),
                                    HiWord(dwFileVersionLS),
                                    LoWord(dwFileVersionLS)] );
end;

function CompareFileVersions(AFileName1, AFileName2: string): Integer;
var
  FileInfo1, FileInfo2: TVSFixedFileInfo;
begin
  FileInfo1 := GetFileInfo(PChar(AFileName1));
  FileInfo2 := GetFileInfo(PChar(AFileName2));

  Result := CompareValue(FileInfo1.dwFileVersionMS, FileInfo2.dwFileVersionMS);

  if Result = 0 then
    Result := CompareValue(FileInfo1.dwFileVersionLS, FileInfo2.dwFileVersionLS);
end;

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.

Última edición por delphi.com.ar fecha: 20-01-2010 a las 19:41:31. Razón: Correciones en la redacción
Responder Con Cita