프로그램/C++

파일(exe,dll) 의 버젼 읽기

네오류이 2021. 1. 15. 09:25
728x90
반응형

오늘은 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 함수는 고정적으로 넣어놓고, 호출만 하면 해당 파일의 버젼이 읽히게 됩니다.

 

참 쉽죠~~

 

#dll#EXE#GetFileVersionInfo#버전#읽기

728x90
반응형