如何为现有的.exe,.dll设置版本信息?
作为我们构build过程的一部分,我需要为所有编译的二进制文件设置版本信息。 一些二进制文件已经有版本信息(在编译时添加),有些则没有。
我希望能够应用以下信息:
- 公司名
- 版权声明
- 产品名称
- 产品描述
- 文件版本
- 产品版本
所有这些属性都由构build脚本指定,并且必须在编译之后应用。 这些是用C ++ Builder 2007编译的标准二进制文件(不是程序集)。
我怎样才能做到这一点?
虽然这不是批处理过程,但Visual Studio也可以添加/编辑文件资源。
只需使用文件 – >打开 – >文件的.EXE或.DLL。 这对于修复后版本信息是很方便的,或者将它添加到没有这些资源的文件开始。
或者你可以看看免费的StampVer Win32 exe / dll文件。
它只会改变文件和产品版本,虽然他们已经有一个版本资源。 如果不存在,则不能添加版本资源。
与许多其他答案不同,此解决scheme使用完全免费的软件。
首先,创build一个名为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,,,
而已!
这样的事情呢?
verpatch /va foodll.dll %VERSION% %FILEDESCR% %COMPINFO% %PRODINFO% %BUILDINFO%
这里有完整的资源 。
有这个工具ChangeVersion [1]
function列表(来自网站):
- 命令行界面
- 支持.EXE,.DLL和.RES文件
- 根据版本掩码更新FileVersion和ProductVersion
- 添加/更改/删除版本密钥string
- 调整文件标志(debugging,特殊,私人等)
- 更新项目文件(.bdsproj | .bpr | .bpk | .dproj)
- 添加/更改主应用程序图标
- 使用configuration的ini文件
- Windows Vista支持(需要提升)
- 很容易融入连续的构build环境
充分披露:我知道写这个工具的人,我曾经和他一起工作。 但这也意味着我知道他制作高质量的软件;)
[1]链接已经死亡。 在download.cnet.com似乎有镜像版本。
verpatch是好的,但不处理unicode字符…
尝试ResourceLib
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。
我正在做,没有额外的工具。 我刚刚将下列文件添加到我的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 <windows.h> #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
有Heaventools软件的资源调谐器控制台 。
资源调节器控制台是一个命令行工具,使开发人员能够在大量的Windows 32位和64位可执行文件中自动编辑不同的资源types。
具体请参阅“ 更改版本variables”和“更新版本信息”页面以获取更多详细信息。
晚了一点,但是自从我find它了(我可能需要再次find它),下面是我在VS2013 Express下的C ++ DLL中包含版本,公司名称等信息:
- 创build并编辑一个dllproj.rc文件,如前所述。
- 在DLL项目中添加行“rc.exe dllproj.rc”作为预生成步骤。
- 将dllproj.res添加到项目的资源文件夹中。
希望这可以帮助!
这是我见过的最好的工具,可以完全控制所有的文件资源,包括VersionInfo。
请参阅: Anders Melander的 ResourceEditor 。