GetFileVersionInfo Function
GetFileVersionInfo Function

Retrieves version information for the specified file.

Syntax

BOOL GetFileVersionInfo(      
    LPCTSTR lptstrFilename,     DWORD dwHandle,     DWORD dwLen,     LPVOID lpData );

Parameters

lptstrFilename
[in] Pointer to a null-terminated string that specifies the name of the file of interest. If a full path is not specified, the function uses the search sequence specified by the LoadLibrary function.

Windows 95/98/Me: The short path form of the specified file name must be less than 126 characters.

dwHandle
This parameter is ignored.
dwLen
[in] Specifies the size, in bytes, of the buffer pointed to by the lpData parameter.

Call the GetFileVersionInfoSize function first to determine the size, in bytes, of a file's version information. The dwLen member should be equal to or greater than that value.

If the buffer pointed to by lpData is not large enough, the function truncates the file's version information to the size of the buffer.

lpData
[out] Pointer to a buffer that receives the file-version information.

You can use this value in a subsequent call to the VerQueryValue function to retrieve data from the buffer.

Return Value

If the function succeeds, the return value is nonzero.

If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

Windows Vista: File version info has fixed and non-fixed part. The fixed part contains information like version number. The non-fixed part contains things like strings. In the past GetFileVersionInfo was taking version information from the binary (exe/dll). Currently, it is querying fixed version from language neutral file (exe/dll) and the non-fixed part from mui file, merges them and returns to the user. If the given binary does not have a mui file then behavior is as in previous version.

Windows NT 3.51 and earlier: The version information functions do not work with 16-bit Windows file images.

Windows 95/98/Me: GetFileVersionInfoW is supported by the Microsoft Layer for Unicode. To use this version, you must add certain files to your application, as outlined in Microsoft Layer for Unicode on Windows 95/98/Me Systems.

Windows 95/98/Me, Windows NT 4.0 and Windows 2000: These functions work on both 16- and 32-bit file images.

Windows XP: These functions work on 16-, 32-, and 64-bit file images.

Call the GetFileVersionInfoSize function before calling the GetFileVersionInfo function. To retrieve information from the file-version information buffer, use the VerQueryValue function.

Function Information

Minimum DLL Versionversion.dll
HeaderDeclared in Winver.h, include Windows.h
Import libraryVersion.lib
Minimum operating systems Windows 95, Windows NT 3.1
UnicodeImplemented as ANSI and Unicode versions.

See Also

Community Content

Sample function to return version info for an app or dll
Added by:Karel Zikmund

Here is a sample function to return version info for an app or dll. Adapated from code found at:

http://gnuwin32.sourceforge.net/version.c.txt

BOOL GetAppVersion( char *LibName, WORD *MajorVersion, WORD *MinorVersion, WORD *BuildNumber, WORD *RevisionNumber )
{
DWORD dwHandle, dwLen;
UINT BufLen;
LPTSTR lpData;
VS_FIXEDFILEINFO *pFileInfo;
dwLen = GetFileVersionInfoSize( LibName, &dwHandle );
if (!dwLen)
return FALSE;

lpData = (LPTSTR) malloc (dwLen);
if (!lpData)
return FALSE;

if( !GetFileVersionInfo( LibName, dwHandle, dwLen, lpData ) )
{
free (lpData);
return FALSE;
}
if( VerQueryValue( lpData, "\\", (LPVOID *) &pFileInfo, (PUINT)&BufLen ) )
{
*MajorVersion = HIWORD(pFileInfo->dwFileVersionMS);
*MinorVersion = LOWORD(pFileInfo->dwFileVersionMS);
*BuildNumber = HIWORD(pFileInfo->dwFileVersionLS);
*RevisionNumber = LOWORD(pFileInfo->dwFileVersionLS);
free (lpData);
return TRUE;
}
free (lpData);
return FALSE;
}

sample function to return version info for an app or dll (compile bug)
Added by:Topochicho

The LPVOID cast in VerQueryValue call needs to be a LPVOID * cast instead.

if( VerQueryValue( lpData, "\\", (LPVOID *) &pFileInfo, (PUINT)&BufLen ) )

not always correct value returned
Added by:Thomas Lee
on some files GetFileVersionInfo does not return 0. Pointer is filled with data, but the next call to VerQueryValue leads to application crash.
To avoid this situation always call GetLastError after GetFileVersionInfo ( even if it succeeded )

© 2009 Microsoft Corporation. All rights reserved.   Terms of Use | Trademarks | Privacy Statement
Page view tracker
Rate the Lightweight library
x
Lightweight builds on ScriptFree (loband) by adding features you've requested: a SearchBox and default code language selection.
Do you like the SearchBox?
Do you like the tabbed code blocks?
How useful is this topic?
Tell us more.
Thanks
x
You're helping to improve MSDN Online.
Feedback
Switch View
Classic
Lightweight Beta
ScriptFree
Switch View