function GetVersion(FileName:string):string; //获得文件版本号 var InfoSize, Wnd: DWORD; VerBuf: Pointer; szName: array[0..255] of Char; Value: Pointer; Len: UINT; TransString:string; begin Result := ''; InfoSize := GetFileVersionInfoSize(PChar(FileName),Wnd); if InfoSize<>0 then begin GetMem(VerBuf,InfoSize); try if GetFileVersionInfo(PChar(FileName),Wnd,InfoSize,VerBuf) then begin Value:=nil; VerQueryValue(VerBuf,'\VarFileInfo\Translation',Value,Len); if Value<>nil then TransString:=IntToHex(MakeLong(HiWord(Longint(Value^)),LoWord(Longint(Value^))),8); Result:=''; // StrPCopy(szName,'\StringFileInfo\'+Transstring+'\ProductVersion'); StrPCopy(szName,'\StringFileInfo\'+Transstring+'\FileVersion'); if VerQueryValue(VerBuf,szName,Value,Len) then Result:=StrPas(PChar(Value)); end; finally FreeMem(VerBuf); end; end; end; 这样获得版本号,然后比较大小,如果两个版本分别是:1.0.0.10和1.0.0.2,比较之后,后者版本号大。怎么办呢?是不是要把版本号分开一个一个比较?
不能比较字符串 直接比较版本信息,是个DWORD值
function GetVersion(FileName:string):string; //获得文件版本号 版本号是string类型的,怎么比较版本信息?
var
InfoSize, Wnd: DWORD;
VerBuf: Pointer;
szName: array[0..255] of Char;
Value: Pointer;
Len: UINT;
TransString:string;
begin
Result := '';
InfoSize := GetFileVersionInfoSize(PChar(FileName),Wnd);
if InfoSize<>0 then
begin
GetMem(VerBuf,InfoSize);
try
if GetFileVersionInfo(PChar(FileName),Wnd,InfoSize,VerBuf) then
begin
Value:=nil;
VerQueryValue(VerBuf,'\VarFileInfo\Translation',Value,Len);
if Value<>nil then
TransString:=IntToHex(MakeLong(HiWord(Longint(Value^)),LoWord(Longint(Value^))),8); Result:='';
// StrPCopy(szName,'\StringFileInfo\'+Transstring+'\ProductVersion');
StrPCopy(szName,'\StringFileInfo\'+Transstring+'\FileVersion');
if VerQueryValue(VerBuf,szName,Value,Len) then
Result:=StrPas(PChar(Value));
end;
finally
FreeMem(VerBuf);
end;
end;
end;
这样获得版本号,然后比较大小,如果两个版本分别是:1.0.0.10和1.0.0.2,比较之后,后者版本号大。怎么办呢?是不是要把版本号分开一个一个比较?
直接比较版本信息,是个DWORD值
版本号是string类型的,怎么比较版本信息?