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

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

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

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

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

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

Ответы [ 14 ]

49 голосов
/ 15 июля 2014

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

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

30 голосов
/ 17 сентября 2013

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

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

Вот и все!

22 голосов
/ 30 апреля 2009

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

16 голосов
/ 04 февраля 2016

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.

14 голосов
/ 21 января 2010

Как насчет этого?

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

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

10 голосов
/ 12 ноября 2008

Есть этот инструмент ChangeVersion [1]

Список функций (с сайта):

  • интерфейс командной строки
  • поддержка файлов .EXE, .DLL и .RES
  • обновление FileVersion и ProductVersion на основе маски версии
  • добавить / изменить / удалить строки ключей версии
  • настроить флажки файлов (отладка, специальные, частные и т. Д.)
  • обновить файлы проекта (.bdsproj | .bpr | .bpk | .dproj)
  • добавить / изменить значок основного приложения
  • использовать INI-файл с конфигурацией
  • Поддержка Windows Vista (требуется повышение прав)
  • легко интегрируется в среду непрерывной сборки

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


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

8 голосов
/ 19 января 2011

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

5 голосов
/ 16 февраля 2016

Я делаю это без дополнительного инструмента. Я только что добавил следующие файлы в свой проект приложения 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
2 голосов
/ 28 января 2019

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

(OR)

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

(OR)

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

2 голосов
/ 17 сентября 2015

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

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

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

...