作为构建过程的一部分,我需要为所有已编译的二进制文件设置版本信息.一些二进制文件已经有版本信息(在编译时添加),有些则没有.
我希望能够应用以下信息:
公司名
版权声明
产品名称
产品描述
文件版本
产品版本
所有这些属性都由构建脚本指定,并且必须在编译后应用.这些是使用C++ Builder 2007编译的标准二进制文件(而不是程序集).
我怎样才能做到这一点?
虽然它不是批处理过程,但Visual Studio也可以添加/编辑文件资源.
只需在.EXE或.DLL上使用File-> Open-> File.这对于在构建后修复版本信息或将其添加到没有这些资源的文件开始时非常方便.
与许多其他答案不同,此解决方案使用完全免费的软件.
首先,创建一个这样的文件Resources.rc
:
VS_VERSION_INFO VERSIONINFO FILEVERSION 1,0,0,0 PRODUCTVERSION 1,0,0,0 { BLOCK "StringFileInfo" { BLOCK "040904b0" { VALUE "CompanyName", "ACME Inc.\0" VALUE "FileDescription", "MyProg\0" VALUE "FileVersion", "1.0.0.0\0" VALUE "LegalCopyright", "© 2013 ACME Inc. All Rights Reserved\0" VALUE "OriginalFilename", "MyProg.exe\0" VALUE "ProductName", "My Program\0" VALUE "ProductVersion", "1.0.0.0\0" } } BLOCK "VarFileInfo" { VALUE "Translation", 0x409, 1200 } }
接下来,使用GoRC将其编译为.res
文件:
GoRC /fo Resources.res Resources.rc
(见下面我的评论镜子GoRC.exe
)
然后在CLI模式下使用Resource Hacker将其添加到现有模式.exe
:
ResHacker -add MyProg.exe, MyProg.exe, Resources.res,,,
而已!
或者你可以查看Win32 exe/dll文件的免费软件StampVer.
如果文件和产品版本已经有版本资源,它只会更改文件和产品版本.如果不存在版本资源,则无法添加版本资源.
rcedit相对较新,并且可以从命令行运行良好:https://github.com/atom/rcedit
$ rcedit "path-to-exe-or-dll" --set-version-string "Comments" "This is an exe" $ rcedit "path-to-exe-or-dll" --set-file-version "10.7" $ rcedit "path-to-exe-or-dll" --set-product-version "10.7"
还有一个NPM模块,它包含JavaScript和Grunt任务,以防你使用Grunt.
这样的事情怎么样?
verpatch /va foodll.dll %VERSION% %FILEDESCR% %COMPINFO% %PRODINFO% %BUILDINFO%
可这里完全开放代码.
有这个工具ChangeVersion [1]
功能列表(来自网站):
命令行界面
支持.EXE,.DLL和.RES文件
根据版本掩码更新FileVersion和ProductVersion
添加/更改/删除版本密钥字符串
调整文件标志(调试,特殊,私有等)
更新项目文件(.bdsproj | .bpr | .bpk | .dproj)
添加/更改主应用程序图标
使用带配置的ini文件
Windows Vista支持(需要提升)
易于集成到持续构建环境中
完全披露:我知道写这个工具的人,我曾经和他一起工作过.但这也意味着我知道他制作了高质量的软件;)
[1]链接已经死了.download.cnet.com上似乎有镜像版本.
verpatch很好,但不处理unicode字符...
尝试ResourceLib
我没有额外的工具.我刚刚将以下文件添加到我的Win32应用程序项目中.
一个头文件定义了一些常量,而不是我们可以在资源文件甚至程序代码上重用的常量.我们只需要维护一个文件.感谢Qt团队向我展示了如何在Qt项目上实现它,它现在也适用于我的Win32应用程序.
---- [version.h中] ----
#ifndef VERSION_H #define VERSION_H #define VER_FILEVERSION 0,3,0,0 #define VER_FILEVERSION_STR "0.3.0.0\0" #define VER_PRODUCTVERSION 0,3,0,0 #define VER_PRODUCTVERSION_STR "0.3.0.0\0" #define VER_COMPANYNAME_STR "IPanera" #define VER_FILEDESCRIPTION_STR "Localiza archivos duplicados" #define VER_INTERNALNAME_STR "MyProject" #define VER_LEGALCOPYRIGHT_STR "Copyright 2016 ipanera@gmail.com" #define VER_LEGALTRADEMARKS1_STR "All Rights Reserved" #define VER_LEGALTRADEMARKS2_STR VER_LEGALTRADEMARKS1_STR #define VER_ORIGINALFILENAME_STR "MyProject.exe" #define VER_PRODUCTNAME_STR "My project" #define VER_COMPANYDOMAIN_STR "www.myurl.com" #endif // VERSION_H
---- [MyProjectVersion.rc] ----
#include#include "version.h" VS_VERSION_INFO VERSIONINFO FILEVERSION VER_FILEVERSION PRODUCTVERSION VER_PRODUCTVERSION BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904E4" BEGIN VALUE "CompanyName", VER_COMPANYNAME_STR VALUE "FileDescription", VER_FILEDESCRIPTION_STR VALUE "FileVersion", VER_FILEVERSION_STR VALUE "InternalName", VER_INTERNALNAME_STR VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR VALUE "LegalTrademarks1", VER_LEGALTRADEMARKS1_STR VALUE "LegalTrademarks2", VER_LEGALTRADEMARKS2_STR VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR VALUE "ProductName", VER_PRODUCTNAME_STR VALUE "ProductVersion", VER_PRODUCTVERSION_STR END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1252 END END