Il existe plusieurs outils, mentionnés par de nombreuses bonnes réponses, je vais en choisir un.
Pirate de ressources
J'ai téléchargé la dernière version ( 5.1.7 ) de [AngusJ]: Resource Hacker . Toutes les informations nécessaires se trouvent sur cette page (options de ligne de commande, scripts, ...). Dans la procédure pas à pas suivante, je vais utiliser 2 exécutables (rats de laboratoire) que j'ai copiés (pour des raisons évidentes) dans mon cwd :
- ResourceHacker.exe : J'ai pensé qu'il serait intéressant de fonctionner sur lui-même
- cmake.exe : exécutable aléatoire sans jeu d' informations de version (partie de l' installation v3.6.3 sur ma machine)
Avant d'aller plus loin, je tiens à mentionner que ResourceHacker a une sortie de terminal amusante et que les fragments copier / coller suivants peuvent générer un peu de confusion.
1. Configuration
Cela ressemble plus à une étape préliminaire, pour se familiariser avec l'environnement, pour montrer qu'il n'y a pas d'activité funky en cours, ...
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
Comme on le voit, les exécutables sont OK, ils fonctionnent bien, et voici à quoi ressemblent leurs détails (dont nous nous soucions):
2. Ressources
Les fichiers de ressources sont des fichiers texte contenant des ressources. Une ressource (simplifiée) a:
Pour plus de détails, consultez [MS.Docs]: À propos des fichiers de ressources . Il existe de nombreux outils (mentionnés dans les réponses existantes) qui facilitent l'édition des fichiers de ressources comme:
- VStudio en crée un par défaut lors du démarrage d'un nouveau projet
- On peut créer un tel fichier manuellement
Mais, puisqu'il s'agit de Resource Hacker , et:
- Il est capable d'extraire des ressources d'un exécutable existant
- Il contient des ressources intégrées (comme indiqué dans l'image précédente)
Je vais l'utiliser pour cette étape ( -action extract
)
Ensuite, pour qu'une ressource soit incorporée dans un .exe ( .dll , ...), elle doit être compilée sous une forme binaire, qui correspond au format PE . Encore une fois, il existe de nombreux outils qui peuvent y parvenir, mais comme vous l'avez probablement deviné, je vais m'en tenir à Resource Hacker ( -action compile
).
[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
Dans votre cas, l'enregistrement et l'édition du fichier de ressources ne seront pas nécessaires, car le fichier sera déjà présent, je l'ai juste fait à des fins de démonstration. En dessous se trouve le fichier de ressources après avoir été modifié (et donc avant d'être compilé).
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. Incorporer
Cela sera également effectué par Resource Hacker ( -action addoverwrite
). Puisque les .exe sont déjà copiés, je vais modifier leurs ressources en place.
[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
Comme on le voit, j'ai dû faire un petit truc ( gainarie ) car je ne peux pas (du moins je ne pense pas pouvoir) modifier le .exe pendant son utilisation.
4. Test
Il s'agit d'une phase facultative, pour s'assurer que:
- Les exécutables fonctionnent toujours (ils n'ont pas été perturbés dans le processus)
- Les ressources ont été ajoutées / mises à jour
[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
Et leurs détails :
UpdateResource
fonction, si la version de mise à jour de la tâche dans le