Ver Mensaje Individual
  #9  
Antiguo 13-10-2006
david duarte david duarte is offline
Miembro
 
Registrado: ago 2005
Posts: 217
Reputación: 19
david duarte Va por buen camino
Hola a todos!!!

tengo el siguiente problema, quiero checar las versiones del programa que estoy haciendo, ya tengo la funcion para verificar las versiones de los archivos (estos archivos estan en diferentes computadores) que es la siguiente:

Código Delphi [-]
function Tform1.VersionExe(const ruta: string) : string;
var
  Pt, Pt2: Pointer;
  Size, Size2: DWord;
begin
  Result := '';
  if not FileExists(ruta) then Exit;
  Size := GetFileVersionInfoSize(PChar(ruta), Size2);
  if (Size > 0) then begin
    GetMem(Pt, Size);
    try
      GetFileVersionInfo(PChar(ruta), 0, Size, Pt);
      VerQueryValue (Pt, '\', Pt2, Size2);
      with TVSFixedFileInfo (Pt2^) do begin
        Result :=
        IntToStr(HiWord(dwFileVersionMS))+'.'+
        IntToStr(LoWord(dwFileVersionMS))+'.'+
        IntToStr(HiWord(dwFileVersionLS))+'.'+
        IntToStr(LoWord(dwFileVersionLS));
      end;
    finally
      FreeMem(Pt);
    end;
  end;
end;

pero el problema es que siempre el Size 2 me da cero y por consiguiente nunca entra en los siguientes renglones y no me da nada en la version.

Alguien sabe porque???

Tengo otra funcion que sirve para lo mismo, pero solamente me compara los archivos locales, la funcion es la siguiente

Código Delphi [-]
GetVersion: string;
var
  VerInfoSize: DWORD;
  VerInfo: Pointer;
  VerValueSize: DWORD;
  VerValue: PVSFixedFileInfo;
  Dummy: DWORD;
begin
  Result := '';
  VerInfoSize := GetFileVersionInfoSize(PChar(ruta), Dummy);
  if VerInfoSize = 0 then Exit;
  GetMem(VerInfo, VerInfoSize);
  GetFileVersionInfo(PChar(ParamStr(0)), 0, VerInfoSize, VerInfo);
  VerQueryValue(VerInfo, '\', Pointer(VerValue), VerValueSize);
  with VerValue^ do
  begin
    Result := IntToStr(dwFileVersionMS shr 16);
    Result := Result + '.' + IntToStr(dwFileVersionMS and $FFFF);
    Result := Result + '.' + IntToStr(dwFileVersionLS shr 16);
    Result := Result + '.' + IntToStr(dwFileVersionLS and $FFFF);
  end;
  FreeMem(VerInfo, VerInfoSize);
end;

la verdad es que le busque y busque y no le encuentro.

Ya le hice cambios a la segunda, pero no se puede, me marcan errores.

Si alguien sabe en donde puedo encontrar la solución, se los agradeceria.

Gracias!!!!
Saludos!!!
Responder Con Cita