Es gibt mehrere Tools, die in vielen tollen Antworten erwähnt werden. Ich werde eines auswählen.
Ressourcen-Hacker
Ich habe die neueste Version ( 5.1.7 ) von [AngusJ]: Resource Hacker heruntergeladen . Alle erforderlichen Informationen finden Sie auf dieser Seite (Befehlszeilenoptionen, Skripte, ...). In der folgenden exemplarischen Vorgehensweise werde ich zwei ausführbare Dateien (Laborratten) bearbeiten, die ich (aus offensichtlichen Gründen) in mein cwd kopiert habe :
- ResourceHacker.exe : Ich dachte, es wäre interessant, an sich selbst zu arbeiten
- cmake.exe : Zufällige ausführbare Datei ohne gesetzte Versionsinfo (Teil von Installation von 3.6.3 auf meinem Computer)
Bevor ich weiter gehe, möchte ich diesen ResourceHacker erwähnen eine lustige Terminalausgabe hat hat und die folgenden Fragmente zum Kopieren / Einfügen etwas Verwirrung stiften können.
1. Setup
Dies ist eher ein vorbereitender Schritt, um sich mit der Umwelt vertraut zu machen und zu zeigen, dass es keine funky Geschäfte gibt, ...
e:\Work\Dev\StackOverflow\q000284258> sopr.bat
*** Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ***
[prompt]> 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
[prompt]> set PATH=%PATH%;c:\Install\x64\CMake\CMake\3.6.3\bin
[prompt]> .\cmake --help >nul 2>&1
[prompt]> echo %errorlevel%
0
[prompt]> .\ResourceHacker.exe -help
[prompt]>
==================================
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.
[prompt]> echo %errorlevel%
0
Wie zu sehen ist, sind die ausführbaren Dateien in Ordnung, sie funktionieren einwandfrei und so sehen ihre Details (die uns wichtig sind) aus:
2. Ressourcen
Ressourcendateien sind Textdateien, die Ressourcen enthalten. Eine Ressource (vereinfacht) hat:
Weitere Informationen finden Sie unter [MS.Docs]: Informationen zu Ressourcendateien . Es gibt viele Tools (in den vorhandenen Antworten erwähnt), die die Bearbeitung von Ressourcendateien erleichtern, wie z.
Damit eine Ressource in eine EXE-Datei ( DLL , ...) eingebettet werden kann, muss sie in eine Binärform kompiliert werden , die in das PE- Format passt . Auch hier gibt es viele Tools, die dies erreichen können, aber wie Sie wahrscheinlich vermutet haben, werde ich mich an Resource Hacker ( -action compile
) halten.
[prompt]> :: Extract the resources into a file
[prompt]> .\ResourceHacker.exe -open .\ResourceHacker.exe -save .\sample.rc -action extract -mask VersionInfo,, -log con
[prompt]>
[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!
[prompt]> :: Modify the resource file and set our own values
[prompt]>
[prompt]> :: Compile the resource file
[prompt]> .\ResourceHacker.exe -open .\sample.rc -save .\sample.res -action compile -log con
[prompt]>
[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!
[prompt]> 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 dies nur zu Demonstrationszwecken getan. Darunter befindet sich die Ressourcendatei nach dem Ändern (und damit 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
) durchgeführt. Da die EXE-Dateien bereits kopiert sind, werde ich ihre Ressourcen an Ort und Stelle bearbeiten.
[prompt]> .\ResourceHacker.exe -open .\cmake.exe -save .\cmake.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con
[prompt]>
[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!
[prompt]> copy ResourceHacker.exe ResourceHackerTemp.exe
1 file(s) copied.
[prompt]> .\ResourceHackerTemp.exe -open .\ResourceHacker.exe -save .\ResourceHacker.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con
[prompt]>
[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!
[prompt]> del /f /q ResourceHackerTemp.*
[prompt]> 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 zu sehen ist , musste ich da kleinen Trick ( gainarie ) , wie kann ich nicht (zumindest glaube ich nicht , dass ich kann) , um das ändern .exe , während im Einsatz.
4. Testen
Dies ist eine optionale Phase, um Folgendes sicherzustellen:
- Die ausführbaren Dateien funktionieren immer noch (sie wurden dabei nicht durcheinander gebracht)
- Die Ressourcen wurden hinzugefügt / aktualisiert
[prompt]> .\cmake --help >nul 2>&1
[prompt]> echo %errorlevel%
0
[prompt]> .\ResourceHacker.exe -help
[prompt]>
==================================
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.
[prompt]> echo %errorlevel%
0
Und ihre Details :
UpdateResource
Funktion, wenn Task Update - Version in der bestehenden pe