文件版本信息包含在结构体VS_FIXEDFILEINFO中,VS_FIXEDFILEINFO结构在头文件WinVer.h中
typedef struct tagVS_FIXEDFILEINFO {
DWORD dwSignature; //包含的值是0xFEEF04BD
DWORD dwStrucVersion; //该结构的32位二进制版本号,高16位是主版本号,低16位是副版本号
DWORD dwFileVersionMS; //该文件二进制版本号的高32bits
DWORD dwFileVersionLS; //该文件二进制版本号的低32bits
DWORD dwProductVersionMS; //发布该文件的产品二进制版本号高32bits
DWORD dwProductVersionLS; //发布该文件的产品二进制版本号低32bits
DWORD dwFileFlagsMask; //比特掩码,标志dwFileFlags的有效位
DWORD dwFileFlags; //VS_FF_DEBUG---该文件包含调试信息或是由调试版编译的
//VS_FF_INFOINFERRED---文件的版本结构是动态创建的,
//因此,该结构中有的成员是空的或不正确的
//VS_FF_PATCHED---该文件被修改过
//VS_FF_PRERELEASE---该文件是开发版,不是商业发布版
//VS_FF_PRIVATEBUILD---该文件不是由标准发布步骤构建的
//VS_FF_SPECIALBUILD---该文件是由标准发布步骤构建的,
//但是相同版本号文件的变种
DWORD dwFileOS; //该文件设计用于的操作系统
DWORD dwFileType; //文件类型:VFT_APP---文件包含一个应用程序
VFT_DLL---文件包含一个DLL
VFT_DRV---文件包含一个设备驱动
VFT_FONT---文件包含一个字体文件
VFT_STATIC_LIB---文件包含一个静态链接库
VFT_UNKNOWN---文件类型未知
VFT_VXD---文件包含一个虚拟设备
DWORD dwFileSubtype; //文件的子类型,由dwFileType决定
DWORD dwFileDateMS; //二进制文件创建日期和时间戳的高32bits
DWORD dwFileDateLS; //二进制文件创建日期和时间戳的低32bits
} VS_FIXEDFILEINFO;
- 判断文件路径不为空,用PathFileExists()判断文件有效。
BOOL PathFileExists(LPCTSTR pszPath);
pszPath:要验证的文件的完整路径字符串
返回值:文件存在返回TRUE,否则返回FALSE
2. 使用函数GetFileVersionInfoSize()获取文件版本信息的大小(以字节为单位)。
DWORD GetFileVersionInfoSize(LPCTSTR lptstrFilename,LPDWORD lpdwHandle);
lptstrFilename: 要验证的文件的完整路径字符串
lpdwHandle:指向函数设置为零的变量的指针
返回值:成功返回文件版本信息的大小(以字节为单位),否则返回0
3. 使用函数GetFileVersionInfo()获取文件版本信息。
BOOL GetFileVersionInfo( LPCTSTR lptstrFilename, DWORD dwHandle,
DWORD dwLen, LPVOID lpData);
lptstrFilename:要验证的文件的完整路径字符串
dwHandle:忽略此参数,设置为0
dwLen:使用GetFileVersionInfoSize()获取的版本信息大小
lpData:指向接收文件版本信息的缓冲区的指针
返回值:成功返回非0,失败返回0
4. 使用VerQueryValue()函数从指定的版本信息资源中检索指定的版本信息。(要检索适当的资源,在调用VerQueryValue之前,必须先调用GetFileVersionInfoSize函数,然后调用GetFileVersionInfo函数)
BOOL VerQueryValue(LPCVOID pBlock, LPCTSTR lpSubBlock,
LPVOID *lplpBuffer, PUINT puLen);
pBlock:指向包含由GetFileVersionInfo函数返回的版本信息资源的缓冲区的指针
lpSubBlock:指向以零结尾的字符串的指针,该字符串指定要检索哪个版本信息值。字符串必须由反斜(\)分隔的名称组成
lplpBuffer:指向VS_FIXEDFILEINFO结构体指针的地址(二级指针)
puLen:包含一个指向lplpBuffer所指向的请求数据大小的指针
返回值:成功返回非0,失败返回0
5. 从FIXEDFILEINFO结构中提取版本信息。