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:
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?
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.
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!
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.
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.
Was ist mit so etwas?
verpatch /va foodll.dll %VERSION% %FILEDESCR% %COMPINFO% %PRODINFO% %BUILDINFO%
Verfügbar hier mit vollen Quellen .
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.
verpatch ist gut, behandelt aber keine Unicode-Zeichen ...
try ResourceLib
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
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 .
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 :
Hoffe das hilft!
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:
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.
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:
Ressourcendateien sind Textdateien, die Ressourcen enthalten. Eine Ressource (vereinfacht) hat:
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:
Aber da es sich um Resource Hacker handelt, und:
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
}
}
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.
Dies ist eine optionale Phase, um sicherzustellen, dass:
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:
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 .
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.
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/