오늘은 exe파일이나 dll, ocx 등의 파일 버젼을 읽을 필요가 있게 됩니다.


그때 읽는 함수를 알려드리겠습니다. 현재 제가 사용하고 있는 소스입니다.



* 소스코드


// CString parm_path : 파일경로

// CString parm_filename : 파일명.확장자

CString Util::GetAppVersion( CString parm_path, CString parm_filename )


        DWORD dwHandle, dwLen; 

        UINT BufLen; 

        LPTSTR lpData; 

        VS_FIXEDFILEINFO *pFileInfo; 

        CString pgm_path, ret_version;


pgm_path.Format("%s\\%s", parm_path, parm_filename);

        dwLen = GetFileVersionInfoSize( (char *)(const char *)pgm_path, &dwHandle ); 

        if (!dwLen)   return ""; 

         

        lpData = (LPTSTR) malloc (dwLen); 

        if (!lpData)   return ""; 

        if( !GetFileVersionInfo( (char *)(const char *)pgm_path, dwHandle, dwLen, lpData ) ) {   

                free (lpData); 

                return ""; 

        } 

         

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

ret_version.Format("%d.%d.%d.%d", 

HIWORD(pFileInfo->dwFileVersionMS), LOWORD(pFileInfo->dwFileVersionMS), HIWORD(pFileInfo->dwFileVersionLS), LOWORD(pFileInfo->dwFileVersionLS)

);

                //*MajorVersion = HIWORD(pFileInfo->dwFileVersionMS); 

                //*MinorVersion = LOWORD(pFileInfo->dwFileVersionMS); 

                //*BuildNumber = HIWORD(pFileInfo->dwFileVersionLS); 

                //*RevisionNumber = LOWORD(pFileInfo->dwFileVersionLS); 

                free (lpData); 

                return ret_version; 

        } 

         

        free (lpData); 

m_debug_str.Format("[GetAppVersion] %s %s %s", parm_path, parm_filename, ret_version); AddLog(m_debug_str);


        return ret_version; 


* 사용법

CString ver = GetAppVersion("c:\\폴더", "aaa.exe")'


GetAppVersion 함수는 고정적으로 넣어놓고, 호출만 하면 해당 파일의 버젼이 읽히게 됩니다.

참 쉽죠~~









+ Recent posts