Win10如何获取程序自己的版本号

前言

之前写过一篇博文,《VS2010获取程序自身的版本号

近期开发的一个应用,发现在Win7下正常,但到了Win10下,无法获得正确的版本号。

跟踪后发现问题出在这里:

GetFileVersionInfoSize

这个接口在Win7下正确返回,但在Win10下返回错误。

 

获取资源中版本号的新方法

不想深究Win7和Win10系统处理这个API有什么区别了,于是换了一种方式来获取版本号:

void CEMHDetectDlg::GetVersion(CString &ver)
{
	HRSRC hsrc = FindResource(0, MAKEINTRESOURCE(VS_VERSION_INFO), RT_VERSION);
	HGLOBAL hgbl = LoadResource(0, hsrc);
	BYTE *pBt = (BYTE *)LockResource(hgbl);
	VS_FIXEDFILEINFO* pFinfo = (VS_FIXEDFILEINFO*)(pBt + 40);

	ver.Format(_T("V%d.%d.%d.%d"),
		(pFinfo->dwFileVersionMS >> 16) & 0xFF,
		(pFinfo->dwFileVersionMS) & 0xFF,
		(pFinfo->dwFileVersionLS >> 16) & 0xFF,
		(pFinfo->dwFileVersionLS) & 0xFF);
}

 

头文件及错误处理

如果编译提示缺符号,添加两个头文件即可:

#include "Windows.h"
#include "winres.h"

如果提示VS_FIXEDFILEINFO找不到定义,可以包含头文件,也可以自己加个定义即可:

typedef struct tagVS_FIXEDFILEINFO {
	DWORD dwSignature;
	DWORD dwStrucVersion;
	DWORD dwFileVersionMS;
	DWORD dwFileVersionLS;
	DWORD dwProductVersionMS;
	DWORD dwProductVersionLS;
	DWORD dwFileFlagsMask;
	DWORD dwFileFlags;
	DWORD dwFileOS;
	DWORD dwFileType;
	DWORD dwFileSubtype;
	DWORD dwFileDateMS;
	DWORD dwFileDateLS;
} VS_FIXEDFILEINFO;

使用这种方式,是直接加载程序的资源文件中的版本号资源,从中读出版本信息。

 

兼容性测试

经测试,Win7和Win10下都能正确获取到资源文件中定义的版本号。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值