如何写入和获取软件的版本信息(VS环境下)

                             *******************************
                             *如何写入和获取软件版本信息(VS环境下)*
                             *******************************
如何写入软件版本信息
很简单,创建一个基于MFC的dll工程就会自动生成一个resource.rc文件,把里面版本信息相关的东西复制过来稍加修改即可。

/////////////////////////////////////////////////////////////////////////////
//
// 版本
// 

VS_VERSION_INFO     VERSIONINFO
  FILEVERSION       2014,0,0,2053
  PRODUCTVERSION    2,0,0,1
 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
#ifdef _DEBUG
 FILEFLAGS VS_FF_DEBUG
#else
 FILEFLAGS 0x0L
#endif
 FILEOS VOS_NT_WINDOWS32
 FILETYPE        VFT_APP//VFT_UNKNOWN//VFT_DLL : dll type
 FILESUBTYPE VFT2_UNKNOWN
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "080404B0"
        BEGIN
            VALUE "CompanyName", "Wesky Soft"
            VALUE "FileDescription", "DLL Fix Utility"
            VALUE "FileVersion",     "2014.0.0.2053"
            VALUE "InternalName",    "DllSuite"
            VALUE "LegalCopyright", "(C) <Wesky Soft>。保留所有权利。"
            VALUE "OriginalFilename","DllSuite.exe"
            VALUE "ProductName", "DLLSuite"
            VALUE "ProductVersion",  "2.0.0.1"
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x0804, 1200
    END
END

Tips:
1.注意文件版本和产品版本有两个指定的地方,务必保持一致,而且一定一定要注意前面的用逗号隔开,后面的用点号隔开(一个逗号引发的血案..)
2.相关的宏定义在文件VerRsrc.h中

如何获取文件版本信息

void _LoadFileVersion()
{
    DWORD dwHandle = 0;
    char* pInfoData = NULL ;
    
    WCHAR szSelfName[MAX_PATH+1] = {0};
    if(::GetModuleFileName(NULL, szSelfName, MAX_PATH+1))
    {
        DWORD dwInfoSize = GetFileVersionInfoSize(szSelfName, &dwHandle);
        if(dwInfoSize > 0)
        {
            pInfoData = new char[dwInfoSize];
            memset(pInfoData, 0, dwInfoSize);
            if(GetFileVersionInfo(szSelfName, dwHandle, dwInfoSize, pInfoData))
            {                
                VS_FIXEDFILEINFO* vs_file_info = NULL;
                unsigned int size = 0;
                if(VerQueryValue(pInfoData, L"\", (LPVOID*)&vs_file_info, &size))
                {
                    m_cFileVer.Empty();
                    m_cFileVer.Format(L"%d.%d.%d.%d", HIWORD(vs_file_info->dwFileVersionMS), LOWORD(vs_file_info->dwFileVersionMS), HIWORD(vs_file_info->dwFileVersionLS), LOWORD(vs_file_info->dwFileVersionLS));
                    SetItemText(IDC_FILEVER, m_cFileVer.GetString());
                }
            }
            if(pInfoData)
            {
                delete[] pInfoData;
                pInfoData = NULL;
            }
        }
    }
}

测试结果:

原文地址:https://www.cnblogs.com/tupx/p/3656078.html