Как мне установить информацию о версии для существующего .exe, .dll?

В рамках нашего процесса сборки мне нужно установить информацию о версии для всех наших скомпилированных двоичных файлов. Некоторые из двоичных файлов уже имеют информацию о версии (добавленную во время компиляции), а некоторые нет.

Я хочу иметь возможность применить следующую информацию:

  • Название организации
  • Уведомление об авторских правах
  • наименование товара
  • описание продукта
  • Версия файла
  • Версия продукта

Все эти атрибуты указываются в сценарии сборки и должны применяться после компиляции. Это стандартные двоичные файлы (не сборки), скомпилированные с помощью C++ Builder 2007.

Как я могу это сделать?

для чего использовать ResourceHacker? как именно ставится задача? в чем проблема использовать функцию UpdateResource, если версия задачи обновления в существующем pe

RbMm 26.01.2019 13:06

Попробуйте это: альтернатива.net/software/xn-resource-editor, я думаю, есть инструменты обратной инженерии, которые делают это

i_thamary 28.01.2019 19:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
120
2
165 789
15

Ответы 15

Есть этот инструмент Изменить версию[1]

Список возможностей (с сайта):

  • command line interface
  • support for .EXE, .DLL and .RES files
  • update FileVersion and ProductVersion based on a version mask
  • add/change/remove version key strings
  • adjust file flags (debug, special, private etc)
  • update project files ( .bdsproj | .bpr | .bpk | .dproj )
  • add/change main application icon
  • use ini file with configuration
  • Windows Vista support (needs elevation)
  • easy to integrate into a continuous build environment

Полное раскрытие информации: я знаю парня, который написал этот инструмент, я работал с ним. Но это также означает, что я знаю, что он делает качественный софт;)


[1] ссылка мертвая. Похоже, есть зеркальная версия на download.cnet.com.

@Gareth Я добавил зеркальную ссылку. С другой стороны, я сомневаюсь, что этот ответ имеет какую-либо ценность без какой-либо рабочей ссылки.

Wolf 18.09.2015 11:17

Вторая ссылка приводит к просроченному инструменту "Change Version v2012.9.6.0 - (C)2007-2012 The-Software-Box.com This trial version has expired".

Preet Sangha 04.03.2016 07:42

При запуске в командной строке появляется сообщение «Изменить версию v2012.9.6.0 - (C) 2007-2012 The-Software-Box.com Срок действия этой пробной версии истек»

NoName 15.10.2018 06:51

Или вы можете воспользоваться бесплатным программным обеспечением StampVer для файлов Win32 exe / dll. Это изменит только версию файла и продукта, если у них уже есть ресурс версии. Он не может добавить ресурс версии, если он не существует.

Есть Консоль Resource Tuner от Heaventools Software.

Resource Tuner Console is a command-line tool that enables developers to automate editing of different resource types in large numbers of Windows 32- and 64-bit executable files.

См. Более подробную информацию на странице Изменение переменных версии и обновление информации о версии.

Что насчет этого?

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

Доступен здесь с полными исходниками.

Verpatch, похоже, создал для меня ресурс с плохой версией продукта (с использованием опции /va /pv). Версия корректно отображалась в проводнике Windows, но последний символ отсутствовал при извлечении в коде с помощью VerQueryValue. Чтобы исправить плохой ресурс, я сделал следующее: (1) Загрузите DLL в Resource Hacker. (2) Просмотрите ресурс версии. (3) Скомпилируйте (измените что-нибудь, а затем верните обратно, чтобы активировать кнопку). (4) Сохранить.

dan-gph 23.04.2013 06:11

verpatch отлично работает как для x64, так и для x86-версий моих библиотек DLL в моем dev-боксе, однако в проекте сборки apveyor он работает только для x64 и не делает абсолютно ничего для dll x86 - никаких ошибок тоже! какие-нибудь намеки на то, что может случиться? В журнале appveyor я вижу, что команда verpatch выполняется, ошибок нет, dll каким-то образом не заменяется, и, в конце концов, у нее нет штампа версии; для x64 все работает нормально во всех ситуациях. какие-нибудь подсказки, пожалуйста?

Ovi 24.06.2017 10:59

@ Ови-Ван Кеноби: Я не знал, что такое конвейер, но, судя по вашему описанию, мне это больше похоже на проблему с конвейером. В худшем случае, если это возможно, приготовьтесь к некоторой отладке в среде apveyor? ...

filofel 26.06.2017 10:32

verpatch хорош, но не обрабатывает символы Юникода ...
попробуйте ResourceLib

В отличие от многих других ответов, это решение использует полностью бесплатное программное обеспечение.

Во-первых, создайте файл с именем 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

(see my comment below for a mirror of GoRC.exe)

Затем используйте Ресурсный хакер в режиме CLI, чтобы добавить его к существующему .exe:

ResHacker -add MyProg.exe, MyProg.exe, Resources.res,,,

Вот и все!

@CharlesB Я сам это заметил, но это правильная ссылка. Похоже, кто-то забыл заплатить своему хостингу! Вот двоичный файл, я отразил его в своей общедоступной учетной записи Assembla: Assembla.com/code/danny-beckett/subversion/nodes/13/GoRC.exe

Danny Beckett 18.09.2013 00:17

Вы также можете использовать Microsoft Компилятор ресурсов вместо GoRC. Он доступен с Windows SDK.

Holistic Developer 20.12.2014 00:58

Поднимите вверх для Resource Hacker, я использовал его, основываясь на этом ответе, и это блестящая, отличная программа. (никакого сходства с программой или производителем ;-)

user2109254 25.06.2017 07:48

@UweKeim Я давно этим не пользовался, но уверен, что они необходимы.

Danny Beckett 02.12.2017 11:52

Похоже, командная строка немного изменилась: 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

Yusuf Tarık Günaydın 26.06.2018 15:32

Это лучший инструмент, который я видел для этой работы, он позволяет полностью контролировать все файловые ресурсы, включая VersionInfo.

См .: ResourceEditor автора Андерс Меландер.

Загрузка редактора ресурсов (0 байт) прервана.

Jack 07.03.2018 00:11

Хотя это не пакетный процесс, Visual Studio также может добавлять / редактировать файловые ресурсы.

Просто используйте File-> Open-> File в .EXE или .DLL. Это удобно для исправления информации о версии после сборки или добавления ее в файлы, в которых изначально нет этих ресурсов.

Когда я попробовал, это сработало отлично. Для файла, в котором полностью отсутствует информация о версии: после открытия библиотеки DLL в Visual Studio перейдите в меню «Правка»> «Добавить ресурс»> «Версия» и нажмите «Создать». Затем на новой вкладке «Версия» измените ВЕРСИЯ ФАЙЛА и ПРОДУКЦИЮ, Название компании и т. д. Сохраните файлы, и все готово!

twasbrillig 19.11.2014 01:09

@UweBaemayr. ответ, который вы процитировали, я хочу спросить о том же, что и мы можем автоматизировать его, поскольку именно я делаю ту же сборку поста, и я хочу ее автоматизировать. Но как ?

SteveScm 03.12.2014 12:07

Для моей старой Delphi win32 dll это не работает. Несмотря на то, что информация о dll изменена правильно, при проверке работоспособности вы понимаете, что она повреждена.

sthiers 05.08.2016 11:34

Пробовал это (добавить информацию о версии) в Windows 8, VS 2015, и все хорошо в проводнике Windows, за исключением того, что исполняемый файл больше не запускается.

Liviu 03.04.2017 13:38

Немного поздно для вечеринки, но поскольку я искал его (и мне, возможно, когда-нибудь понадобится найти его снова), вот что я сделал, чтобы включить версию, название компании и т. д. В мою C++ DLL в VS2013 Express:

  1. Создал и отредактировал файл dllproj.rc, как указано ранее.
  2. Добавлена ​​строка «rc.exe dllproj.rc» в качестве шага перед сборкой в ​​DLL. проект.
  3. В папку ресурсов проекта добавлен файл dllproj.res.

Надеюсь это поможет!

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.

обратите внимание, что rcedit может изменять только существующие ресурсы, но не вставлять новые.

Bevan Collins 07.02.2017 04:58

Не работает с 7zip sfx-архивами: / Просто вырезает часть архива 7zip.

Mgamerz 15.04.2018 00:20

попробовал это, продолжает давать невозможность загрузить файл, когда находится в том же каталоге, и кажется, что инструмент может зависеть от конфигурации хоста

Arijoon 31.08.2018 00:39

Работает с заглушкой 7zS.sfx, первой частью с VERSIONINFO внутри, которую вы используете для объединения самораспаковывающегося архива. Вручную вы также можете переименовать 7zS.sfx в 7zS.exe и отредактировать его в Visual Studio, но поскольку номер версии меняется для каждой сборки, вы предпочитаете пакетный файл с операторами rcedit внутри, чтобы установить его.

AndresRohrAtlasInformatik 19.11.2018 10:16

этот инструмент очень неприятен, пожалуйста, обратите внимание на эту ошибку, прежде чем применять ее к своим двоичным файлам: github.com/electron/rcedit/issues/51

Brun 10.12.2019 21:58

Я делаю это без дополнительных инструментов. Я только что добавил следующие файлы в свой проект приложения Win32.

Один файл заголовка, который определяет некоторые константы, которые мы можем повторно использовать в нашем файле ресурсов и даже в программном коде. Нам нужно поддерживать только один файл. Благодаря команде Qt, которая показала мне, как это сделать в проекте Qt, теперь это работает и в моем приложении Win32.

---- [версия.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 [email protected]"
#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 03.08.2017 04:38

@ shawn1874 - включить строку #include <windows.h> в файл resource.h, который добавляется автоматически. Этот файл не создается повторно (обратите внимание, что в верхней части файла .rc он указывает, что это сгенерированный код, и его можно изменить в дизайнере).

CJBS 12.04.2018 02:27

@CJBS, который не отвечает на вопрос. Хотя это может сработать, это не объясняет, как может работать опубликованный ответ. В опубликованном ответе user3016543 включает version.h непосредственно в файл .rc. Есть несколько способов справиться с перезаписью файла .rc, и я знаю, как это сделать. Я всего лишь сомневаюсь в том, как показан этот конкретный ответ, потому что он мне не кажется правильным.

shawn1874 07.06.2018 02:25

Я предполагаю, что этот метод работает для него, потому что рассматриваемый компонент не имеет компонентов диалога, поэтому файл не восстанавливается часто и никогда. Однако в приложении Windows с диалоговыми ресурсами MFC это не так.

shawn1874 07.06.2018 02:32

Спасибо, что напомнили мне о методе, который я впервые увидел в действии в файле ресурсов, поставляемом с WinBatch Extender SDK. Я так давно не нуждался в нем, что забыл большинство деталей. Ваше объяснение все вернуло.

David A. Gray 05.03.2019 04:02

Вы можете попробовать загрузить FVIE из Ссылка для скачивания и попробовать отредактировать информацию для любого файла .exe.

(ИЛИ ЖЕ)

Вы можете скачать StampVer - штамповка ресурсов версии Win32 с Ссылка для скачивания что действительно полезно для файлов Windows .exe.

(ИЛИ ЖЕ)

Вы можете использовать командный инструмент под названием RCEDIT. Загрузите из Ссылка на исходный код Github, а затем выполните сборку с помощью Visual Studio 2015, а затем у вас есть специальные команды для изменения версии файлов .exe. См. Ссылка на документы для различных доступных команд.

Есть несколько инструментов, упомянутых во многих отличных ответах, я собираюсь выбрать один.

Ресурсный хакер

Я скачал последнюю версию (5.1.7) с сайта [AngusJ]: хакер ресурсов. На этой странице можно найти всю необходимую информацию (параметры командной строки, сценарии, ...). В следующем пошаговом руководстве я буду работать с двумя исполняемыми файлами (лабораторными крысами), которые (по понятным причинам) я скопировал в свой cwd:

  • ResourceHacker.exe: Думал, будет интересно поработать над собой
  • cmake.exe: произвольный исполняемый файл без установленного Информация о версии (часть установки v3.6.3 на моем компьютере)

Прежде чем продолжить, я хочу упомянуть, что ResourceHacker имеет забавный вывод терминала и следующие фрагменты копирования / вставки могут вызвать некоторую путаницу.

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

Как видно, с исполняемыми файлами все в порядке, они работают нормально, и вот как выглядит их Подробности (о котором мы заботимся):

Img0-Initial

2. Ресурсы

Файлы ресурсов - это текстовые файлы, содержащие ресурсы. Ресурс (упрощенный) содержит:

  • Имя
  • Тип
  • Ценить

Для получения дополнительной информации проверьте [MS.Docs]: О файлах ресурсов. Существует множество инструментов (упомянутых в существующих ответах), которые облегчают редактирование файлов ресурсов, например:

  • VStudio создает значение по умолчанию при запуске нового проекта
  • Такой файл можно создать вручную
  • Но, поскольку речь идет о Ресурсный хакер, и:

    • Он может извлекать ресурсы из существующего исполняемого файла
    • В него встроены ресурсы (как показано на предыдущем рисунке).

    Я собираюсь использовать его на этом этапе (-action extract)

Затем, чтобы ресурс был встроен в .исполняемый файл (.dll, ...), он должен быть составлен в двоичной форме, которая соответствует формату PE. Опять же, есть много инструментов, которые могут добиться этого, но, как вы, наверное, догадались, я буду придерживаться Ресурсный хакер (-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. Встроить

Это также будет выполнять Ресурсный хакер (-action addoverwrite). Поскольку .исполняемый файл уже скопированы, я собираюсь редактировать их ресурсы на месте.

[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), поскольку я не могу (по крайней мере, я не думаю, что могу) изменять .исполняемый файл во время использования.

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

И их Подробности:

Img1-Final

@ColonelPanic: Спасибо!

CristiFati 31.01.2019 19:49

Очень хороший ответ. К сожалению, ResourceHacker больше не поддерживается, и ему не хватает памяти при попытке отредактировать большой EXE-файл (у меня возникла ошибка при попытке открыть EXE-файл размером 3 ГБ).

Lews Therin 23.07.2019 23:04

@LewsTherin: Последняя версия (также использованная в ответе) от 2019/01, поэтому я бы сказал, что она поддерживается. Проблема в том, что это 32 бит. Вы можете связаться с авторами и попросить версию 64 бит (я предполагаю, что, поскольку у них уже есть код, собрать его для 64 бит не составит труда).

CristiFati 23.07.2019 23:55

ответ над от @DannyBeckett мне очень помог,

Я помещаю следующее в пакетный файл и помещаю его в ту же папку, где находится 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]

Хочу собрать более компактную версию

  • Шаг 1: создайте ресурс
  • Шаг 2: Загрузите ResourceHacker
  • Шаг 3: Скомпилируйте res в файлы rc
  • Шаг 4: Запустите сценарий: измените exe

Шаг 1: создайте 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. Скачать с Шоколадный:
    • установить choco
    • choco install reshack -y
    • После установки вам может потребоваться добавить переменные среды.
  2. Сайт ResourceHacker

Шаг 3. Скомпилируйте res в файлы rc.

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

Шаг 4: Запустите сценарий: измените 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

Справка

Другие вопросы по теме