Q&A

  • 실행파일의 버전정보를 알고 싶을때는?
실행파일을 만들때 project- option 에 있는



version info 에 버전을 포함해서 만들었습니다.



이 만들어진 파일의 버전을 읽어오려면 어떻게 해야 할 지



......

2  COMMENTS
  • Profile
    남기석 2000.11.03 10:08
    안녕하세요

    청개구리 남기석( http://www.delphitravel.com )입니다.



    아래 님께서 잘 설명해 주셨는데요...

    이건 제가 만들어서 사용하고 있는 펑션입니다.

    자기 자신 뿐만 아니라....

    모든 파일의 버전을 읽어 올 수 있습니다..



    사용해 보세요 편하실꺼예요...

    사용법은 간단합니다.



    자기 자신의 버전읽기..

    Label1.Caption := fncGetFileVersion( Application.FileName );



    다른 파일의 버전 읽기

    Label1.Caption := fncGetFileVersion( 'C:WindowsCalc.exe' );



    // 실행 파일의 Version을 Return한다.

    function TMyFunction.fncGetFileVersion( sFullName : string ) : string;

    var

    sVersion : string;

    PFileName : array [0..255] of Char;

    FFilename : string;

    Vinfo : PChar;

    Vitem : Pointer;

    VersionSize : Longint;

    VNHandle : DWord;

    Rc : Boolean;

    LenRes : DWord;

    Lang,Code : Word;

    Ne, L : Integer;

    Xlate : String;

    begin

    FFilename := sFullName;

    StrPCopy(PFileName,FFilename);

    Vitem := @PFileName;

    VersionSize := GetFileVersionInfoSize(VItem,VNHandle);

    if VersionSize <> 0 then

    begin

    GetMem(Vinfo,Word(VersionSize));

    RC := GetFileVersionInfo(PFileName,VNhandle,VersionSize,Vinfo);

    if Rc then

    begin

    VerQueryValue(Vinfo,StrPCopy(PFileName,'VarFileInfoTranslation'),Vitem,LenRes);

    Lang := $409;

    Code := 0;

    if Rc then

    begin

    Ne := LenRes Div 4;

    For L := 1 to ne do

    begin

    Lang := LOWORD(LongInt(Vitem^));

    Code := HIWORD(LongInt(Vitem^));

    if Lang = $409 then break;

    end;

    end;

    Xlate := 'StringFileInfo' + IntToHex(Lang,4) +IntToHex(Code,4) + '';

    if VerQueryValue(Vinfo,StrPcopy(PFileName,Xlate+'FileVersion'),Vitem,LenRes) <> False then

    sVersion := StrPas(Vitem);

    FreeMem(Vinfo,VersionSize);

    end else

    begin

    FreeMem(Vinfo,VersionSize);

    sVersion := '0.0.0.0';

    end;

    end else

    begin

    sVersion := '0.0.0.0';

    end;



    Result := sVersion;

    end;



    행복하세요...



    =============================================================================

    초보자... wrote:

    > 실행파일을 만들때 project- option 에 있는

    >

    > version info 에 버전을 포함해서 만들었습니다.

    >

    > 이 만들어진 파일의 버전을 읽어오려면 어떻게 해야 할 지

    >

    > ......

  • Profile
    각시탈 2000.11.03 03:12
    초보자... wrote:

    > 실행파일을 만들때 project- option 에 있는

    >

    > version info 에 버전을 포함해서 만들었습니다.

    >

    > 이 만들어진 파일의 버전을 읽어오려면 어떻게 해야 할 지

    >

    > ......



    김영대님 홈에서 퍼옴..



    참고 하시길..

    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls;



    type

    TForm1 = class(TForm)

    Memo1: TMemo;

    Button1: TButton;

    OpenDialog1: TOpenDialog;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    const

    InfoNum = 10;

    InfoStr : array [1..InfoNum] of String =

    ('CompanyName', 'FileDescription', 'FileVersion', 'InternalName',

    'LegalCopyright', 'LegalTradeMarks', 'OriginalFilename',

    'ProductName', 'ProductVersion', 'Comments');



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    procedure TForm1.Button1Click(Sender: TObject);

    var

    n, Len, i : Integer;

    Buf : PChar;

    Value : PChar;

    begin

    if not OpenDialog1.Execute then

    System.Exit;



    Memo1.Clear;

    n := GetFileVersionInfoSize(PChar(OpenDialog1.FileName), n);

    if n > 0 then

    begin

    Buf := AllocMem(n);

    Memo1.Lines.Add('FileVersionInfoSize = ' + IntToStr(n));

    GetFileVersionInfo(PChar(OpenDialog1.FileName), 0, n, Buf);



    for i := 1 to InfoNum do

    if VerQueryValue(Buf, PChar('StringFileInfo