it-swarm.com.de

Wie stelle ich die Versionsinformationen für eine vorhandene .exe, .dll ein?

Im Rahmen unseres Erstellungsprozesses muss ich die Versionsinformationen für alle unsere kompilierten Binärdateien festlegen. Einige der Binärdateien enthalten bereits Versionsinformationen (zur Kompilierzeit hinzugefügt), andere nicht. 

Ich möchte folgende Informationen anwenden können:

  • Name der Firma 
  • Urheberrechtshinweis
  • Produktname 
  • Produktbeschreibung
  • Dateiversion 
  • Produktversion

Alle diese Attribute werden vom Build-Skript angegeben und müssen nach dem Kompilieren angewendet werden. Dies sind Standard-Binärdateien (keine Assemblys), die mit C++ Builder 2007 kompiliert wurden.

Wie kann ich das machen?

92
Carl

Während es sich nicht um einen Stapelvorgang handelt, kann Visual Studio auch Dateiressourcen hinzufügen/bearbeiten. 

Verwenden Sie einfach File-> Open-> File für die .EXE oder .DLL. Dies ist praktisch, wenn Sie Versionsinformationen nach dem Build korrigieren oder zu Dateien hinzufügen möchten, für die diese Ressourcen nicht vorhanden sind.

49
UweBaemayr

Im Gegensatz zu vielen anderen Antworten verwendet diese Lösung vollständig freie Software.

Erstellen Sie zunächst eine Datei mit dem Namen Resources.rc wie folgt:

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
    }
}

Verwenden Sie anschließend GoRC , um es in eine .res-Datei zu kompilieren.

GoRC /fo Resources.res Resources.rc

(siehe meinen Kommentar unten für einen Spiegel von GoRC.exe)

Verwenden Sie dann Resource Hacker im CLI-Modus, um ihn einem vorhandenen .exe hinzuzufügen:

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

Das ist es!

29
Danny Beckett

Oder Sie können die Freeware StampVer für Win32 Exe/DLL-Dateien ausprobieren.
.__ Die Datei- und Produktversion wird jedoch nur geändert, wenn sie bereits über eine Versionsressource verfügen. Es kann keine Versionsressource hinzugefügt werden, wenn keine vorhanden ist.

22
Ryan

rcedit ist relativ neu und funktioniert gut von der Befehlszeile aus: 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"

Es gibt auch ein NPM-Modul , das es von JavaScript und einem Grunt-Task umschließt falls Sie Grunt verwenden.

16
a paid nerd

Was ist mit so etwas?

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

Verfügbar hier mit vollen Quellen .

14
filofel

Es gibt dieses Tool ChangeVersion [1]

Liste der Funktionen (von der Website):

  • befehlszeilenschnittstelle
  • unterstützung für .EXE-, .DLL- und .RES-Dateien
  • aktualisieren Sie FileVersion und ProductVersion basierend auf einer Versionsmaske
  • versionsschlüsselzeichenfolgen hinzufügen/ändern/entfernen
  • datei-Flags anpassen (Debug, Special, Private usw.)
  • projektdateien aktualisieren (.bdsproj | .bpr | .bpk | .dproj)
  • hauptanwendungssymbol hinzufügen/ändern
  • ini-Datei mit Konfiguration verwenden
  • Windows Vista-Unterstützung (muss erhöht werden)
  • einfach in eine kontinuierliche Build-Umgebung zu integrieren

Full Disclosure: Ich kenne den Mann, der dieses Tool geschrieben hat. Ich habe mit ihm gearbeitet. Das bedeutet aber auch, dass ich weiß, dass er Qualitätssoftware herstellt;)


[1] die Verbindung ist tot Es scheint eine gespiegelte Version unter download.cnet.com zu geben.

10
Otherside

verpatch ist gut, behandelt aber keine Unicode-Zeichen ...
try ResourceLib

8
user581430

Ich mache es ohne zusätzliches Werkzeug. Ich habe gerade die folgenden Dateien zu meinem Win32-App-Projekt hinzugefügt.

Eine Header-Datei, die einige Konstanten definiert, die wir in unserer Ressourcendatei und sogar im Programmcode wiederverwenden können. Wir brauchen nur eine Datei zu verwalten. Dank des Qt-Teams, das mir gezeigt hat, wie es in einem Qt-Projekt gemacht wird, funktioniert es jetzt auch in meiner Win32-App.

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

---- [MeineProjektversion.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
5
user3016543

Es gibt Resource Tuner Console von Heaventools Software.

Resource Tuner Console ist ein Befehlszeilentool, mit dem Entwickler die Bearbeitung verschiedener Ressourcentypen in einer großen Anzahl ausführbarer Windows-Dateien mit 32 und 64 Bit automatisieren können.

Weitere Informationen finden Sie auf der Seite Ändern von Versionsvariablen und Aktualisieren der Versionsinformationen .

2
Wylder

Ein wenig zu spät zur Party, aber da ich danach gesucht habe (und ich sie vielleicht irgendwann wieder finden muss), habe ich Folgendes gemacht, um Version, Firmennamen usw. in mein C++ DLL unter VS2013 Express aufzunehmen :

  1. Erstellt und bearbeitet eine dllproj.rc-Datei, wie zuvor angegeben.
  2. Die Zeile "rc.exe dllproj.rc" wurde als Vorbereitungsschritt in das DLL-Projekt eingefügt.
  3. Dllproj.res wurde dem Ressourcenordner für das Projekt hinzugefügt.

Hoffe das hilft!

2
Tom Gordon

Ressourcenhacker

Ich habe die neueste Version (5.1.7) von [AngusJ]: Resource Hacker heruntergeladen. Auf dieser Seite finden Sie alle erforderlichen Informationen (Befehlszeilenoptionen, Skripts, ...). In der folgenden exemplarischen Vorgehensweise werde ich zwei ausführbare Dateien (Lab Ratten) ausführen, die (aus offensichtlichen Gründen) in mein cwd kopiert wurden:

  • ResourceHacker.exe: Ich dachte, es wäre interessant, sich selbst zu operieren
  • cmake.exe: Zufällige ausführbare Datei ohne Versionsinfo-Set (Teil der Installation von v3.6.3 auf meinem Computer.

Bevor wir fortfahren, möchte ich erwähnen, dass ResourceHacker eine lustige Terminalausgabe hat und die folgenden Copy/Paste-Fragmente etwas Verwirrung stiften könnten.

1. Setup

Dies ist eher ein vorbereitender Schritt, um sich mit der Umgebung vertraut zu machen, um zu zeigen, dass es kein komisches Geschäft gibt, ...

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

Wie man sieht, sind die ausführbaren Dateien in Ordnung, sie laufen gut, und so sehen ihre Details (die uns wichtig sind) aus:

 Img0-Initial

2. Ressourcen

Ressourcendateien sind Textdateien, die Ressourcen enthalten. Eine Ressource (vereinfacht) hat:

  • Name
  • Art
  • Wert

Weitere Informationen finden Sie in [MS.Docs]: Über Ressourcendateien . Es gibt viele Werkzeuge (in den vorhandenen Antworten erwähnt), die das Bearbeiten von Ressourcendateien erleichtern, wie zum Beispiel:

  • VStudio erstellt beim Starten eines neuen Projekts eine Standardeinstellung
  • Man kann eine solche Datei manuell erstellen
  • Aber da es sich um Resource Hacker handelt, und:

    • Es ist in der Lage, Ressourcen aus einer vorhandenen ausführbaren Datei zu extrahieren
    • Es hat Ressourcen eingebettet (wie im vorherigen Bild gezeigt)

    Ich werde es für diesen Schritt verwenden (-action extract)

Damit eine Ressource in ein .exe (.dll, ...) eingebettet werden kann, muss es kompiliert in einer binären Form sein passt in das Format PE. Auch hier gibt es viele Tools, die dies erreichen können, aber wie Sie wahrscheinlich schon vermutet haben, werde ich mich an Resource Hacker (-action compile) halten.

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

In Ihrem Fall ist das Speichern und Bearbeiten der Ressourcendatei nicht erforderlich, da die Datei bereits vorhanden ist. Ich habe es nur zu Demonstrationszwecken gemacht. Darunter befindet sich die Ressourcendatei nach der Änderung (und somit vor dem Kompilieren).

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

Dies wird auch von Resource Hacker (-action addoverwrite) ausgeführt. Da die .exe s bereits kopiert sind, werde ich ihre Ressourcen an Ort und Stelle bearbeiten.

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

Wie ich gesehen habe, musste ich einen kleinen Trick (gainarie) machen, da ich (zumindest glaube ich nicht, dass ich das kann) die .exe -Datei ändern kann.

4. Test

Dies ist eine optionale Phase, um sicherzustellen, dass:

  • Die ausführbaren Dateien funktionieren immer noch (sie wurden dabei nicht durcheinander gebracht)
  • Die Ressourcen wurden hinzugefügt/aktualisiert
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

Und ihre Details:

 Img1-Final

1
CristiFati

Dies ist das beste Werkzeug, das ich für diesen Job gesehen habe. Es ermöglicht die vollständige Kontrolle über alle Dateiressourcen, einschließlich VersionInfo.

Siehe: ResourceEditor von Anders Melander .

1
J Collins

Sie können tatsächlich versuchen, FVIE von Download Link herunterzuladen und die Informationen für eine beliebige .exe-Datei zu bearbeiten. 

(ODER)

Sie können StampVer - Win32-Versionsressourcenstempelung von Download Link .__ herunterladen. Das ist wirklich nützlich für Windows EXE-Dateien.

(ODER)

Sie können ein Befehlstool mit dem Namen RCEDIT verwenden. Laden Sie die Datei von Github Source link herunter und erstellen Sie sie mit Visual Studio 2015. Anschließend haben Sie bestimmte Befehle zum Ändern der Version von EXE-Dateien. Unter Docs link finden Sie verschiedene Befehle.

0
Subash J

Es gibt viele Tools für reverse engineering wie Interactive Disassembler, in denen Sie viele Informationen für weitere Tools ändern können, um dies anzuzeigen: https://www.apriorit.com/dev-blog/366-software-reverse-engineering-tools . und probieren Sie diese Tools https://alternativeto.net/software/xn-resource-editor/

0
i_th