Dans le cadre de notre processus de construction, je dois définir les informations de version pour tous nos fichiers binaires compilés. Certains des fichiers binaires ont déjà des informations de version (ajoutées au moment de la compilation) et d'autres pas.
Je veux pouvoir appliquer les informations suivantes:
Tous ces attributs sont spécifiés par le script de génération et doivent être appliqués après la compilation. Il s’agit de fichiers binaires standard (et non d’assemblées) compilés avec C++ Builder 2007.
Comment puis-je faire ceci?
Bien qu'il ne s'agisse pas d'un traitement par lots, Visual Studio peut également ajouter/modifier des ressources de fichier.
Il suffit d'utiliser Fichier-> Ouvrir-> Fichier sur les fichiers .EXE ou .DLL. C'est pratique pour corriger les informations de version après la construction, ou pour les ajouter aux fichiers ne disposant pas de ces ressources.
Contrairement à beaucoup d’autres réponses, cette solution utilise un logiciel totalement libre.
Tout d’abord, créez un fichier appelé Resources.rc
comme ceci:
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
}
}
Ensuite, utilisez GoRC pour le compiler dans un fichier .res
en utilisant:
GoRC /fo Resources.res Resources.rc
(voir mon commentaire ci-dessous pour un miroir de GoRC.exe
)
Puis utilisez Resource Hacker en mode CLI pour l’ajouter à un .exe
existant:
ResHacker -add MyProg.exe, MyProg.exe, Resources.res,,,
C'est tout!
Ou vous pouvez consulter le freeware StampVer pour les fichiers Win32 exe/dll.
Les versions de fichier et de produit ne seront modifiées que si elles ont déjà une ressource de version. Il ne peut pas ajouter de ressource de version s’il n’en existe pas.
rcedit est relativement nouveau et fonctionne bien depuis la ligne de commande: 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"
Il y a aussi un module NPM qui l'encapsule à partir de JavaScript et une tâche Grunt au cas où vous utilisez Grunt.
Qu'en est-il quelque chose comme ça?
verpatch /va foodll.dll %VERSION% %FILEDESCR% %COMPINFO% %PRODINFO% %BUILDINFO%
Disponible ici avec des sources complètes .
Il y a cet outil ChangeVersion [1]
Liste des fonctionnalités (du site):
- interface en ligne de commande
- prise en charge des fichiers .exe, dll et .res
- mettre à jour FileVersion et ProductVersion en fonction d'un masque de version
- ajouter/modifier/supprimer des chaînes de clé de version
- ajuster les indicateurs de fichier (debug, spécial, privé, etc.)
- mettre à jour les fichiers de projet (.bdsproj | .bpr | .bpk | .dproj)
- ajouter/changer l'icône de l'application principale
- utiliser le fichier ini avec la configuration
- Prise en charge de Windows Vista (nécessite une élévation)
- facile à intégrer dans un environnement de construction continu
Full Disclosure: Je connais le type qui a écrit cet outil, je travaillais avec lui auparavant. Mais cela signifie aussi que je sais qu'il fabrique des logiciels de qualité;)
[1] le lien est mort. Il semble y avoir une version en miroir sur download.cnet.com .
verpatch est bon, mais ne gère pas les caractères unicode ...
try ResourceLib
Je le fais sans outil supplémentaire. Je viens d'ajouter les fichiers suivants à mon projet d'application Win32.
Un fichier d’en-tête qui définit certaines constantes que nous pouvons réutiliser dans notre fichier de ressources et même dans le code du programme. Nous n'avons besoin que de maintenir un fichier . Merci à l'équipe Qt qui m'a montré comment le faire sur un projet Qt, cela fonctionne désormais également sur mon application 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 [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
---- [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
Il y a Resource Tuner Console du logiciel Heaventools.
Resource Tuner Console est un outil de ligne de commande permettant aux développeurs d'automatiser l'édition de différents types de ressources dans un grand nombre de fichiers exécutables Windows 32 et 64 bits.
Voir plus précisément la page Modification des variables de version et mise à jour des informations de version pour plus de détails.
Un peu tard dans la soirée, mais comme je le cherchais (et que je devrais peut-être le retrouver un jour), voici ce que j'ai fait pour inclure la version, le nom de la société, etc. dans mon C++ DLL sous VS2013 Express :
J'espère que cela t'aides!
Pirate de ressources
J'ai téléchargé la dernière version (5.1.7) de [AngusJ]: Resource Hacker . Toutes les informations nécessaires peuvent être trouvées sur cette page (options de ligne de commande, scripts, ...). Dans la procédure suivante, je vais utiliser 2 exécutables (rats de laboratoire) que (pour des raisons évidentes) j'ai copiés dans mon cwd:
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.
Il s’agit plus d’une étape préliminaire: se familiariser avec l’environnement, montrer qu’il n’ya pas d’affaire géniale, ...
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
Comme on le voit, les exécutables sont OK, ils fonctionnent bien, et voici à quoi ressemble leur Détails (dont nous nous soucions):
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 de fichiers de ressources, tels que:
Mais, puisqu'il s'agit de Resource Hacker} _, et:
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 s'inscrit dans le format PE. Encore une fois, de nombreux outils peuvent y parvenir, mais comme vous l'avez probablement deviné, je vais m'en tenir à Resource Hacker} _ (-action compile
).
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
Dans votre cas, la sauvegarde et la modification du fichier de ressources ne seront pas nécessaires, car le fichier sera déjà présent. Je l'ai simplement fait à des fins de démonstration. Ci-dessous, le fichier de ressources après modification (et donc avant compilation).
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
}
}
Ceci sera également effectué par Resource Hacker} _ (-action addoverwrite
). Les .exe _ étant déjà copiés, je vais modifier leurs ressources sur place.
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
Comme je l’ai vu, j’ai dû faire un petit tour (gainarie) car je ne peux pas (du moins je ne pense pas pouvoir le faire) pour modifier le .exe en cours d’utilisation.
C'est une phase optionnelle, pour s'assurer que:
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
Et leurs Détails:
C’est le meilleur outil que je connaisse pour le travail. Il permet un contrôle total sur toutes les ressources de fichiers, VersionInfo inclus.
Voir: ResourceEditor by Anders Melander .
Vous pouvez réellement essayer de télécharger FVIE à partir de Lien de téléchargement et essayer de modifier les informations de n’importe quel fichier .exe.
(OU)
Vous pouvez télécharger StampVer - Tampon de ressource de version Win32 à partir de Lien de téléchargement ce qui est vraiment utile pour les fichiers Windows .exe.
(OU)
Vous pouvez utiliser un outil de commande appelé RCEDIT. Téléchargez depuis lien Source Github , puis générez à l'aide de Visual Studio 2015, puis vous avez des commandes spécifiques pour modifier la version des fichiers .exe. Voir Lien Documents pour connaître les différentes commandes disponibles.
Il existe de nombreux outils pour reverse engineering
, tels que Interactive Disassembler
, dans lesquels vous pouvez modifier beaucoup d'informations pour que d'autres outils puissent voir ceci: https://www.apriorit.com/dev-blog/366-software-reverse-engineering-tools . et essayez ces outils https://alternativeto.net/software/xn-resource-editor/