2010년 11월 25일 목요일

File version resource

/// 버전 리소스 사이즈 얻기

DWORD dwHandle = 0;

DWORD dwSize = ::GetFileVersionInfoSize(szFilePath, &dwHandle);

 

/// 버전 리소스 정보 얻기

LPBYTE lpBuffer = new BYTE[dwSize];

::ZeroMemoty(lpBuffer, dwSize);

::GetFileVersionInfo(szFilePath, 0, dwSize, lpBuffer);

 

/// 리소스 핸들 얻기

HANDLE hResource = ::BeginUpdateResource(szFilePath, FALSE);

 

/// 리소스 정보 갱신

::UpdateResource(hResource, RT_VERSION, MAKEINTRESOURCE(VS_VERSION_INFO), wTanslationL/*LCID*/, lpBuffer, dwSize);

 

::EndUpdateResource(hResource, FALSE);

 

/// 버전 스트링 정보 읽기

::VerQueryValue(lpVSVersionInfo, szPath, &lpInfo/*out*/, &dwInfoLen/*out*/)

CString strData = (TCHAR*)lpInfo;

 

/// Translate code 구성

LCID, Code Page

lcid 와 code page 를 이용해 스트링 정보의 주소를 추출한다.

 

정보를 읽을때는 API 를 이용하여 읽기가 가능하지만 버전 정보의 추가 삭제 변경을 위해서는

데이터의 앞에 자신이 가진 Value의 길이 값이 들어가기 때문에 버퍼 클래스가 필요하다.

 

버퍼클래스는 아래의 코드에서 vs_version.h 부분 을 참고 하면 된다.

http://www.codeproject.com/KB/install/VerPatch.aspx 

댓글 없음:

댓글 쓰기