操作系统: 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;
}