参考:https://blog.csdn.net/diaoxuesong/article/details/78579785
作一定修改,测试可用。
#pragma comment(lib, "Version.lib ")
void CcomDlg::GetVersion(CString &ver)
{
DWORD dwInfoSize = 0;
TCHAR exePath[MAX_PATH];
memset(exePath, 0, sizeof(exePath));
ver.Format(_T("0.0.0.0"));
// 得到程序的自身路径
GetModuleFileName(NULL, exePath, sizeof(exePath)/sizeof(TCHAR)); //得到exe文件路径, D:\\File\\..\\com\\Debug\xxx.exe
// 判断是否能获取版本号
dwInfoSize = GetFileVersionInfoSize(exePath, NULL); //0x0000053c
if (dwInfoSize == 0)
{
AfxMessageBox(_T("GetFileVersionInfoSize fail"));
return;
}
else
{
char* pData = new char[dwInfoSize];
// 获取版本信息
if (!GetFileVersionInfo(exePath, NULL, dwInfoSize, pData))
{
AfxMessageBox(_T("GetFileVersionInfo fail"));
delete pData;
return;
}
else
{
// 查询版本信息中的具体键值
LPVOID lpBuffer;
UINT uLength;
if (!::VerQueryValue((LPCVOID)pData, _T("\\"), &lpBuffer, &uLength))
{
AfxMessageBox(_T("GetFileVersionValue fail"));
delete pData;
return;
}
else
{
DWORD dwVerMS;
DWORD dwVerLS;
dwVerMS = ((VS_FIXEDFILEINFO*)lpBuffer)->dwProductVersionMS;
dwVerLS = ((VS_FIXEDFILEINFO*)lpBuffer)->dwProductVersionLS;
ver.Format(_T("V%d.%d.%d.%d"), (dwVerMS >> 16), (dwVerMS & 0xFFFF), (dwVerLS >> 16), (dwVerLS & 0xFFFF));
}
}
delete pData;
}
}