본문 바로가기
프로그래밍

👨‍💻 [MFC] MFC 에서 실행파일의 ProductName 과 ProductVersion 알아내는 방법은 어떻게 되나요?

by 밝음의기둥 2025. 3. 10.
반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

MFC 에서 실행파일의 ProductName 과 ProductVersion 알아내는 방법은 어떻게 되는지 간략히 알아보았습니다.


질문 >

MFC 에서 실행파일의 ProductName 과 ProductVersion 알아내는 방법은 어떻게 되나요?

답변 >

MFC에서 실행 파일의 ProductName과 ProductVersion을 알아내려면, Windows API를 사용하여 파일의 버전 정보를 가져와야 합니다.

다음은 GetFileVersionInfo 및 VerQueryValue 함수를 사용하여 실행 파일의 ProductName과 ProductVersion을 가져오는 방법입니다.


1. 코드 예제 (C++ / MFC)

#include <windows.h>
#include <tchar.h>
#include <strsafe.h>

void GetProductInfo(LPCTSTR szFilePath)
{
    DWORD dwHandle;
    DWORD dwSize = GetFileVersionInfoSize(szFilePath, &dwHandle);

    if (dwSize == 0)
    {
        _tprintf(_T("GetFileVersionInfoSize failed: %lu\\n"), GetLastError());
        return;
    }

    // 버전 정보를 저장할 버퍼 할당
    BYTE* pVersionInfo = new BYTE[dwSize];

    if (!GetFileVersionInfo(szFilePath, 0, dwSize, pVersionInfo))
    {
        _tprintf(_T("GetFileVersionInfo failed: %lu\\n"), GetLastError());
        delete[] pVersionInfo;
        return;
    }

    // 버전 정보의 루트 블록에서 번역 테이블 확인
    struct LANGANDCODEPAGE {
        WORD wLanguage;
        WORD wCodePage;
    } *pLangInfo;

    UINT uLen;
    if (!VerQueryValue(pVersionInfo, _T("\\\\VarFileInfo\\\\Translation"), (LPVOID*)&pLangInfo, &uLen))
    {
        _tprintf(_T("VerQueryValue for Translation failed\\n"));
        delete[] pVersionInfo;
        return;
    }

    // 첫 번째 언어 및 코드 페이지 선택
    TCHAR szSubBlock[256];
    StringCchPrintf(szSubBlock, 256, _T("\\\\StringFileInfo\\\\%04x%04x\\\\ProductName"), pLangInfo->wLanguage, pLangInfo->wCodePage);

    // ProductName 가져오기
    LPTSTR szProductName = nullptr;
    if (VerQueryValue(pVersionInfo, szSubBlock, (LPVOID*)&szProductName, &uLen))
    {
        _tprintf(_T("ProductName: %s\\n"), szProductName);
    }

    // ProductVersion 가져오기
    StringCchPrintf(szSubBlock, 256, _T("\\\\StringFileInfo\\\\%04x%04x\\\\ProductVersion"), pLangInfo->wLanguage, pLangInfo->wCodePage);
    LPTSTR szProductVersion = nullptr;
    if (VerQueryValue(pVersionInfo, szSubBlock, (LPVOID*)&szProductVersion, &uLen))
    {
        _tprintf(_T("ProductVersion: %s\\n"), szProductVersion);
    }

    delete[] pVersionInfo;
}

int main()
{
    TCHAR szFilePath[MAX_PATH];
    GetModuleFileName(NULL, szFilePath, MAX_PATH); // 현재 실행 파일 경로 가져오기

    GetProductInfo(szFilePath);

    return 0;
}


2. 코드 설명

  1. GetModuleFileName(NULL, szFilePath, MAX_PATH);
    • 현재 실행 중인 EXE 파일의 전체 경로를 가져옵니다.
  2. GetFileVersionInfoSize
    • 실행 파일의 버전 정보 크기를 확인합니다.
  3. GetFileVersionInfo
    • 실행 파일의 버전 정보를 가져옵니다.
  4. VerQueryValue
    • 버전 정보에서 ProductName 및 ProductVersion을 추출합니다.

3. 실행 예시

ProductName: MyApplication
ProductVersion: 1.0.0.0

이제 실행 파일의 ProductName과 ProductVersion을 가져올 수 있습니다. 😊



🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리(Willee) 입니다. 📢 위로그@WiLog 는 자기계발을 목적으로 하는 채널 입니다. 📢 오늘도 즐겁게~ 자신을 위한 계발을 함께 해보아요~ d^_^b 📌

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com


반응형