Как установить информацию о версии для существующего .exe, .dll? - PullRequest
96 голосов
/ 12 ноября 2008

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

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

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

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

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

Ответы [ 14 ]

2 голосов
/ 10 июля 2009

Существует Консоль тюнера ресурсов от программного обеспечения Heaventools.

Resource Tuner Console - инструмент командной строки, который позволяет разработчикам автоматизировать редактирование различных типов ресурсов в большом количестве 32- и 64-разрядных исполняемых файлов Windows.

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

1 голос
/ 28 января 2019

Хакер ресурсов

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

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

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

1. Настройка

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

e:\Work\Dev\StackOverflow\q000284258>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

e:\Work\Dev\StackOverflow\q000284258>set PATH=%PATH%;c:\Install\x64\CMake\CMake\3.6.3\bin

e:\Work\Dev\StackOverflow\q000284258>.\cmake --help >nul 2>&1

e:\Work\Dev\StackOverflow\q000284258>echo %errorlevel%
0

e:\Work\Dev\StackOverflow\q000284258>.\ResourceHacker.exe -help

e:\Work\Dev\StackOverflow\q000284258>

==================================
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.




e:\Work\Dev\StackOverflow\q000284258>echo %errorlevel%
0

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

Img0-Initial

2. Ресурсы

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

  • Имя
  • Тип
  • Value

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

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

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

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

Далее, чтобы ресурс был встроен в .exe ( .dll , ...), он должен быть скомпилирован в двоичный файл форма, которая соответствует формату PE . Опять же, есть много инструментов, которые могут достичь этого, но, как вы, наверное, догадались, я собираюсь придерживаться Resource Hacker (-action compile).

e:\Work\Dev\StackOverflow\q000284258>:: Extract the resources into a file
e:\Work\Dev\StackOverflow\q000284258>.\ResourceHacker.exe -open .\ResourceHacker.exe -save .\sample.rc -action extract -mask VersionInfo,, -log con

e:\Work\Dev\StackOverflow\q000284258>

[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!

e:\Work\Dev\StackOverflow\q000284258>:: Modify the resource file and set our own values
e:\Work\Dev\StackOverflow\q000284258>
e:\Work\Dev\StackOverflow\q000284258>:: Compile the resource file
e:\Work\Dev\StackOverflow\q000284258>.\ResourceHacker.exe -open .\sample.rc -save .\sample.res -action compile -log con

e:\Work\Dev\StackOverflow\q000284258>

[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!

e:\Work\Dev\StackOverflow\q000284258>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 s уже скопированы, я собираюсь редактировать их ресурсы на месте.

e:\Work\Dev\StackOverflow\q000284258>.\ResourceHacker.exe -open .\cmake.exe -save .\cmake.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con

e:\Work\Dev\StackOverflow\q000284258>

[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!

e:\Work\Dev\StackOverflow\q000284258>copy ResourceHacker.exe ResourceHackerTemp.exe
        1 file(s) copied.

e:\Work\Dev\StackOverflow\q000284258>.\ResourceHackerTemp.exe -open .\ResourceHacker.exe -save .\ResourceHacker.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con

e:\Work\Dev\StackOverflow\q000284258>

[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!

e:\Work\Dev\StackOverflow\q000284258>del /f /q ResourceHackerTemp.*

e:\Work\Dev\StackOverflow\q000284258>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. Тест

Это необязательный этап, чтобы убедиться, что:

  • Исполняемые файлы все еще работают (они не были испорчены в процессе)
  • Ресурсы добавлены / обновлены
e:\Work\Dev\StackOverflow\q000284258>.\cmake --help >nul 2>&1

e:\Work\Dev\StackOverflow\q000284258>echo %errorlevel%
0

e:\Work\Dev\StackOverflow\q000284258>.\ResourceHacker.exe -help

e:\Work\Dev\StackOverflow\q000284258>

==================================
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.




e:\Work\Dev\StackOverflow\q000284258>echo %errorlevel%
0

И их Детали :

Img1-Final

1 голос
/ 21 мая 2014

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

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

0 голосов
/ 28 января 2019

Существует множество инструментов для reverse engineering, таких как Interactive Disassembler, где вы можете изменить много информации, чтобы увидеть больше инструментов: https://www.apriorit.com/dev-blog/366-software-reverse-engineering-tools. и попробовать эти инструменты https://alternativeto.net/software/xn-resource-editor/

...