Win32 , C++

특정 EXE/DLL 파일의 버전 읽기

김모작자 2006. 8. 4. 19:16
파일 버전 읽기

// 버전 체크

// 함수1 : 자기 자신의 버전을 읽어서 ptr 에 복사한다. ptr ~ ptr+7 사용

BOOL GetMyVersion(LPBYTE ptr)
{
       CString filename;
       filename = __argv[0];         // 자기 자신의 파일 이름 읽기
       VS_FIXEDFILEINFO        *fileinfo=NULL, easy;        // 쿼리 함수에서 할당해 준다.. 포인터의 포인터를 넘긴다!!
       DWORD dwHandle, dwVersionInfoSize        = GetFileVersionInfoSize(filename, &dwHandle);
                                                                               // 전체 버전 정보 받을라꼬!
       _ASSERTE(dwVersionInfoSize != 0);
       if(dwVersionInfoSize == 0)
               return FALSE;
       
       LPBYTE lpBuffer = new BYTE [dwVersionInfoSize];
       BOOL bStatus = GetFileVersionInfo(filename, /* Ignored */dwHandle, dwVersionInfoSize, lpBuffer);
       if(!bStatus)                                                // 데이터 받아오고...
       {
               delete lpBuffer;
               return FALSE;
       }

       UINT uLength;                        
       bStatus = VerQueryValue(lpBuffer, TEXT("\"), (LPVOID*)&fileinfo, &uLength);
       if(bStatus)
       {
               TRACE("%d %d %xn", /* major */HIWORD(fileinfo->dwFileVersionMS), /* MINOR */ LOWORD(fileinfo->dwFileVersionMS), fileinfo->dwFileVersionLS);
               memcpy(ptr, &fileinfo->dwFileVersionMS, sizeof(DWORD));
               memcpy(ptr + sizeof(DWORD) , &fileinfo->dwFileVersionLS, sizeof(DWORD));
               delete lpBuffer;
               return TRUE;
       }
       delete lpBuffer;
       return FALSE;
}



ex)
BOOL bStatus = GetMyVersion(tmpBuffer + 50);