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!!!