Come si impostano le informazioni sulla versione per un file .exe, .dll esistente?


113

Come parte del nostro processo di compilazione, ho bisogno di impostare le informazioni sulla versione per tutti i nostri binari compilati. Alcuni binari hanno già informazioni sulla versione (aggiunte in fase di compilazione) e altri no.

Voglio essere in grado di applicare le seguenti informazioni:

  • Nome della ditta
  • Avviso sul copyright
  • nome del prodotto
  • Descrizione del prodotto
  • Versione file
  • Versione del prodotto

Tutti questi attributi sono specificati dallo script di compilazione e devono essere applicati dopo la compilazione. Questi sono binari standard (non assembly) compilati con C ++ Builder 2007.

Come posso fare questo?


per cosa utilizzare ResourceHacker ? come viene impostato esattamente il compito? in quale problema utilizzare la UpdateResourcefunzione, se la versione di aggiornamento dell'attività in pe esistente
RbMm

Prova questo: alternativeto.net/software/xn-resource-editor , penso che ci siano strumenti di reverse engineering per farlo
i_thamary

Risposte:


59

Sebbene non sia un processo batch, Visual Studio può anche aggiungere / modificare risorse di file.

Basta usare File-> Apri-> File su .EXE o .DLL. Ciò è utile per correggere le informazioni sulla versione dopo la compilazione o aggiungerle a file che non dispongono di queste risorse per cominciare.


8
Ha funzionato perfettamente quando l'ho provato. Per un file in cui mancano completamente le informazioni sulla versione: dopo aver aperto la DLL in Visual Studio, vai a Modifica> Aggiungi risorsa> Versione e fai clic su Nuovo. Quindi nella nuova scheda Versione, cambia FILEVERSION e PRODUCTVERSION, CompanyName, ecc. Salva i file e il gioco è fatto!
twasbrillig

2
@UweBaemayr. la risposta che hai citato voglio chiederti come possiamo automatizzarla esattamente come io faccio lo stesso post build e voglio automatizzarla. Ma come ?
SteveScm

1
Per la mia vecchia dll win32 Delphi questo non funziona. Anche se le informazioni sulla dll vengono modificate correttamente, quando si eseguono controlli di integrità ti accorgi che è danneggiata.
sthiers

3
Ho provato questo (aggiungi informazioni sulla versione) su Windows 8, VS 2015 e tutto va bene in Windows Explorer, tranne ... l'eseguibile non si avvia più.
Liviu

36

A differenza di molte altre risposte, questa soluzione utilizza software completamente gratuito.

Innanzitutto, crea un file chiamato in Resources.rcquesto modo:

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
    }
}

Quindi, usa GoRC per compilarlo in un .resfile usando:

GoRC /fo Resources.res Resources.rc

(vedi il mio commento qui sotto per uno specchio di GoRC.exe)

Quindi utilizzare Resource Hacker in modalità CLI per aggiungerlo a un esistente .exe:

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

Questo è tutto!


1
@CharlesB L'ho notato anch'io, ma è il collegamento giusto. Sembra che qualcuno si sia dimenticato di pagare il proprio host web! Ecco il binario, l'ho specchiato sul mio account Assembla pubblico: assembla.com/code/danny-beckett/subversion/nodes/13/GoRC.exe
Danny Beckett

3
È inoltre possibile utilizzare Microsoft Resource Compiler al posto di GoRC. È disponibile con Windows SDK.
Holistic Developer

Complimenti per Resource Hacker, l'ho usato in base a questa risposta ed è brillante, ottimo programma. (nessuna affinità con il programma o il produttore ;-)
user2109254

@UweKeim Non lo uso da un po ', ma sono abbastanza sicuro che siano necessari.
Danny Beckett

6
Sembra che la riga di comando sia leggermente cambiata: ResourceHacker.exe -open Source.dll -save Changed.dll -action addoverwrite -resource Version.resInoltre, ResourceHacker può compilare il file .rc stesso:ResourceHacker.exe -open Version.rc -save Version.res -action compile
Yusuf Tarık Günaydın

23

Oppure puoi controllare il freeware StampVer per i file exe / dll Win32.
Tuttavia, cambierà solo le versioni del file e del prodotto se hanno già una risorsa di versione. Non può aggiungere una risorsa di versione se non ne esiste una.


19

rcedit è relativamente nuovo e funziona bene dalla riga di comando: 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"

C'è anche un modulo NPM che lo avvolge da JavaScript e un'attività Grunt nel caso in cui tu stia usando Grunt.


5
nota che rcedit può solo modificare le risorse esistenti non inserirne di nuove
Bevan Collins

2
Non funziona con gli archivi 7zip sfx: / Taglia solo la parte dell'archivio 7zip.
Mgamerz

1
provato questo, continua a dare impossibile caricare il file quando si trova nella stessa directory e sembra che lo strumento possa dipendere dalla configurazione dell'host
Arijoon

Funziona con lo stub 7zS.sfx, la prima parte con all'interno VERSIONINFO che usi per concatenare un archivio autoestraente. Manualmente puoi anche rinominare 7zS.sfx in 7zS.exe e modificarlo in Visual Studio ma poiché il numero di versione cambia per ogni build, preferisci un file batch con istruzioni rcedit all'interno per impostarlo.
AndresRohrAtlasInformatik

1
questo strumento è molto brutto, per favore guarda questo bug prima di applicarlo ai tuoi binari: github.com/electron/rcedit/issues/51
Brun

14

Che ne dici di qualcosa di simile?

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

Disponibile qui con sorgenti complete .


Verpatch sembrava creare una cattiva risorsa per la versione del prodotto per me (usando l' /va /pvopzione). La versione appariva correttamente in Windows Explorer ma l'ultimo carattere mancava quando veniva recuperato nel codice con VerQueryValue. Per riparare la risorsa difettosa, ho fatto questo: (1) Carica la DLL in Resource Hacker. (2) Visualizza la risorsa della versione. (3) Compilare (modificare qualcosa, quindi cambiarlo di nuovo per abilitare il pulsante). (4) Salva.
dan-gph

verpatch funziona alla grande sia per la versione x64 che per quella x86 delle mie DLL sulla mia scatola di sviluppo, tuttavia in un progetto di compilazione di un trasportatore funziona solo per x64 e non sta facendo assolutamente nulla per la dll x86 - nessun errore! qualche indizio su cosa potrebbe accadere? Vedo nel registro dell'appveyor che il comando verpatch è in esecuzione, nessun errore e la dll non viene in qualche modo sostituita e alla fine non ha il timbro della versione; per x64 tutto funziona bene in tutte le situazioni. qualche indizio per favore?
Ovi

@ Ovi-Wan Kenobi: non sapevo cosa fosse un trasportatore, ma secondo la tua descrizione, mi sembra più un problema di un trasportatore. Nel peggiore dei casi, se è possibile, preparati per un po 'di debug nell'ambiente del trasportatore? ...
filofel

10

C'è questo strumento ChangeVersion [1]

Elenco delle funzionalità (dal sito Web):

  • interfaccia a riga di comando
  • supporto per file .EXE, .DLL e .RES
  • aggiornare FileVersion e ProductVersion in base a una maschera di versione
  • aggiungere / modificare / rimuovere stringhe di chiavi di versione
  • regolare i flag dei file (debug, speciale, privato ecc.)
  • aggiornare i file di progetto (.bdsproj | .bpr | .bpk | .dproj)
  • aggiungere / modificare l'icona dell'applicazione principale
  • usa il file ini con la configurazione
  • Supporto per Windows Vista (necessita di elevazione)
  • facile da integrare in un ambiente di build continuo

Full Disclosure: Conosco il ragazzo che ha scritto questo strumento, lavoravo con lui. Ma questo significa anche che so che produce software di qualità;)


[1] il collegamento è morto. Sembra esserci una versione con mirroring su download.cnet.com .


@ Gareth ho aggiunto un link mirror. Altrimenti, dubito che questa risposta abbia alcun valore senza alcun riferimento funzionante.
Wolf

5
Il secondo collegamento risulta in uno strumento scaduto"Change Version v2012.9.6.0 - (C)2007-2012 The-Software-Box.com This trial version has expired"
Preet Sangha

2
Quando viene eseguito nella riga di comando, viene visualizzato il messaggio "Modifica versione v2012.9.6.0 - (C) 2007-2012 The-Software-Box.com Questa versione di prova è scaduta"
RDeveloper

10

Lo sto facendo senza strumenti aggiuntivi. Ho appena aggiunto i seguenti file al mio progetto di app Win32.

Un file di intestazione che definisce alcune costanti che possiamo riutilizzare sul nostro file di risorse e persino sul codice del programma. Abbiamo solo bisogno di mantenere un file. Grazie al team Qt che mi ha mostrato come farlo su un progetto Qt, ora funziona anche sulla mia app 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 ipanera@gmail.com"
#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

2
Solo curioso; come hai impedito a Windows di sovrascrivere il tuo file .rc ogni volta che cambi una finestra di dialogo o modifichi una risorsa nel progetto? Ho visto un paio di articoli come questo finora e sembra che funzionerebbe se non dovessi mai cambiare di nuovo una risorsa che causerebbe la generazione automatica da parte dell'IDE.
shawn1874

@ shawn1874 - Include la riga #include <windows.h>nel resource.hfile che viene aggiunto automaticamente. Quel file non viene rigenerato (nota nella parte superiore del file .rc indica che è codice generato e può essere modificato nel designer).
CJBS

1
@CJBS che non risponde alla domanda. Anche se potrebbe funzionare, non spiega come potrebbe funzionare la risposta pubblicata. Nella risposta pubblicata user3016543 include la versione.h direttamente nel file .rc. Ci sono diversi modi per gestire la sovrascrittura del file .rc che so come fare. Sto solo mettendo in dubbio il modo in cui viene mostrata questa particolare risposta perché non mi sembra giusta.
shawn1874

Immagino che quel metodo funzioni per lui perché il componente in questione non ha componenti di dialogo, quindi il file non viene rigenerato spesso o mai. Tuttavia, in un'applicazione Windows con risorse di dialogo MFC ciò non sarebbe il caso.
shawn1874

1
Grazie per avermi ricordato una tecnica che ho visto per la prima volta in azione in un file di risorse fornito con WinBatch Extender SDK. Era passato così tanto tempo dall'ultima volta che ne avevo bisogno che avevo dimenticato la maggior parte dei dettagli. La tua spiegazione ha riportato tutto indietro.
David A. Gray il


6

Ci sono più strumenti, menzionati da molte ottime risposte, ne sceglierò uno.

Hacker di risorse

Ho scaricato l'ultima versione ( 5.1.7 ) da [AngusJ]: Resource Hacker . Tutte le informazioni necessarie possono essere trovate su quella pagina (opzioni della riga di comando, script, ...). Nella seguente procedura dettagliata opererò su 2 eseguibili (topi da laboratorio) che (per ovvi motivi) ho copiato nel mio cwd :

  • ResourceHacker.exe : ho pensato che sarebbe stato interessante operare su se stesso
  • cmake.exe : eseguibile casuale senza set di informazioni sulla versione (parte dell'installazione v3.6.3 sulla mia macchina)

Prima di andare oltre, voglio menzionare che ResourceHacker ha un divertente output del terminale e i seguenti frammenti di copia / incolla potrebbero generare un po 'di confusione.

1. Configurazione

Questo è più come un passaggio preliminare, per familiarizzare con l'ambiente, per mostrare che non ci sono affari stravaganti in corso, ...

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

Come visto, gli eseguibili sono OK, funzionano bene, ed ecco come appaiono i loro Dettagli (che ci interessano):

Img0-Initial

2. Risorse

I file di risorse sono file di testo che contengono risorse. Una risorsa (semplificata) ha:

  • Nome
  • genere
  • Valore

Per maggiori dettagli, controllare [MS.Docs]: Informazioni sui file di risorse . Esistono molti strumenti (menzionati nelle risposte esistenti) che facilitano la modifica dei file di risorse come:

  • VStudio ne crea uno predefinito quando si avvia un nuovo progetto
  • Si può creare un file del genere manualmente
  • Ma, poiché si tratta di Resource Hacker , e:

    • È in grado di estrarre risorse da un eseguibile esistente
    • Ha risorse incorporate in esso (come mostrato nell'immagine precedente)

    Lo userò per questo passaggio ( -action extract)

Quindi, affinché una risorsa possa essere incorporata in un .exe ( .dll , ...) deve essere compilata in un formato binario, che si adatta al formato PE . Ancora una volta, ci sono molti strumenti che possono raggiungere questo obiettivo, ma come probabilmente hai intuito mi atterrò a 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

Nel tuo caso non sarà necessario salvare e modificare il file risorsa, in quanto il file sarà già presente, l'ho fatto solo a scopo dimostrativo. Di seguito è riportato il file di risorse dopo essere stato modificato (e quindi prima di essere compilato).

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. Incorpora

Questo verrà eseguito anche da Resource Hacker ( -action addoverwrite). Poiché i file .exe sono già stati copiati, modificherò le loro risorse sul posto.

[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

Come visto, ho dovuto fare un piccolo trucco ( gainarie ) in quanto non posso (almeno non credo di poter) modificare l' exe mentre è in uso.

4. Prova

Questa è una fase facoltativa, per assicurarsi che:

  • Gli eseguibili funzionano ancora (non sono stati incasinati nel processo)
  • Le risorse sono state aggiunte / aggiornate
[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

E i loro dettagli :

Img1-Finale


@ColonelPanic: grazie!
CristiFati

Risposta molto bella. Sfortunatamente ResourceHacker non è più mantenuto e esaurisce la memoria quando provo a modificare un file EXE di grandi dimensioni (ho ricevuto l'errore durante il tentativo di aprire un exe da 3 GB).
Lews Therin

@LewsTherin: L'ultima versione (usata anche dalla risposta) è del 2019/01, quindi direi che è abbastanza mantenuta. Il problema è che è a 32 bit . Potresti contattare gli autori chiedendo una versione a 64 bit (presumo che dal momento che hanno già il codice non sarebbe difficile costruirlo per 64 bit ).
CristiFati


3

Un po 'tardi per la festa, ma dato che lo stavo cercando (e potrei aver bisogno di trovarlo di nuovo prima o poi), ecco cosa ho fatto per includere versione, nome dell'azienda, ecc. Nella mia DLL C ++ sotto VS2013 Express:

  1. Creato e modificato un file dllproj.rc, come indicato in precedenza.
  2. Aggiunta la riga "rc.exe dllproj.rc" come passaggio di pre-compilazione nel progetto DLL.
  3. Aggiunto dllproj.res alla cartella delle risorse per il progetto.

Spero che questo ti aiuti!


3

la risposta sopra di @DannyBeckett mi ha aiutato molto,

Metto quanto segue in un file batch e lo metto nella stessa cartella in cui si trovano ResourceHacker.exe e l'EXE su cui lavoro e funziona perfettamente. [puoi modificarlo in base alle tue esigenze]

    @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

[come nota a margine ho usato anche resource hacker per compilare il file res, non GoRC]


2

Puoi effettivamente provare a scaricare FVIE da Download Link e provare a modificare le informazioni per qualsiasi file .exe.

(O)

Puoi scaricare StampVer - Win32 Version Resource Stamping da Download Link, che è davvero utile per i file .exe di Windows.

(O)

È possibile utilizzare uno strumento di comando chiamato RCEDIT . Scarica dal link Github Source e quindi crea utilizzando Visual Studio 2015 e quindi hai comandi specifici per modificare la versione dei file .exe. Vedi il collegamento Documenti per i vari comandi disponibili.


1

Questo è lo strumento migliore che ho visto per il lavoro, consente il pieno controllo su tutte le risorse di file, incluso VersionInfo.

Vedi: ResourceEditor di Anders Melander .


1
Il download per Resource Editor (0 byte) è interrotto.
Jack
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.