Windows .exe文件是否支持仅使用三位数字的版本号方案?
问题根因
- Windows的
VERSIONINFO资源的固定二进制头部的FILEVERSION、PRODUCTVERSION字段强制要求为4个16位整数,格式为主版本,次版本,修订版,编译号。你仅填写了3个数值,RC编译器在编译资源时会自动补第4位为0,因此二进制版本字段最终存储的是VERSION_MAJOR,VERSION_MINOR,VERSION_PATCH,0。 - 旧版本Windows资源管理器的默认版本展示逻辑优先读取二进制固定头的版本值,因此会显示为
1.0.0.0,你在StringFileInfo区块设置的字符串版本值默认不会被旧版系统直接调用展示。
解决方案
方案1:应用内自行读取版本展示(适配所有场景,推荐)
业务层面的三位版本规则属于上层业务约定,无需修改系统底层逻辑:
- 代码中直接读取
StringFileInfo区块下的ProductVersion字符串值,在应用的关于页、更新提示等面向用户的场景使用该值即可,完全符合你的三位版本规则要求。
方案2:修正RC资源的隐性补全逻辑
明确将第四位版本号写在RC配置中,避免RC编译器自动补全的不可控问题:
// 明确指定第四位为0,替代RC的隐性补全逻辑 FILEVERSION VERSION_MAJOR,VERSION_MINOR,VERSION_PATCH,0 PRODUCTVERSION VERSION_MAJOR,VERSION_MINOR,VERSION_PATCH,0
注:Windows 10及以上版本的资源管理器属性页,已调整为优先展示
StringFileInfo下的字符串版本值,只要你的VERSION_STR定义为三位格式,在新版系统上系统属性页也会直接展示三位版本号。
内容的提问来源于stack exchange,提问作者LorenDB
相关产品推荐
相关产品推荐

