Как установить информацию о версии для существующего .exe,.dll?
В рамках нашего процесса сборки мне нужно установить информацию о версии для всех наших скомпилированных двоичных файлов. Некоторые из двоичных файлов уже имеют информацию о версии (добавляется во время компиляции), а некоторые нет.
Я хочу иметь возможность использовать следующую информацию:
- Название компании
- Уведомление об авторских правах
- Название продукта
- Описание продукта
- Версия файла
- Версия продукта
Все эти атрибуты задаются конструкцией script и должны применяться после компиляции. Это стандартные двоичные файлы (не сборки), скомпилированные с С++ Builder 2007.
Как я могу это сделать?
Ответы
Ответ 1
Хотя это не пакетный процесс, Visual Studio также может добавлять/редактировать файловые ресурсы.
Просто используйте File- > Open- > File в .EXE или .DLL. Это удобно для исправления информации о версии после сборки или добавления ее в файлы, для которых не существует этих ресурсов.
Ответ 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
)
Затем используйте Resource Hacker в режиме CLI, чтобы добавить его в существующий .exe
:
ResHacker -add MyProg.exe, MyProg.exe, Resources.res,,,
Что это!
Ответ 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, который переносит его из JavaScript и Grunt задачи, если вы используете Grunt.
Ответ 5
Как насчет этого?
verpatch /va foodll.dll %VERSION% %FILEDESCR% %COMPINFO% %PRODINFO% %BUILDINFO%
Доступно здесь с полными источниками.
Ответ 6
Есть этот инструмент ChangeVersion [1]
Список функций (с веб-сайта):
- интерфейс командной строки
- поддержка файлов .EXE,.DLL и .RES
- обновить FileVersion и ProductVersion на основе маски версии
- добавить/изменить/удалить строки ключей версии
- настроить флаги файлов (отладочные, специальные, частные и т.д.)
- обновить файлы проекта (.bdsproj |.bpr |.bpk |.dproj)
- добавить/изменить значок основного приложения
- использовать файл ini с конфигурацией
- Поддержка Windows Vista (требуется высота)
- легко интегрируется в непрерывную среду сборки
Полное раскрытие: я знаю парня, который написал этот инструмент, я работал с ним. Но это также означает, что я знаю, что он делает качественное программное обеспечение;)
[1] ссылка мертва. Кажется, что зеркальная версия находится в download.cnet.com.
Ответ 7
verpatch хорош, но не обрабатывает символы юникода...
попробуй 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 [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
Ответ 9
Существует Консоль Resource Tuner из программного обеспечения Heaventools.
Консоль Resource Tuner Console - это инструмент командной строки, который позволяет разработчикам автоматизировать редактирование различных типов ресурсов в большом количестве 32- и 64-разрядных исполняемых файлов Windows.
Подробнее см. Изменение версий версий и обновление информации о версии.
Ответ 10
Немного поздно для вечеринки, но так как я искал ее (и мне, возможно, придется ее снова найти), вот что я сделал, чтобы включить версию, название компании и т.д. в мою С++ DLL под VS2013 Express:
- Создан и отредактирован файл dllproj.rc, как указано ранее.
- Добавлена строка "rc.exe dllproj.rc" в качестве этапа предварительной сборки в DLL
проект.
- Добавлен dllproj.res в папку ресурса для проекта.
Надеюсь, это поможет!
Ответ 11
Это лучший инструмент, который я видел для задания, позволяет полностью контролировать все файловые ресурсы, включая VersionInfo.
Смотрите: ResourceEditor Андерс Меландер.
Ответ 12
Вы можете попробовать загрузить FVIE из Download Link и отредактировать информацию для любого файла .exe.
(ИЛИ ЖЕ)
Вы можете скачать StampVer - Win32 Version Resource Stamping по ссылке для скачивания, которая действительно полезна для файлов Windows.exe.
(ИЛИ ЖЕ)
Вы можете использовать командный инструмент под названием RCEDIT. Загрузите с Github Source ссылку и затем выполните сборку с использованием Visual Studio 2015, а затем у вас есть конкретные команды для изменения версии файлов .exe. Смотрите ссылку Документы для различных доступных команд.
Ответ 13
Хакер ресурсов
Я скачал последнюю версию (5.1.7) с [AngusJ]: Resource Hacker. Вся необходимая информация может быть найдена на этой странице (параметры командной строки, сценарии,...). В следующем пошаговом руководстве я оперирую двумя исполняемыми файлами (лабораторными крысами), которые (по понятным причинам) я скопировал в мой cwd:
- ResourceHacker.exe: я подумал, что было бы интересно работать над собой
- cmake.exe: случайный исполняемый файл без установленной информации о версии (часть установки v3.6.3 на мою машину)
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. Ресурсы
Файлы ресурсов - это текстовые файлы, которые содержат ресурсы. Ресурс (упрощенный) имеет:
Для получения более подробной информации проверьте [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
). Поскольку .exes уже скопированы, я собираюсь редактировать их ресурсы на месте.
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]()
Ответ 14
Существует много инструментов для reverse engineering
таких как Interactive Disassembler
где вы можете изменить много информации, чтобы увидеть больше инструментов: https://www.apriorit.com/dev-blog/366-software-reverse-engineering-tools. и попробуйте эти инструменты https://alternativeto.net/software/xn-resource-editor/