当前位置:  开发笔记 > 开发工具 > 正文

如何设置现有.exe,.dll的版本信息?

如何解决《如何设置现有.exe,.dll的版本信息?》经验,为你挑选了8个好方法。

作为构建过程的一部分,我需要为所有已编译的二进制文件设置版本信息.一些二进制文件已经有版本信息(在编译时添加),有些则没有.

我希望能够应用以下信息:

公司名

版权声明

产品名称

产品描述

文件版本

产品版本

所有这些属性都由构建脚本指定,并且必须在编译后应用.这些是使用C++ Builder 2007编译的标准二进制文件(而不是程序集).

我怎样才能做到这一点?



1> UweBaemayr..:

虽然它不是批处理过程,但Visual Studio也可以添加/编辑文件资源.

只需在.EXE或.DLL上使用File-> Open-> File.这对于在构建后修复版本信息或将其添加到没有这些资源的文件开始时非常方便.


当我尝试它时,这非常有效.对于完全缺少版本信息的文件:在Visual Studio中打开DLL后,转到"编辑">"添加资源">"版本",然后单击"新建".然后在新版本选项卡中,更改FILEVERSION和PRODUCTVERSION,CompanyName等.保存文件,您就完成了!
在Windows 8,VS 2015上试过这个(添加版本信息)并且在Windows资源管理器中一切都很好,除了......可执行文件将不再启动.
@UweBaemayr。您引用的答案与我可以进行自动化的方式一样,我们是否可以使其自动化,就像我做相同的帖子构建一样。但是如何?

2> Danny Becket..:

与许多其他答案不同,此解决方案使用完全免费的软件.

首先,创建一个这样的文件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,,,

而已!


好像命令行已经改变了一点:`ResourceHacker.exe -open Source.dll -save Changed.dll -action addoverwrite -resource Version.res`另外,ResourceHacker可以自己编译.rc文件:`ResourceHacker.exe -open Version. rc -save Version.res -action compile`
您也可以使用Microsoft [资源编译器](http://msdn.microsoft.com/en-us/library/windows/desktop/aa381042(v = vs.85).aspx)代替GoRC.它可以在Windows SDK中使用.

3> 小智..:

或者你可以查看Win32 exe/dll文件的免费软件StampVer.
如果文件和产品版本已经有版本资源,它只会更改文件和产品版本.如果不存在版本资源,则无法添加版本资源.



4> a paid nerd..:

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.


请注意,rcedit只能修改现有资源而不能插入新资源
不适用于7zip sfx存档:/仅切出7zip存档部分。

5> filofel..:

这样的事情怎么样?

verpatch /va foodll.dll %VERSION% %FILEDESCR% %COMPINFO% %PRODINFO% %BUILDINFO%

可这里完全开放代码.



6> Otherside..:

有这个工具ChangeVersion [1]

功能列表(来自网站):

命令行界面

支持.EXE,.DLL和.RES文件

根据版本掩码更新FileVersion和ProductVersion

添加/更改/删除版本密钥字符串

调整文件标志(调试,特殊,私有等)

更新项目文件(.bdsproj | .bpr | .bpk | .dproj)

添加/更改主应用程序图标

使用带配置的ini文件

Windows Vista支持(需要提升)

易于集成到持续构建环境中

完全披露:我知道写这个工具的人,我曾经和他一起工作过.但这也意味着我知道他制作了高质量的软件;)


[1]链接已经死了.download.cnet.com上似乎有镜像版本.


第二个链接导致过期工具"更改版本v2012.9.6.0 - (C)2007-2012 The-Software-Box.com此试用版已过期"

7> 小智..:

verpatch很好,但不处理unicode字符...
尝试ResourceLib



8> 小智..:

我没有额外的工具.我刚刚将以下文件添加到我的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

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有