lazarus读取版本信息(适用于windows/linux/macos)
从官网论坛看到的(https://wiki.freepascal.org/Show_Application_Title,_Version,_and_Company#FPC_3.0.2B)。
下面的方法适用FPC3.0以上版本:
下面的方法适用FPC3.0以上版本:
program printfileinfo; { Displays file version info for - Windows PE executables - Linux ELF executables (compiled by Lazarus) - macOS MACH-O executables (compiled by Lazarus) Runs on Windows, Linux, macOS } {$mode objfpc}{$H+} {$ifdef mswindows}{$apptype console}{$endif} uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Classes,sysutils // FPC 3.0 fileinfo reads exe resources as long as you register the appropriate units , fileinfo , winpeimagereader {need this for reading exe info} , elfreader {needed for reading ELF executables} , machoreader {needed for reading MACH-O executables} ; var FileVerInfo: TFileVersionInfo; {$R *.res} begin FileVerInfo:=TFileVersionInfo.Create(nil); try FileVerInfo.ReadFileInfo; writeln('Company: ',FileVerInfo.VersionStrings.Values['CompanyName']); writeln('File description: ',FileVerInfo.VersionStrings.Values['FileDescription']); writeln('File version: ',FileVerInfo.VersionStrings.Values['FileVersion']); writeln('Internal name: ',FileVerInfo.VersionStrings.Values['InternalName']); writeln('Legal copyright: ',FileVerInfo.VersionStrings.Values['LegalCopyright']); writeln('Original filename: ',FileVerInfo.VersionStrings.Values['OriginalFilename']); writeln('Product name: ',FileVerInfo.VersionStrings.Values['ProductName']); writeln('Product version: ',FileVerInfo.VersionStrings.Values['ProductVersion']); finally FileVerInfo.Free; end; end.
FPC3.0之前版本使用下面的方法读取版本信息
uses resource, versiontypes, versionresource; FUNCTION resourceVersionInfo: STRING; (* Unlike most of AboutText (below), this takes significant activity at run- *) (* time to extract version/release/build numbers from resource information *) (* appended to the binary. *) VAR Stream: TResourceStream; vr: TVersionResource; fi: TVersionFixedInfo; BEGIN RESULT:= ''; TRY (* This raises an exception if version info has not been incorporated into the *) (* binary (Lazarus Project -> Project Options -> Version Info -> Version *) (* numbering). *) Stream:= TResourceStream.CreateFromID(HINSTANCE, 1, PChar(RT_VERSION)); TRY vr:= TVersionResource.Create; TRY vr.SetCustomRawDataStream(Stream); fi:= vr.FixedInfo; RESULT := 'Version ' + IntToStr(fi.FileVersion[0]) + '.' + IntToStr(fi.FileVersion[1]) + ' release ' + IntToStr(fi.FileVersion[2]) + ' build ' + IntToStr(fi.FileVersion[3]) + eol; vr.SetCustomRawDataStream(nil) FINALLY vr.Free END FINALLY Stream.Free END EXCEPT END END { resourceVersionInfo } ;