您的位置:首页 > 其它

VC获得程序自身的版本号

2015-11-04 15:06 387 查看
操作系统: Windows7 64位

运行环境: Visual Studio 10

文件编码: Unicode

char* GetLocalPogramVersion()
{
TCHAR pFilePath[MAX_PATH] = {0};
DWORD dwRet = GetModuleFileName(NULL, pFilePath, MAX_PATH);
if(dwRet == 0)
{
TRACE("h获取程序的文件路径失败,错误码:%s\n",GetLastError());
return "";
}
TRACE("程序自身的全路径:%s\n",pFilePath);

//获取版本信息大小
DWORD dwSize = GetFileVersionInfoSize(pFilePath,NULL);
if (dwSize == 0)
{
TRACE("获取版本资源长度失败,文件不包含版本信息,错误码:%d\n",GetLastError());
return "";
}

TCHAR *pBuf = (TCHAR *)malloc(dwSize + 1);
memset(pBuf, 0, dwSize + 1);

//获取版本信息
DWORD dwRtn = GetFileVersionInfo(pFilePath,NULL, dwSize, pBuf);
if(dwRtn == 0)
{
TRACE("获取文件版本信息失败,错误码:%d\n",GetLastError());
return "";
}

LPVOID lpBuffer = NULL;
UINT uLen = 0;

dwRtn = VerQueryValue(pBuf, TEXT("\\StringFileInfo\\080404b0\\FileVersion"), &lpBuffer, &uLen);
if(dwRtn == 0)
{
delete pBuf;
TRACE("请求的程序版本信息不存在。\n");
return "";
}

int iLen = 2*wcslen((TCHAR*)lpBuffer);//CString,TCHAR汉字算一个字符,因此不用普通计算长度
char* chRtn = (char *)malloc(iLen+1);
memset(chRtn,0,iLen+1);
wcstombs(chRtn,(TCHAR*)lpBuffer,iLen+1);//转换成功返回为非负值

char* strVersion = (char *)malloc(iLen+1);
memset(strVersion,0,iLen+1);
strcpy(strVersion, chRtn);
delete pBuf;

TRACE("程序版本号:%s\n",strVersion);

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