web-dev-qa-db-fra.com

Comment définir les informations de version pour un fichier .exe, .dll existant?

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:

  • Nom de la compagnie 
  • Copyright
  • Nom du produit 
  • Description du produit
  • Version du fichier 
  • Version de produit

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?

92
Carl

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.

49
UweBaemayr

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!

29
Danny Beckett

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.

22
Ryan

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.

16
a paid nerd

Qu'en est-il quelque chose comme ça?

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

Disponible ici avec des sources complètes .

14
filofel

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 .

10
Otherside

verpatch est bon, mais ne gère pas les caractères unicode ...
try ResourceLib

8
user581430

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
5
user3016543

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.

2
Wylder

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 :

  1. Création et édition d'un fichier dllproj.rc, comme indiqué précédemment.
  2. Ajout de la ligne "rc.exe dllproj.rc" en tant qu'étape de pré-génération dans la DLL Project.
  3. Ajout de dllproj.res au dossier de ressources du projet.

J'espère que cela t'aides!

2
Tom Gordon

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:

  • ResourceHacker.exe: J'ai pensé qu'il serait intéressant d'opérer sur lui-même
  • cmake.exe: exécutable aléatoire sans informations de version set (élément de v3.6.3 installation 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

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):

 Img0-Initial

2. ressources

Les fichiers de ressources sont des fichiers texte contenant des ressources. Une ressource (simplifiée) a:

  • Prénom
  • Type
  • Valeur

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:

  • 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 (comme le montre 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 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  
}
}

3. Intégrer

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.

4. test

C'est une phase optionnelle, pour s'assurer que:

  • Les exécutables fonctionnent toujours (ils n'étaient pas foirés dans le processus)
  • Les ressources ont été ajoutées/mises à jour
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:

 Img1-Final

1
CristiFati

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 .

1
J Collins

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.

0
Subash J

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/

0
i_th