您的位置:首页 > 其它

获取windows可执行文件的version信息(版本号)

2015-09-09 00:00 411 查看
之前在msdn上Version Information看到文件版本信息的介绍,看着整体比较复杂,就一直没做。现在需要获取ocx文件的版本号,所以查找了下相关资料,比较有用的就是VS_FIXEDFILEINFO结构,获取这个参数就基本可以完成任务了。

代码如下:

1 //typedef struct tagVS_FIXEDFILEINFO  2 //{  3 // DWORD dwSignature; /* e.g. 0xfeef04bd */  4 // DWORD dwStrucVersion; /* e.g. 0x00000042 = "0.42" */  5 // DWORD dwFileVersionMS; /* e.g. 0x00030075 = "3.75" */  6 // DWORD dwFileVersionLS; /* e.g. 0x00000031 = "0.31" */  7 // DWORD dwProductVersionMS; /* e.g. 0x00030010 = "3.10" */  8 // DWORD dwProductVersionLS; /* e.g. 0x00000031 = "0.31" */  9 // DWORD dwFileFlagsMask; /* = 0x3F for version "0.42" */ 10 // DWORD dwFileFlags; /* e.g. VFF_DEBUG | VFF_PRERELEASE */ 11 // DWORD dwFileOS; /* e.g. VOS_DOS_WINDOWS16 */ 12 // DWORD dwFileType; /* e.g. VFT_DRIVER */ 13 // DWORD dwFileSubtype; /* e.g. VFT2_DRV_KEYBOARD */ 14 // DWORD dwFileDateMS; /* e.g. 0 */ 15 // DWORD dwFileDateLS; /* e.g. 0 */ 16 //} VS_FIXEDFILEINFO;
17 { 18     char szAppFullPath[_MAX_PATH] = {0}; 19
20     GetModuleFileName(NULL,szAppFullPath,MAX_PATH);//得到程序模块名称,全路径 21
22     //获取当前文件的版本信息
23     DWORD dwLen = GetFileVersionInfoSize(szAppFullPath,NULL); 24     char *pszAppVersion = new char[dwLen+1]; 25     if(pszAppVersion) 26  { 27         memset(pszAppVersion,0,sizeof(char)*(dwLen+1)); 28  GetFileVersionInfo(szAppFullPath,NULL,dwLen,pszAppVersion); 29  CString strVersion; 30         UINT nLen(0); 31         VS_FIXEDFILEINFO *pFileInfo(NULL); 32         VerQueryValue(pszAppVersion,"\\",(LPVOID*)&pFileInfo,&nLen); 33         if(pFileInfo) 34  { 35             //获取文件版本号
36             strVersion.Format("%d.%d.%d.%d",HIWORD(pFileInfo->dwFileVersionMS), 37                 LOWORD(pFileInfo->dwFileVersionMS), 38                 HIWORD(pFileInfo->dwFileVersionLS), 39                 LOWORD(pFileInfo->dwFileVersionLS)); 40  } 41  } 42 }


基本思路就是先获取可执行文件所在的全路径,然后使用GetFileVersionInfo函数,获取版本信息;之后使用VerQueryValue函数,查询版本信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: