Wie lege ich die Versionsinformationen für eine vorhandene EXE- oder DLL-Datei fest?

113

Im Rahmen unseres Erstellungsprozesses muss ich die Versionsinformationen für alle kompilierten Binärdateien festlegen. Einige der Binärdateien enthalten bereits Versionsinformationen (zur Kompilierungszeit hinzugefügt), andere nicht.

Ich möchte folgende Informationen anwenden können:

  • Name der Firma
  • Urheberrechtshinweis
  • Produktname
  • Produktbeschreibung
  • Dateiversion
  • Produktversion

Alle diese Attribute werden vom Build-Skript angegeben und müssen nach der Kompilierung angewendet werden. Dies sind Standard-Binärdateien (keine Assemblys), die mit C ++ Builder 2007 kompiliert wurden.

Wie kann ich das machen?

Carl
quelle
für welchen Nutzen ResourceHacker ? Wie genau ist die Aufgabe eingestellt? in dem, was Problem Verwendung UpdateResourceFunktion, wenn Task Update - Version in der bestehenden pe
rbmm
Versuchen Sie dies: alternativeto.net/software/xn-resource-editor , ich denke, es gibt Reverse Engineering-Tools, die dies tun
i_thamary

Antworten:

59

Obwohl es sich nicht um einen Stapelprozess handelt, kann Visual Studio auch Dateiressourcen hinzufügen / bearbeiten.

Verwenden Sie einfach Datei-> Öffnen-> Datei in der EXE- oder DLL-Datei. Dies ist praktisch, um Versionsinformationen nach dem Erstellen zu korrigieren oder sie zu Dateien hinzuzufügen, die diese Ressourcen zunächst nicht haben.

UweBaemayr
quelle
8
Das hat perfekt funktioniert, als ich es ausprobiert habe. Für eine Datei, in der Versionsinformationen vollständig fehlen: Gehen Sie nach dem Öffnen der DLL in Visual Studio zu Bearbeiten> Ressource hinzufügen> Version und klicken Sie auf Neu. Ändern Sie dann auf der neuen Registerkarte Version die Option FILEVERSION und PRODUCTVERSION, den Firmennamen usw. Speichern Sie die Dateien und schon sind Sie fertig!
Twasbrillig
2
@UweBaemayr. Die Antwort, die Sie zitiert haben, möchte ich genauso fragen, wie wir sie automatisieren können, da ich genau den gleichen Post-Build mache und sie automatisieren möchte. Aber wie ?
SteveScm
1
Für meine alte Delphi win32 DLL funktioniert das nicht. Obwohl die DLL-Informationen korrekt geändert wurden, stellen Sie beim Ausführen von Sanity Checks fest, dass sie beschädigt sind.
sthiers
3
Versuchte dies (Versionsinfo hinzufügen) unter Windows 8, VS 2015 und alles ist gut in Windows Explorer, außer ... die ausführbare Datei wird nicht mehr gestartet.
Liviu
36

Im Gegensatz zu vielen anderen Antworten verwendet diese Lösung völlig freie Software.

Erstellen Sie zunächst eine Datei mit dem Namen Resources.rc:

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 als Nächstes GoRC , um es mit folgenden .resDateien in eine 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 es einem vorhandenen hinzuzufügen .exe:

ResHacker -add MyProg.exe, MyProg.exe, Resources.res,,,

Das ist es!

Danny Beckett
quelle
1
@ CharlesB Ich habe das selbst bemerkt, aber es ist der richtige Link. Sieht so aus, als hätte jemand vergessen, seinen Webhost zu bezahlen! Hier ist die Binärdatei, ich habe sie in mein öffentliches Assembla-Konto gespiegelt: assembla.com/code/danny-beckett/subversion/nodes/13/GoRC.exe
Danny Beckett
3
Sie können anstelle von GoRC auch den Microsoft Resource Compiler verwenden. Es ist mit dem Windows SDK verfügbar.
Ganzheitlicher Entwickler
Daumen hoch für Resource Hacker, ich habe es basierend auf dieser Antwort verwendet und es ist ein brillantes, großartiges Programm. (keine Affinität zu Programm oder Hersteller ;-)
user2109254
@UweKeim Ich habe das eine Weile nicht benutzt, aber ich bin mir ziemlich sicher, dass sie benötigt werden.
Danny Beckett
6
Die Befehlszeile scheint sich ein wenig geändert zu haben: ResourceHacker.exe -open Source.dll -save Changed.dll -action addoverwrite -resource Version.resAußerdem kann ResourceHacker die RC-Datei selbst kompilieren:ResourceHacker.exe -open Version.rc -save Version.res -action compile
Yusuf Tarık Günaydın
23

Oder Sie können die Freeware StampVer für Win32 exe / dll-Dateien auschecken .
Die Datei- und Produktversionen werden jedoch nur geändert, wenn bereits eine Versionsressource vorhanden ist. Es kann keine Versionsressource hinzugefügt werden, wenn keine vorhanden ist.

Ryan
quelle
19

rcedit ist relativ neu und funktioniert gut über die Befehlszeile: 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 aus JavaScript umschließt, und eine Grunt-Aufgabe, falls Sie Grunt verwenden.

ein bezahlter Nerd
quelle
5
Beachten Sie, dass rcedit nur vorhandene Ressourcen ändern kann, keine neuen einfügen
Bevan Collins
2
Funktioniert nicht mit 7zip sfx-Archiven: / Schneidet einfach den 7zip-Archivteil aus.
Mgamerz
1
versuchte dies, gibt immer wieder nicht in der Lage, Datei zu laden, wenn im selben Verzeichnis und scheint, dass das Tool von der Host-Konfiguration abhängen kann
Arijoon
Funktioniert mit dem 7zS.sfx-Stub, dem ersten Teil mit dem VERSIONINFO im Inneren, mit dem Sie ein selbstextrahierendes Archiv zusammenstellen. Manuell können Sie 7zS.sfx auch in 7zS.exe umbenennen und in Visual Studio bearbeiten. Da sich jedoch die Versionsnummer für jeden Build ändert, bevorzugen Sie eine Batchdatei mit darin enthaltenen rcedit-Anweisungen, um sie festzulegen.
AndresRohrAtlasInformatik
1
Dieses Tool ist sehr böse. Bitte schauen Sie sich diesen Fehler an, bevor Sie ihn auf Ihre Binärdateien anwenden: github.com/electron/rcedit/issues/51
Brun
14

Was ist mit so etwas?

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

Hier mit vollständigen Quellen erhältlich .

Filofel
quelle
Verpatch schien eine schlechte Produktversionsressource für mich zu erstellen (mit der /va /pvOption). Die Version wurde im Windows Explorer korrekt angezeigt, aber das letzte Zeichen fehlte beim Abrufen im Code mit VerQueryValue. Um die fehlerhafte Ressource zu beheben, habe ich Folgendes getan: (1) Laden Sie die DLL in Resource Hacker. (2) Zeigen Sie die Versionsressource an. (3) Kompilieren (etwas ändern und dann wieder ändern, um die Schaltfläche zu aktivieren). (4) Speichern.
Dan-Gph
verpatch funktioniert sowohl für die x64- als auch für die x86-Version meiner DLLs auf meiner Entwicklungsbox hervorragend. In einem Build-Projekt funktioniert es jedoch nur für x64 und es tut absolut nichts mit der x86-DLL - auch kein Fehler! irgendwelche Hinweise, was passieren könnte? Ich kann im Appveyor-Protokoll sehen, dass der Befehl verpatch ausgeführt wird, keine Fehler, und die DLL wird nicht irgendwie ersetzt und am Ende hat sie keinen Versionsstempel. Für x64 funktioniert alles in allen Situationen. irgendwelche Hinweise bitte?
Ovi
@ Ovi-Wan Kenobi: Ich wusste nicht, was ein Lieferant ist, aber Ihrer Beschreibung nach sieht es für mich eher nach einem Lieferantenproblem aus. Im schlimmsten Fall, wenn das möglich ist, machen Sie sich bereit für ein Debugging in der Lieferantenumgebung? ...
Filofel
10

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
  • Hinzufügen / Ändern / Entfernen von Versionsschlüsselzeichenfolgen
  • Anpassen von Dateiflaggen (Debug, Special, Private usw.)
  • Projektdateien aktualisieren (.bdsproj | .bpr | .bpk | .dproj)
  • Hauptanwendungssymbol hinzufügen / ändern
  • Verwenden Sie die INI-Datei mit der Konfiguration
  • Windows Vista-Unterstützung (muss angehoben werden)
  • einfach in eine kontinuierliche Build-Umgebung zu integrieren

Vollständige Offenlegung: 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] Der Link ist tot. Es scheint eine gespiegelte Version unter download.cnet.com zu geben .

Andere Seite
quelle
@ Gareth Ich habe einen Spiegellink hinzugefügt. Ansonsten bezweifle ich, dass diese Antwort einen Wert ohne Arbeitsbezug hat.
Wolf
5
Der zweite Link führt zu einem abgelaufenen Tool"Change Version v2012.9.6.0 - (C)2007-2012 The-Software-Box.com This trial version has expired"
Preet Sangha
2
Wenn es in der Befehlszeile ausgeführt wird, heißt es "Version v2012.9.6.0 ändern - (C) 2007-2012 The-Software-Box.com Diese Testversion ist abgelaufen"
RDeveloper
10

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 müssen nur eine Datei pflegen. 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

---- [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
user3016543
quelle
2
Nur neugierig; Wie haben Sie verhindert, dass Windows Ihre RC-Datei jedes Mal überschreibt, wenn Sie einen Dialog ändern oder eine Ressource im Projekt ändern? Ich habe bisher einige Artikel wie diesen gesehen und es scheint, als würde es funktionieren, wenn Sie nie wieder eine Ressource ändern müssen, die eine automatische Generierung durch die IDE verursachen würde.
shawn1874
@ shawn1874 - Fügen Sie die Zeile #include <windows.h>in die resource.hDatei ein, die automatisch hinzugefügt wird. Diese Datei wird nicht neu generiert (Hinweis oben in der RC-Datei zeigt an, dass es sich um generierten Code handelt, der im Designer geändert werden kann).
CJBS
1
@ CJBS, der die Frage nicht beantwortet. Obwohl dies möglicherweise funktioniert, wird nicht erklärt, wie die veröffentlichte Antwort funktionieren könnte. In der veröffentlichten Antwort enthält user3016543 die version.h direkt in der .rc-Datei. Es gibt verschiedene Möglichkeiten, mit dem Überschreiben der RC-Datei umzugehen, die ich zu tun weiß. Ich frage mich nur, wie diese bestimmte Antwort angezeigt wird, weil sie für mich nicht richtig aussieht.
shawn1874
Ich vermute, dass diese Methode für ihn funktioniert, da die betreffende Komponente keine Dialogkomponenten enthält, sodass die Datei nicht oft oder nie neu generiert wird. In einer Windows-Anwendung mit MFC-Dialogressourcen wäre dies jedoch nicht der Fall.
shawn1874
1
Vielen Dank, dass Sie mich an eine Technik erinnert haben, die ich zum ersten Mal in einer Ressourcendatei gesehen habe, die mit dem WinBatch Extender SDK geliefert wurde. Es war so lange her, dass ich die meisten Details vergessen hatte. Ihre Erklärung brachte alles zurück.
David A. Gray
8

verpatch ist gut, verarbeitet aber keine Unicode-Zeichen ...
versuchen Sie es mit ResourceLib

user581430
quelle
5

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:

Img0-Initial

2. Ressourcen

Ressourcendateien sind Textdateien, die Ressourcen enthalten. Eine Ressource (vereinfacht) hat:

  • Name
  • Art
  • Wert

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.

  • VStudio erstellt beim Starten eines neuen Projekts einen Standard
  • Man kann eine solche Datei manuell erstellen
  • Aber da es um Resource Hacker geht und:

    • Es ist in der Lage, Ressourcen aus einer vorhandenen ausführbaren Datei zu extrahieren
    • Darin sind Ressourcen eingebettet (wie im vorherigen Bild gezeigt).

    Ich werde es für diesen Schritt verwenden ( -action extract)

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 :

Img1-Finale

CristiFati
quelle
@ColonelPanic: Danke!
CristiFati
Sehr schöne Antwort. Leider wird ResourceHacker nicht mehr gewartet und hat nicht mehr genügend Speicher, wenn versucht wird, eine große EXE-Datei zu bearbeiten (beim Versuch, eine 3-GB-Exe zu öffnen, ist der Fehler aufgetreten).
Lews Therin
@ NewsTherin: Die neueste Version (auch von der Antwort verwendet) stammt aus dem Jahr 2019/01, daher würde ich sagen, dass sie ziemlich gepflegt ist. Das Problem ist, dass es 32bit ist . Sie können sich an die Autoren wenden, die nach einer 64-Bit- Version fragen (ich gehe davon aus, dass es nicht schwierig ist, den Code für 64-Bit zu erstellen, da sie bereits über den Code verfügen ).
CristiFati
3

Ein bisschen spät zur Party, aber da ich danach gesucht habe (und es möglicherweise irgendwann wieder finden muss), habe ich Folgendes getan, um Version, Firmenname usw. in meine C ++ - DLL unter VS2013 Express aufzunehmen:

  1. Erstellt und bearbeitet eine dllproj.rc-Datei, wie zuvor angegeben.
  2. Die Zeile "rc.exe dllproj.rc" wurde als Vorbereitungsschritt im DLL-Projekt hinzugefügt.
  3. Dllproj.res wurde zum Ressourcenordner für das Projekt hinzugefügt.

Hoffe das hilft!

Tom Gordon
quelle
3

Die obige Antwort von @DannyBeckett hat mir sehr geholfen,

Ich habe Folgendes in eine Batch-Datei eingefügt und es in demselben Ordner abgelegt, in dem sich ResourceHacker.exe und die EXE-Datei befinden, an der ich arbeite, und es funktioniert hervorragend. [Sie können es bearbeiten, um Ihren Bedürfnissen zu entsprechen]

    @echo off
    :start1
    set /p newVersion=Enter version number [?.?.?.?]:
    if "%newVersion%" == "" goto start1
    :start2
    set /p file=Enter EXE name [for 'program.exe' enter 'program']:
    if "%file%" == "" goto start2
    for /f "tokens=1-4 delims=." %%a in ('echo %newVersion%') do (set ResVersion=%%a,%%b,%%c,%%d)
    (
    echo:VS_VERSION_INFO VERSIONINFO
    echo:    FILEVERSION    %ResVersion%
    echo:    PRODUCTVERSION %ResVersion%
    echo:{
    echo:    BLOCK "StringFileInfo"
    echo:    {
    echo:        BLOCK "040904b0"
    echo:        {
    echo:            VALUE "CompanyName",        "MyCompany\0"
    echo:            VALUE "FileDescription",    "TestFile\0"
    echo:            VALUE "FileVersion",        "%newVersion%\0"
    echo:            VALUE "LegalCopyright",     "COPYRIGHT © 2019 MyCompany\0"
    echo:            VALUE "OriginalFilename",   "%file%.exe\0"
    echo:            VALUE "ProductName",        "Test\0"
    echo:            VALUE "ProductVersion",     "%newVersion%\0"
    echo:        }
    echo:    }
    echo:    BLOCK "VarFileInfo"
    echo:    {
    echo:        VALUE "Translation", 0x409, 1200
    echo:    }
    echo:}
    ) >Resources.rc     &&      echo setting Resources.rc
    ResourceHacker.exe -open resources.rc -save resources.res -action compile -log CONSOLE
    ResourceHacker -open "%file%.exe" -save "%file%Res.exe" -action addoverwrite -resource "resources.res"  -log CONSOLE
    ResourceHacker.exe -open "%file%Res.exe" -save "%file%Ico.exe" -action addskip -res "%file%.ico" -mask ICONGROUP,MAINICON, -log CONSOLE
    xCopy /y /f "%file%Ico.exe" "%file%.exe"
    echo.
    echo.
    echo your compiled file %file%.exe is ready
    pause

[Als Randnotiz habe ich Resource Hacker auch verwendet, um die res-Datei zu kompilieren, nicht GoRC]

RDR
quelle
2

Sie können tatsächlich versuchen, FVIE über den Download-Link herunterzuladen und die Informationen für jede EXE-Datei zu bearbeiten.

(ODER)

Sie können StampVer - Win32 Version Resource Stamping von Download Link herunterladen, was für Windows EXE-Dateien sehr nützlich ist.

(ODER)

Sie können ein Befehlstool namens RCEDIT verwenden . Laden Sie den Link von Github Source herunter und erstellen Sie ihn mit Visual Studio 2015. Anschließend verfügen Sie über bestimmte Befehle zum Ändern der Version von EXE-Dateien. Unter dem Link "Dokumente" finden Sie verschiedene verfügbare Befehle.

Subash J.
quelle
1

Dies ist das beste Tool, 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 .

J Collins
quelle
1
Der Download für den Ressourceneditor (0 Byte) ist fehlerhaft.
Jack