使用Delphi在windows下获取版本号以及对比版本号

来源:互联网 发布:网络交换方式的区别 编辑:程序博客网 时间:2024/05/06 22:28
// 获取版本号function GetFileVersion(FileName: string): string;typePVerInfo = ^TVS_FIXEDFILEINFO;TVS_FIXEDFILEINFO = recorddwSignature: longint;dwStrucVersion: longint;dwFileVersionMS: longint;dwFileVersionLS: longint;dwFileFlagsMask: longint;dwFileFlags: longint;dwFileOS: longint;dwFileType: longint;dwFileSubtype: longint;dwFileDateMS: longint;dwFileDateLS: longint; end;varExeNames: array[0..255] of char;zKeyPath: array[0..255] of Char;VerInfo: PVerInfo;Buf: pointer;Sz: word;L, Len: Cardinal;beginStrPCopy(ExeNames, FileName);Sz := GetFileVersionInfoSize(ExeNames, L); if Sz = 0 then beginResult := '';Exit; end; tryGetMem(Buf, Sz); tryGetFileVersionInfo(ExeNames, 0, Sz, Buf); if VerQueryValue(Buf, '\', Pointer(VerInfo), Len) then beginResult := IntToStr(HIWORD(VerInfo.dwFileVersionMS)) + '.' +IntToStr(LOWORD(VerInfo.dwFileVersionMS)) + '.' +IntToStr(HIWORD(VerInfo.dwFileVersionLS)) + '.' +IntToStr(LOWORD(VerInfo.dwFileVersionLS)); end; finallyFreeMem(Buf); end; exceptResult := '-1'; end;end;

// 版本号比较{返回版本差 版本号格式:1.0.0.1}function CompareVersion(VersionA, VersionB: string): string;varlistA : TStringList;listB : TStringList;i : Integer;strCompare : string;beginResult := ''; // 创建listA := TStringList.Create();listB := TStringList.Create(); // 获取列表ExtractStrings(['.'], [' '], PChar(VersionA), listA);ExtractStrings(['.'], [' '], PChar(VersionB), listB); if listA.Count <> listB.Count thenExit; // 比较 for i := 0 to listA.Count - 2 do beginstrCompare := strCompare + IntToStr(StrToInt(listA[i]) - StrToInt(listB[i])) + '.'; end;i := listA.Count - 1; if i < 0 thenExit;strCompare := strCompare + IntToStr(StrToInt(listA[i]) - StrToInt(listB[i])); // 释放 if Assigned(listA) thenFreeAndNil(listA); if Assigned(listB) thenFreeAndNil(listB);Result := strCompare;end;

// 版本号转换为整数(和计算方式)function VersionSumToInt(Version: string): Integer;varlist : TStringList;i : Integer;nSum : Integer;beginResult := -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 thenExit;nSum := nSum + StrToInt(list[i]); end; if Assigned(list) thenFreeAndNil(list);Result := nSum;end;

0 0