일반적으로 EXE 실행 프로그램에는 파일 버전이 있습니다.
프로그램 개발자들은 파일 버전으로 유지보수를 하거나, 업데이트 작업을 할 수 있습니다.
우선 간단하게 파일 버전을 확인하는 방법을 알아보겠습니다
보통 C:\Program Files (x86)\Kakao\KakaoTalk 경로에 카카오톡 실행 파일이 있습니다.
해당 파일을 우클릭하여 속성 -> 자세히를 보시면 파일 버전이 적혀있습니다.
이제 코드를 작성하여 파일 버전을 읽어봅시다.
필요 헤더 파일은 아래와 같습니다.
#include <winver.h>
함수 원형은 아래와 같습니다.
// 성공시 FALSE이 아닌 값, 실패 시 FALSE 리턴
BOOL GetFileVersionInfo(
LPCSTR lptstrFilename, // 파일 전체 경로
DWORD dwHandle, // 무시되는 매개변수
DWORD dwLen, // lpData의 버퍼 크기
LPVOID lpData // 파일 정보를 받는 버퍼 포인터, 이후 VerQueryValue 함수를 사용합니다.
);
lpData를 통해 파일 정보를 받게 되면, VerQueryValue 함수를 사용해야 합니다.
전체 코드는 아래와 같습니다.
#include <atlstr.h>
#include <Windows.h>
#pragma comment(lib,"version.lib")
void main(void)
{
// 버전 확인할 파일 경로(전체 경로)
CString strFilePath = _T( "C:\\Program Files (x86)\\Kakao\\KakaoTalk\\KakaoTalk.exe" );
// 파일 정보 저장 버퍼
TCHAR atcBuffer[MAX_PATH] = { 0, };
if ( FALSE != GetFileVersionInfo( strFilePath, 0, MAX_PATH, atcBuffer ) )
{
VS_FIXEDFILEINFO* pFineInfo = NULL;
UINT bufLen = 0;
// VS_FIXEDFILEINFO 정보 가져오기
if ( FALSE != VerQueryValue( atcBuffer, _T("\\"), (LPVOID*)&pFineInfo, &bufLen ))
{
WORD majorVer, minorVer, buildNum, revisionNum;
majorVer = HIWORD( pFineInfo->dwFileVersionMS );
minorVer = LOWORD( pFineInfo->dwFileVersionMS );
buildNum = HIWORD( pFineInfo->dwFileVersionLS );
revisionNum = LOWORD( pFineInfo->dwFileVersionLS );
// 파일버전 출력
printf( "version : %d,%d,%d,%d\n", majorVer, minorVer, buildNum, revisionNum );
}
}
return;
}
실행 결과는 아래와 같습니다.
위의 카카오톡 파일 버전과 동일한 값이 출력되는 것을 볼 수 있습니다.