정리

[Win32 API] File Version

저장소/VC++
DLL 또는 EXE의 File Version을 확인하는데는 3가지 API를 사용합니다.

1. DWORD GetFileVersionInfoSize(LPCTSTR lptstrFileName, LPDWORD lpdwHandle)
2. BOOL GetFileVersionInfo(LPCTSTR lptstrFileName, DWORD dwHandle, DWORD dwLen, LPVOID lpData)
3. BOOL VerQueryValue(LPCVOID pBlock, LPCTSTR lpSubBlock, LPVOID* lplpBuffer, PUINT puLen)

그리고 VS_FIXEDFILEINFO 구조체가 필요하군요.

struct VS_FIXEDFILEINFO {
DWORD dwSignature,
DWORD dwStructVersion,
DWORD dwFileVersionMS,
DWORD dwFileVersionLS,
DWORD dwProductVersionMS,
DWORD dwProductVersionLS,
DWORD dwFileFlagMask,
DWORD dwFileFlags,
DWORD dwFileOS,
DWORD dwFileType,
DWORD dwFileSubType,
DWORD dwFileDateMS,
DWORD dwFileDateLS
};

MSDN을 살펴보면 참 복잡합니다. 몇년을 봐도 복잡하네요. 영어가 싫을 뿐입니다.

예제로 살펴봅니다.

#include <Windows.h>
#include <WinVer.h>

#pragma comment(lib, "version.lib")

int _tmain(int argc, _TCHAR* argv[])
{
TCHAR* pszDestFilePath = _T("d:\\test.exe");

DWORD dwHandle = 0;
DWORD dwSize = 0;

dwSize = ::GetFileVersionInfoSize(pszDestFilePath, &dwHandle);
if(0 == dwSize)
return 1;

BYTE* pBlockData = new BYTE[dwSize];
ZeroMemory(pBlockData, dwSize);

if(FALSE == ::GetFileVersionInfo(pszDestFilePath, dwHandle, dwSize, pBlockData))
{
delete [] pBlockData;

return 1;
}

VS_FIXEDFILEINFO* pVerInfo = NULL;
UINT uLen = 0;

if(FALSE == ::VerQueryValue(pBlockData, _T("\\"), (LPVOID*)&pVerInfo, &uLen))
{
delete [] pBlockData;

return 1;
}

_tprintf_s(_T("Major Version : %d\n"), HIWORD(pVerInfo->dwFileVersionMS));
_tprintf_s(_T("Minor Version : %d\n"), LOWORD(pVerInfo->dwFileVersionMS));
_tprintf_s(_T("Release Version : %d\n"), HIWORD(pVerInfo->dwFileVersionLS));
_tprintf_s(_T("Test Version : %d\n"), LOWORD(pVerInfo->dwFileVersionLS));

delete [] pBlockData;

return 0;
}

아~ 잘 돌아가는군요. 이렇게 확인하면 되겠습니다.
더 붙이거나 뺄 것은 없는 것 같네요.
보다 자세한 사항은 MSDN을 보도록 합니다.

'저장소 > VC++' 카테고리의 다른 글

[Win32 API] Registry Element Size Limits  (0) 2010.12.16
[Win32 API] RegEnumKeyEx  (0) 2010.12.16
[Win32 API] System Information Functions  (0) 2010.07.16
[Win32 API] Verifying the System Version  (0) 2010.07.16
[Win32 API] Windows OS Version  (0) 2010.07.16