【问题标题】:How do I set the version information for an existing .exe, .dll?如何设置现有 .exe、.dll 的版本信息?
【发布时间】:2010-09-22 00:08:44
【问题描述】:

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

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

  • 公司名称
  • 版权声明
  • 产品名称
  • 产品说明
  • 文件版本
  • 产品版本

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

我该怎么做?

【问题讨论】:

  • ResourceHacker 有什么用?任务到底是怎么设置的? UpdateResource函数在什么问题上使用,如果任务更新版本在现有pe中
  • 试试这个:alternativeto.net/software/xn-resource-editor,我认为有逆向工程工具可以做到这一点

标签: windows dll versioning exe fileversioninfo


【解决方案1】:

虽然它不是批处理,但 Visual Studio 还可以添加/编辑文件资源。

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

【讨论】:

  • 当我尝试它时,这非常有效。对于完全缺少版本信息的文件:在 Visual Studio 中打开 DLL 后,转到编辑 > 添加资源 > 版本,然后单击新建。然后在新的版本选项卡中,更改 FILEVERSION 和 PRODUCTVERSION、CompanyName 等。保存文件,一切就绪!
  • @UweBaemayr。你引用的答案我想问同样的问题,我们可以像我做同样的后期构建一样自动化它,我想自动化它。但是如何?
  • 对于我的旧 Delphi win32 dll,这不起作用。尽管 dll 信息已正确更改,但在对其运行健全性检查时,您会发现它已损坏。
  • 在 Windows 8、VS 2015 上试过这个(添加版本信息),在 Windows 资源管理器中一切正常,除了......可执行文件将不再启动。
  • 使用 Visual Studio 适用于 Visual Studio 2015,但不适用于 2019。
【解决方案2】:

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

首先,创建一个名为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,,,

就是这样!

【讨论】:

  • @CharlesB 我自己也注意到了,但这是正确的链接。看起来有人忘记向他们的虚拟主机付款了!这是二进制文件,我已将其镜像到我的公共 Assembla 帐户:assembla.com/code/danny-beckett/subversion/nodes/13/GoRC.exe
  • 您也可以使用 Microsoft Resource Compiler 代替 GoRC。它在 Windows SDK 中可用。
  • 为 Resource Hacker 竖起大拇指,我在这个答案中使用了它,它非常棒,很棒的程序。 (与程序或制造商没有密切关系;-)
  • @UweKeim 我有一段时间没用这个了,但我很确定它们是必需的。
  • 命令行好像变了一点: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
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    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 module 将其从 JavaScript 包装起来,还有一个 Grunt task 以防您使用 Grunt。

    【讨论】:

    • 注意rcedit只能修改现有资源,不能插入新资源
    • 不适用于 7zip sfx 存档:/ 只需删除 7zip 存档部分。
    • 试过了,在同一个目录下总是无法加载文件,似乎该工具可能取决于主机配置
    • 与 7zS.sfx 存根一起工作,其中第一部分带有 VERSIONINFO,用于将自解压存档连接在一起。您也可以手动重命名 7zS.exe 中的 7zS.sfx 并在 Visual Studio 中对其进行编辑,但由于每个版本的版本号都在更改,因此您更喜欢使用包含 rcedit 语句的批处理文件来设置它。
    • 这个工具很讨厌,在将它应用到你的二进制文件之前请先看看这个错误:github.com/electron/rcedit/issues/51
    【解决方案5】:

    这样的事情呢?

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

    有空here with full sources

    【讨论】:

    • Verpatch 似乎为我创建了一个错误的产品版本资源(使用 /va /pv 选项)。该版本在 Windows 资源管理器中正确显示,但在使用 VerQueryValue 的代码中检索时缺少最后一个字符。为了修复坏资源,我这样做了: (1) 在 Resource Hacker 中加载 DLL。 (2) 查看版本资源。 (3) 编译(修改某些内容然后将其改回以启用按钮)。 (4) 保存。
    • verpatch 适用于我的开发盒上我的 DLL 的 x64 和 x86 版本但是在 apveyor 构建项目中它仅适用于 x64 并且它对 x86 dll 没有任何作用——也没有错误!任何提示可能会发生什么?我可以在 appveyor 日志中看到 verpatch 命令正在执行,没有错误,并且 dll 没有以某种方式被替换,最后它没有版本标记;对于 x64,在所有情况下一切正常。请问有什么线索吗?
    • @Ovi-Wan Kenobi :我不知道什么是 apveyor,但根据你的描述,在我看来更像是一个 apveyor 问题。在最坏的情况下,如果可能的话,准备好在 apveyor 环境中进行一些调试吗?...
    【解决方案6】:

    有多种工具,很多很棒的答案都提到了,我会选择一个。

    资源黑客

    我从[AngusJ]: Resource Hacker 下载了最新版本 (5.1.7)。所有需要的信息都可以在该页面上找到(命令行选项、脚本等)。在下面的演练中,我将在 2 个可执行文件(实验室老鼠)上进行操作(出于显而易见的原因)我已将其复制到我的 cwd 中:

    • ResourceHacker.exe:我认为对自己进行操作会很有趣
    • cmake.exe:没有设置版本信息的随机可执行文件(在我的机器上安装v3.6.3的一部分)

    在继续之前,我想提一下ResourceHacker有一个有趣的终端输出,下面的复制/粘贴片段可能会产生一些混乱。 p>

    1。设置

    这更像是一个初步步骤,熟悉环境,表明没有时髦的生意在进行,...

    e:\Work\Dev\StackOverflow\q000284258> sopr.bat
    *** Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ***
    
    [prompt]> dir
     Volume in drive E is Work
     Volume Serial Number is 3655-6FED
    
     Directory of e:\Work\Dev\StackOverflow\q000284258
    
    2019-01-28  20:09    <DIR>          .
    2019-01-28  20:09    <DIR>          ..
    2016-11-03  09:17         5,413,376 cmake.exe
    2019-01-03  02:06         5,479,424 ResourceHacker.exe
    2019-01-28  20:30               496 ResourceHacker.ini
                   3 File(s)     10,893,296 bytes
                   2 Dir(s)  103,723,261,952 bytes free
    
    [prompt]> set PATH=%PATH%;c:\Install\x64\CMake\CMake\3.6.3\bin
    
    [prompt]> .\cmake --help >nul 2>&1
    
    [prompt]> echo %errorlevel%
    0
    
    [prompt]> .\ResourceHacker.exe -help
    
    [prompt]>
    
    ==================================
    Resource Hacker Command Line Help:
    ==================================
    
    -help             : displays these abbreviated help instructions.
    -help commandline : displays help for single commandline instructions
    -help script      : displays help for script file instructions.
    
    
    
    
    [prompt]> echo %errorlevel%
    0
    

    如所见,可执行文件正常,运行良好,它们的详细信息(我们关心的)如下所示:

    2。资源

    资源文件是包含资源的文本文件。资源(简化)具有:

    • 姓名
    • 类型
    • 价值

    更多详情请查看[MS.Docs]: About Resource Files。有许多工具(在现有答案中提到)可以促进资源文件的编辑,例如:

    • VStudio 在启动新项目时会创建一个默认的
    • 可以手动创建这样的文件
    • 但是,因为它是关于 Resource Hacker,并且:

      • 它能够从现有的可执行文件中提取资源
      • 里面嵌入了资源(如上图所示)

      我将在此步骤中使用它 (-action extract)

    接下来,为了将资源嵌入到 .exe (.dll, ...) 中,它必须被编译转换为二进制形式,适合 PE 格式。同样,有很多工具可以实现这一点,但正如您可能猜到的那样,我将坚持使用 Resource Hacker (-action compile)。

    [prompt]> :: Extract the resources into a file
    [prompt]> .\ResourceHacker.exe -open .\ResourceHacker.exe -save .\sample.rc -action extract -mask VersionInfo,, -log con
    
    [prompt]>
    
    [28 Jan 2019, 20:58:03]
    
    Current Directory:
    e:\Work\Dev\StackOverflow\q000284258
    
    Commandline:
    .\ResourceHacker.exe  -open .\ResourceHacker.exe -save .\sample.rc -action extract -mask VersionInfo,, -log con
    
    Open    : e:\Work\Dev\StackOverflow\q000284258\ResourceHacker.exe
    Save    : e:\Work\Dev\StackOverflow\q000284258\sample.rc
    
    
    Success!
    
    [prompt]> :: Modify the resource file and set our own values
    [prompt]>
    [prompt]> :: Compile the resource file
    [prompt]> .\ResourceHacker.exe -open .\sample.rc -save .\sample.res -action compile -log con
    
    [prompt]>
    
    [28 Jan 2019, 20:59:51]
    
    Current Directory:
    e:\Work\Dev\StackOverflow\q000284258
    
    Commandline:
    .\ResourceHacker.exe  -open .\sample.rc -save .\sample.res -action compile -log con
    
    Open    : e:\Work\Dev\StackOverflow\q000284258\sample.rc
    Save    : e:\Work\Dev\StackOverflow\q000284258\sample.res
    
    Compiling: e:\Work\Dev\StackOverflow\q000284258\sample.rc
    Success!
    
    [prompt]> dir /b
    cmake.exe
    ResourceHacker.exe
    ResourceHacker.ini
    sample.rc
    sample.res
    

    在您的情况下,不需要保存和编辑资源文件,因为该文件已经存在,我只是为了演示目的。下面是修改后(也就是编译前)的资源文件。

    sample.rc

    1 VERSIONINFO
    FILEVERSION 3,1,4,1592
    PRODUCTVERSION 2,7,1,8
    FILEOS 0x4
    FILETYPE 0x1
    {
    BLOCK "StringFileInfo"
    {
        BLOCK "040904E4"
        {
            VALUE "CompanyName", "Cristi Fati\0"
            VALUE "FileDescription", "20190128 - SO q000284258 demo\0"
            VALUE "FileVersion", "3.1.4.1592\0"
            VALUE "ProductName", "Colonel Panic\0"
            VALUE "InternalName", "100\0"
            VALUE "LegalCopyright", "(c) Cristi Fati 1999-2999\0"
            VALUE "OriginalFilename", "ResHack\0"
            VALUE "ProductVersion", "2.7.1.8\0"
        }
    }
    
    BLOCK "VarFileInfo"
    {
        VALUE "Translation", 0x0409 0x04E4  
    }
    }
    

    3。嵌入

    这也将由 Resource Hacker (-action addoverwrite) 执行。由于 .exe 已被复制,因此我将就地编辑它们的资源。

    [prompt]> .\ResourceHacker.exe -open .\cmake.exe -save .\cmake.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con
    
    [prompt]>
    
    [28 Jan 2019, 21:17:19]
    
    Current Directory:
    e:\Work\Dev\StackOverflow\q000284258
    
    Commandline:
    .\ResourceHacker.exe  -open .\cmake.exe -save .\cmake.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con
    
    Open    : e:\Work\Dev\StackOverflow\q000284258\cmake.exe
    Save    : e:\Work\Dev\StackOverflow\q000284258\cmake.exe
    Resource: e:\Work\Dev\StackOverflow\q000284258\sample.res
    
      Added: VERSIONINFO,1,1033
    
    Success!
    
    [prompt]> copy ResourceHacker.exe ResourceHackerTemp.exe
            1 file(s) copied.
    
    [prompt]> .\ResourceHackerTemp.exe -open .\ResourceHacker.exe -save .\ResourceHacker.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con
    
    [prompt]>
    
    [28 Jan 2019, 21:19:29]
    
    Current Directory:
    e:\Work\Dev\StackOverflow\q000284258
    
    Commandline:
    .\ResourceHackerTemp.exe  -open .\ResourceHacker.exe -save .\ResourceHacker.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con
    
    Open    : e:\Work\Dev\StackOverflow\q000284258\ResourceHacker.exe
    Save    : e:\Work\Dev\StackOverflow\q000284258\ResourceHacker.exe
    Resource: e:\Work\Dev\StackOverflow\q000284258\sample.res
    
      Modified: VERSIONINFO,1,1033
    
    Success!
    
    [prompt]> del /f /q ResourceHackerTemp.*
    
    [prompt]> dir
     Volume in drive E is Work
     Volume Serial Number is 3655-6FED
    
     Directory of e:\Work\Dev\StackOverflow\q000284258
    
    2019-01-28  21:20    <DIR>          .
    2019-01-28  21:20    <DIR>          ..
    2016-11-03  09:17         5,414,400 cmake.exe
    2019-01-03  02:06         5,479,424 ResourceHacker.exe
    2019-01-28  21:17               551 ResourceHacker.ini
    2019-01-28  20:05             1,156 sample.rc
    2019-01-28  20:59               792 sample.res
                   5 File(s)     10,896,323 bytes
                   2 Dir(s)  103,723,253,760 bytes free
    

    正如所见,我不得不小技巧 (gainarie) 因为我不能(至少我认为我不能)修改 .exe 而正在使用中。

    4。测试

    这是一个可选阶段,以确保:

    • 可执行文件仍然可以工作(它们没有在过程中搞砸)
    • 资源已添加/更新
    [prompt]> .\cmake --help >nul 2>&1
    
    [prompt]> echo %errorlevel%
    0
    
    [prompt]> .\ResourceHacker.exe -help
    
    [prompt]>
    
    ==================================
    Resource Hacker Command Line Help:
    ==================================
    
    -help             : displays these abbreviated help instructions.
    -help commandline : displays help for single commandline instructions
    -help script      : displays help for script file instructions.
    
    
    
    
    [prompt]> echo %errorlevel%
    0
    

    还有他们的详情

    【讨论】:

    • @ColonelPanic:谢谢!
    • 非常好的答案。不幸的是,ResourceHacker 不再维护,并且在尝试编辑大型 EXE 文件时内存不足(尝试打开 3GB exe 时出现错误)。
    • @LewsTherin:最新版本(也被答案使用)来自 2019/01,所以我想说它维护得很好。问题是它是32bit。您可以联系作者索要 64bit 版本(我认为既然他们已经有了代码,为 64bit 构建它并不难)。
    【解决方案7】:

    有这个工具ChangeVersion[1]

    功能列表(来自网站):

    • 命令行界面
    • 支持 .EXE、.DLL 和 .RES 文件
    • 根据版本掩码更新 FileVersion 和 ProductVersion
    • 添加/更改/删除版本密钥字符串
    • 调整文件标志(调试、特殊、私有等)
    • 更新项目文件 (.bdsproj | .bpr | .bpk | .dproj)
    • 添加/更改主应用程序图标
    • 使用带有配置的ini文件
    • Windows Vista 支持(需要提升)
    • 易于集成到持续构建环境中

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


    [1] 链接已失效。 download.cnet.com好像有镜像版。

    【讨论】:

    • @Gareth 我添加了一个镜像链接。另一方面,我怀疑这个答案在没有任何工作参考的情况下是否有任何价值。
    • 第二个链接导致工具过期"Change Version v2012.9.6.0 - (C)2007-2012 The-Software-Box.com This trial version has expired"
    • 在命令行中运行时显示“更改版本 v2012.9.6.0 - (C)2007-2012 The-Software-Box.com 此试用版已过期”
    【解决方案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 <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
    

    【讨论】:

    • 只是好奇;每次更改对话框或修改项目中的任何资源时,您是如何阻止 Windows 覆盖您的 .rc 文件的?到目前为止,我已经看过几篇这样的文章,如果您不必再次更改会导致 IDE 自动生成的资源,它似乎会起作用。
    • @shawn1874 -- 在自动添加的resource.h 文件中包含#include &lt;windows.h&gt; 行。该文件不会重新生成(注意在 .rc 文件的顶部,它表明它是生成的代码,并且可以在设计器中进行修改)。
    • @CJBS 没有回答这个问题。尽管这可能有效,但它并没有解释发布的答案可能如何工作。在发布的答案中,user3016543 将 version.h 直接包含在 .rc 文件中。有几种方法可以处理 .rc 文件的覆盖,我知道该怎么做。我只是质疑这个特定答案的显示方式,因为它看起来不适合我。
    • 我猜这个方法对他有用,因为有问题的组件没有对话框组件,所以文件不会经常或永远不会重新生成。但是,在具有 MFC 对话框资源的 Windows 应用程序中,情况并非如此。
    • 感谢您提醒我第一次在 WinBatch Extender SDK 附带的资源文件中看到的一种技术。我已经很久没有需要它了,以至于我忘记了大部分细节。你的解释让一切都回来了。
    【解决方案9】:

    verpatch 不错,但不处理 unicode 字符...
    试试ResourceLib

    【讨论】:

      【解决方案10】:

      @DannyBeckett 的above 回答对我帮助很大,

      我将以下内容放在批处理文件中,并将其放在 ResourceHacker.exe 和我工作的 EXE 所在的同一文件夹中,并且效果很好。 [您可以根据需要对其进行编辑]

          @echo off
          :start1
          set /p newVersion=Enter version number [?.?.?.?]:
          if "%newVersion%" == "" goto start1
          :start2
          set /p file=Enter EXE name [for 'program.exe' enter 'program']:
          if "%file%" == "" goto start2
          for /f "tokens=1-4 delims=." %%a in ('echo %newVersion%') do (set ResVersion=%%a,%%b,%%c,%%d)
          (
          echo:VS_VERSION_INFO VERSIONINFO
          echo:    FILEVERSION    %ResVersion%
          echo:    PRODUCTVERSION %ResVersion%
          echo:{
          echo:    BLOCK "StringFileInfo"
          echo:    {
          echo:        BLOCK "040904b0"
          echo:        {
          echo:            VALUE "CompanyName",        "MyCompany\0"
          echo:            VALUE "FileDescription",    "TestFile\0"
          echo:            VALUE "FileVersion",        "%newVersion%\0"
          echo:            VALUE "LegalCopyright",     "COPYRIGHT © 2019 MyCompany\0"
          echo:            VALUE "OriginalFilename",   "%file%.exe\0"
          echo:            VALUE "ProductName",        "Test\0"
          echo:            VALUE "ProductVersion",     "%newVersion%\0"
          echo:        }
          echo:    }
          echo:    BLOCK "VarFileInfo"
          echo:    {
          echo:        VALUE "Translation", 0x409, 1200
          echo:    }
          echo:}
          ) >Resources.rc     &&      echo setting Resources.rc
          ResourceHacker.exe -open resources.rc -save resources.res -action compile -log CONSOLE
          ResourceHacker -open "%file%.exe" -save "%file%Res.exe" -action addoverwrite -resource "resources.res"  -log CONSOLE
          ResourceHacker.exe -open "%file%Res.exe" -save "%file%Ico.exe" -action addskip -res "%file%.ico" -mask ICONGROUP,MAINICON, -log CONSOLE
          xCopy /y /f "%file%Ico.exe" "%file%.exe"
          echo.
          echo.
          echo your compiled file %file%.exe is ready
          pause
      

      [作为旁注,我也使用资源黑客来编译 res 文件,而不是 GoRC]

      【讨论】:

        【解决方案11】:

        聚会有点晚了,但由于我一直在寻找它(我可能需要在某个时候再次找到它),所以我在 VS2013 Express 下的 C++ DLL 中包含版本、公司名称等:

        1. 如前所述,创建并编辑了一个 dllproj.rc 文件。
        2. 在 DLL 中添加了“rc.exe dllproj.rc”行作为预构建步骤 项目。
        3. 将 dllproj.res 添加到项目的资源文件夹中。

        希望这会有所帮助!

        【讨论】:

          【解决方案12】:

          有来自 Heaventools Software 的 Resource Tuner Console

          Resource Tuner Console 是一个命令行工具,使开发人员能够自动编辑大量 Windows 32 位和 64 位可执行文件中的不同资源类型。

          详情请参阅Changing Version Variables And Updating The Version Information 页面。

          【讨论】:

            【解决方案13】:

            您实际上可以尝试从Download Link 下载 FVIE 并尝试编辑任何 .exe 文件的信息。

            (OR)

            您可以从Download Link 下载StampVer – Win32 版本资源标记 这对 windows .exe 文件非常有用。

            (OR)

            您可以使用名为 RCEDIT 的命令工具。从Github Source link 下载,然后使用 Visual Studio 2015 构建,然后您有特定的命令来更改 .exe 文件的版本。有关各种可用命令,请参阅 Docs link

            【讨论】:

              【解决方案14】:

              这是我见过的最好的工作工具,可以完全控制所有文件资源,包括 VersionInfo。

              请参阅:ResourceEditorAnders Melander

              【讨论】:

              • 资源编辑器(0 字节)的下载已损坏。
              【解决方案15】:

              我想组合一个更紧凑的版本

              • 第一步:创建资源
              • 第 2 步:下载 ResourceHacker
              • 第三步:将res编译成rc文件
              • 第四步:运行脚本:修改exe

              第一步:创建resource

              准备资源文件:resource.rc

              VS_VERSION_INFO VERSIONINFO
                  FILEVERSION    0,0,0,0
                  PRODUCTVERSION 0,0,0,0
              {
                  BLOCK "StringFileInfo"
                  {
                      BLOCK "040904b0"
                      {
                          VALUE "CompanyName",        "\0"
                          VALUE "FileDescription",    "\0"
                          VALUE "FileVersion",        "0.0.0.0\0"
                          VALUE "LegalCopyright",     "© 2020 Carson. All rights reserved.\0"
                          VALUE "OriginalFilename",   ".exe\0"
                          VALUE "ProductName",        "\0"
                          VALUE "ProductVersion",     "0.0.0.0\0"
                      }
                  }
                  BLOCK "VarFileInfo"
                  {
                      VALUE "Translation", 0x0409, 1200
                  }
              }
              

              第 2 步:下载 ResourceHacker

              有两种方法可以得到它。

              1. Chocolatey下载:
                • install choco
                • choco install reshack -y
                • 安装后,可能需要添加环境变量。
              2. ResourceHacker Website

              第三步:将res编译成rc文件

              ResourceHacker.exe -open resources.rc -save resources.res ^
               -action compile -log CONSOLE
              

              第四步:运行脚本:修改exe

              SET INPUT_EXE=app.exe
              SET OUTPUT_EXE=app.exe
              ResourceHacker.exe -open %OUTPUT_EXE% -save %OUTPUT_EXE% ^
               -resource resources.res ^
               -action addoverwrite ^
               -mask VersionInf ^
               -log CONSOLE
              

              摘要脚本

              SET INPUT_EXE=app.exe
              SET OUTPUT_EXE=app.exe
              
              ResourceHacker.exe -open resources.rc -save resources.res ^
               -action compile -log CONSOLE
              
              ResourceHacker.exe -open %OUTPUT_EXE% -save %OUTPUT_EXE% ^
               -resource resources.res ^
               -action addoverwrite ^
               -mask VersionInf ^
               -log CONSOLE
              

              参考

              【讨论】:

                猜你喜欢
                • 2011-12-09
                • 1970-01-01
                • 1970-01-01
                • 2018-03-07
                • 1970-01-01
                • 1970-01-01
                • 2011-02-06
                • 2011-10-05
                • 1970-01-01
                相关资源
                最近更新 更多