// 获取版本号
function GetFileVersion(FileName: string): string;
type
PVerInfo = ^TVS_FIXEDFILEINFO;
TVS_FIXEDFILEINFO = record
dwSignature: longint;
dwStrucVersion: longint;
dwFileVersionMS: longint;
dwFileVersionLS: longint;
dwFileFlagsMask: longint;
dwFileFlags: longint;
dwFileOS: longint;
dwFileType: longint;
dwFileSubtype: longint;
dwFileDateMS: longint;
dwFileDateLS: longint;
end;
var
ExeNames: array[0..255] ofchar;
zKeyPath: array[0..255] of Char;
VerInfo: PVerInfo;
Buf: pointer;
Sz: word;
L, Len: Cardinal;
begin
StrPCopy(ExeNames, FileName);
Sz := GetFileVersionInfoSize(ExeNames, L);
if Sz = 0 then
begin
Result := '';
Exit;
end;
try
GetMem(Buf, Sz);
try
GetFileVersionInfo(ExeNames, 0, Sz, Buf);
if VerQueryValue(Buf, '\', Pointer(VerInfo), Len) then
begin
Result := IntToStr(HIWORD(VerInfo.dwFileVersionMS)) + '.' +
IntToStr(LOWORD(VerInfo.dwFileVersionMS)) + '.' +
IntToStr(HIWORD(VerInfo.dwFileVersionLS)) + '.' +
IntToStr(LOWORD(VerInfo.dwFileVersionLS));
end;
finally
FreeMem(Buf);
end;
except
Result := '-1';
end;
end;
// 获取版本号function GetFileVersion(FileName: string): string;type PVerInfo = ^TVS_FIXEDFILEINFO; TVS_FIXEDFILEINFO = record dwSignature: longint; dwStrucVersion: longint; dwFileVersionMS: longint; dwFileVersionLS: longint; dwFileFlagsMask: longint; dwFileFlags: longint; dwFileOS: longint; dwFileType: longint; dwFileSubtype: longint; dwFileDateMS: longint; dwFileDateLS: longint; end;var ExeNames: array[0..255] of char; zKeyPath: array[0..255] of Char; VerInfo: PVerInfo; Buf: pointer; Sz: word; L, Len: Cardinal;begin StrPCopy(ExeNames, FileName); Sz := GetFileVersionInfoSize(ExeNames, L); if Sz = 0 then begin Result := ''; Exit; end; try GetMem(Buf, Sz); try GetFileVersionInfo(ExeNames, 0, Sz, Buf); if VerQueryValue(Buf, '\', Pointer(VerInfo), Len) then begin Result := IntToStr(HIWORD(VerInfo.dwFileVersionMS)) + '.' + IntToStr(LOWORD(VerInfo.dwFileVersionMS)) + '.' + IntToStr(HIWORD(VerInfo.dwFileVersionLS)) + '.' + IntToStr(LOWORD(VerInfo.dwFileVersionLS)); end; finally FreeMem(Buf); end; except Result := '-1'; end;end;
以上获取版本号操作转自网上
view plaincopy to clipboardprint?
// 版本号比较{返回版本差 版本号格式:1.0.0.1}
function CompareVersion(VersionA, VersionB: string): string;
var
listA : TStringList;
listB : TStringList;
i : Integer;
strCompare : string;
begin
Result := '';
// 创建
listA := TStringList.Create();
listB := TStringList.Create();
// 获取列表
ExtractStrings(['.'], [' '], PChar(VersionA), listA);
ExtractStrings(['.'], [' '], PChar(VersionB), listB);
if listA.Count <> listB.Count then
Exit;
// 比较
for i := 0 to listA.Count - 2 do
begin
strCompare := strCompare + IntToStr(StrToInt(listA[i]) - StrToInt(listB[i])) + '.';
end;
i := listA.Count - 1;
if i < 0 then
Exit;
strCompare := strCompare + IntToStr(StrToInt(listA[i]) - StrToInt(listB[i]));
// 释放
if Assigned(listA) then
FreeAndNil(listA);
if Assigned(listB) then
FreeAndNil(listB);
Result := strCompare;
end;
// 版本号比较{返回版本差 版本号格式:1.0.0.1}function CompareVersion(VersionA, VersionB: string): string;var listA : TStringList; listB : TStringList; i : Integer; strCompare : string;begin Result := ''; // 创建 listA := TStringList.Create(); listB := TStringList.Create(); // 获取列表 ExtractStrings(['.'], [' '], PChar(VersionA), listA); ExtractStrings(['.'], [' '], PChar(VersionB), listB); if listA.Count <> listB.Count then Exit; // 比较 for i := 0 to listA.Count - 2 do begin strCompare := strCompare + IntToStr(StrToInt(listA[i]) - StrToInt(listB[i])) + '.'; end; i := listA.Count - 1; if i < 0 then Exit; strCompare := strCompare + IntToStr(StrToInt(listA[i]) - StrToInt(listB[i])); // 释放 if Assigned(listA) then FreeAndNil(listA); if Assigned(listB) then FreeAndNil(listB); Result := strCompare;end;
view plaincopy to clipboardprint?
// 版本号转换为整数(和计算方式)
function VersionSumToInt(Version: string): Integer;
var
list : TStringList;
i : Integer;
nSum : Integer;
begin
Result := -1;
nSum := 0;
list := TStringList.Create();
ExtractStrings(['.'], [' '], PChar(Version), list);
for i := 0 to list.Count - 1 do
begin
if StrToIntDef(list[i], -1) < 0 then
Exit;
nSum := nSum + StrToInt(list[i]);
end;
if Assigned(list) then
FreeAndNil(list);
Result := nSum;
end;