Получение версии Exe и DLL файлов

function GetFileVersion(const sFilename: String; var nValue1, nValue2, nValue3, nValue4: Integer): String;
var
  pInfo, pPointer: Pointer;
  nSize: DWORD;
  nHandle: DWORD;
  pVerInfo: PVSFIXEDFILEINFO;
  nVerInfoSize: DWORD;
begin
  Result := '?.?.?.?';
  nValue1 := -1;
  nValue2 := -1;
  nValue3 := -1;
  nValue4 := -1;
  nSize := GetFileVersionInfoSize(PChar(sFilename), nHandle);
  if (nSize <> 0) then
  begin
    GetMem(pInfo, nSize);
    try
      FillChar(pInfo^, nSize, 0);
      if (GetFileVersionInfo(PChar(sFilename), nHandle, nSize, pInfo)) then
      begin
        nVerInfoSize := SizeOf(VS_FIXEDFILEINFO);
        GetMem(pVerInfo, nVerInfoSize);
      try
        FillChar(pVerInfo^, nVerInfoSize, 0);
        pPointer := Pointer(pVerInfo);
        VerQueryValue(pInfo, '\', pPointer, nVerInfoSize);
        nValue1 := PVSFIXEDFILEINFO(pPointer)^.dwFileVersionMS shr 16;
        nValue2 := PVSFIXEDFILEINFO(pPointer)^.dwFileVersionMS and $FFFF;
        nValue3 := PVSFIXEDFILEINFO(pPointer)^.dwFileVersionLS shr 16;
        nValue4 := PVSFIXEDFILEINFO(pPointer)^.dwFileVersionLS and $FFFF;
        Result := IntToStr(nValue1) + '.' + IntToStr(nValue2) + '.' + IntToStr(nValue3) + '.' + IntToStr(nValue4);
      finally
        FreeMem(pVerInfo, nVerInfoSize);
      end;
    end;
    finally
      FreeMem(pInfo, nSize);
    end;
  end;
end;

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *