获取文件版本信息

获取dll,exe等文件的版本信息:

BOOL GetPeVersion(QString& strVersion, const TCHAR *pFileName)
{
    TCHAR tchPeFile[MAX_PATH + 1] = { 0 };
    if (pFileName && '\0' != *pFileName)
    {
        ::lstrcpyn(tchPeFile, pFileName, MAX_PATH);
    }
    else
    {
        ::GetModuleFileName(NULL, tchPeFile, MAX_PATH);
    }

    unsigned long dwBufLen = 0l;
    unsigned char* pbyBuffer = NULL;
    VS_FIXEDFILEINFO* lpFileInfo = NULL;
    UINT nFileInfoLen = 0;
    BOOL bRet = FALSE;

    dwBufLen = ::GetFileVersionInfoSize(tchPeFile, NULL);
    if (0l == dwBufLen)
    {
        return FALSE;
    }

    pbyBuffer = new unsigned char[dwBufLen + 1];
    if (!pbyBuffer)
    {
        return FALSE;
    }
    ::memset(pbyBuffer, 0, dwBufLen + 1);

    if (!::GetFileVersionInfo(tchPeFile, NULL, dwBufLen, pbyBuffer))
    {
        goto exit;
    }
    if (!::VerQueryValue(pbyBuffer, TEXT("\\"), (void**)&lpFileInfo, &nFileInfoLen))
    {
        goto exit;
    }

    int m1 = lpFileInfo->dwFileVersionMS >> 16;
    int m2 = (WORD)lpFileInfo->dwFileVersionMS;
    int m3 = lpFileInfo->dwFileVersionLS >> 16;
    int m4 = (WORD)lpFileInfo->dwFileVersionLS;

    strVersion += QString::number(m1);
    strVersion += ".";
    strVersion += QString::number(m2);
    strVersion += ".";
    strVersion += QString::number(m3);
    strVersion += ".";
    strVersion += QString::number(m4);

    bRet = TRUE;

exit:
    if (pbyBuffer)
    {
        delete[]pbyBuffer;
        pbyBuffer = NULL;
    }

    return bRet;
}

使用:

    char info[512] = { 0 };
    GetSystemDirectoryA(info, MAX_PATH);      //获取系统路径,得到“C:\\ProgramFile(x86)\\system32”
    QString infoQStr(info);
    infoQStr += "\\riched20.dll";
    QString versionTempStr;
    BOOL retValue = GetPeVersion(versionTempStr, infoQStr.toStdWString().c_str());

扫描二维码关注公众号,回复: 3777210 查看本文章

    if (versionTempStr == "5.31.23.1230") {
        m_copyRichFile = true;
    }

猜你喜欢

转载自blog.csdn.net/Best_ZYJ/article/details/81463051