您的位置:首页 > 其它

获取当前程序的版本和获取某个文件的版本

2017-06-05 14:36 176 查看
                     软件更新需要获取当前程序的版本和获取某个文件的版本,在网上找了两段代码记录下来

                    1.获取某个文件的版本

                     

BOOL GetFileVersion(LPCTSTR strFile, CString& strVersion)
{
TCHAR szVersionBuffer[8192] = _T("");
DWORD dwVerSize;
DWORD dwHandle;
dwVerSize = GetFileVersionInfoSize(strFile, &dwHandle);
if (dwVerSize == 0)
{
return FALSE;
}
if (GetFileVersionInfo(strFile, 0, dwVerSize, szVersionBuffer))
{
VS_FIXEDFILEINFO *pInfo;
unsigned int nInfolen;
if (VerQueryValue(szVersionBuffer, _T("\\"), (void**)&pInfo, &nInfolen))
{
strVersion.Format(_T("%d.%d.%d.%d"),
HIWORD(pInfo->dwFileVersionMS),
LOWORD(pInfo->dwFileVersionMS),
HIWORD(pInfo->dwFileVersionLS),
LOWORD(pInfo->dwFileVersionLS));
return TRUE;
}
}
return FALSE;
}

2.获取当前程序的版本

CString GetVersion()
{
CString strVersion;
TCHAR szFullPath[MAX_PATH];

DWORD dwVerInfoSize = 0;
DWORD dwVerHnd;
VS_FIXEDFILEINFO * pFileInfo;

GetModuleFileName(NULL, szFullPath, sizeof(szFullPath));
dwVerInfoSize = GetFileVersionInfoSize(szFullPath, &dwVerHnd);
if (dwVerInfoSize)
{

HANDLE hMem;
LPVOID lpvMem;
unsigned int uInfoSize = 0;

hMem = GlobalAlloc(GMEM_MOVEABLE, dwVerInfoSize);
lpvMem = GlobalLock(hMem);
GetFileVersionInfo(szFullPath, dwVerHnd, dwVerInfoSize, lpvMem);

::VerQueryValue(lpvMem, (LPTSTR)_T("\\"), (void**)&pFileInfo, &uInfoSize);

int ret = GetLastError();
WORD m_nProdVersion[4];

m_nProdVersion[0] = HIWORD(pFileInfo->dwProductVersionMS);
m_nProdVersion[1] = LOWORD(pFileInfo->dwProductVersionMS);
m_nProdVersion[2] = HIWORD(pFileInfo->dwProductVersionLS);
m_nProdVersion[3] = LOWORD(pFileInfo->dwProductVersionLS);

strVersion.Format(_T("%d.%d.%d.%d"), m_nProdVersion[0],
m_nProdVersion[1], m_nProdVersion[2], m_nProdVersion[3]);

GlobalUnlock(hMem);
GlobalFree(hMem);

}
return strVersion;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: