Jak ustawić informacje o wersji dla istniejącego pliku .exe, .dll?

114

W ramach naszego procesu kompilacji muszę ustawić informacje o wersji dla wszystkich skompilowanych plików binarnych. Niektóre pliki binarne mają już informacje o wersji (dodane w czasie kompilacji), a niektóre nie.

Chcę móc zastosować następujące informacje:

  • Nazwa firmy
  • Informacja o prawach autorskich
  • Nazwa produktu
  • Opis produktu
  • Wersja pliku
  • Wersja Produktu

Wszystkie te atrybuty są określone w skrypcie kompilacji i muszą zostać zastosowane po kompilacji. Są to standardowe pliki binarne (nie zestawy) skompilowane za pomocą C ++ Builder 2007.

W jaki sposób mogę to zrobić?

Carl
źródło
do czego służy ResourceHacker ? jak dokładnie ustawione jest zadanie? w jakim problemie użyj UpdateResourcefunkcji, jeśli zadanie zaktualizuj wersję w istniejącym pe
RbMm
Spróbuj tego: alternativeto.net/software/xn-resource-editor , myślę, że istnieją narzędzia inżynierii odwrotnej, które to robią
i_thamary

Odpowiedzi:

60

Chociaż nie jest to proces wsadowy, program Visual Studio może również dodawać / edytować zasoby plików.

Po prostu użyj Plik-> Otwórz-> Plik w .EXE lub .DLL. Jest to przydatne do poprawiania informacji o wersji po kompilacji lub dodawania ich do plików, które nie mają tych zasobów na początku.

UweBaemayr
źródło
8
To działało idealnie, kiedy tego próbowałem. W przypadku pliku, w którym całkowicie brakuje informacji o wersji: po otwarciu biblioteki DLL w programie Visual Studio przejdź do pozycji Edycja> Dodaj zasób> Wersja i kliknij przycisk Nowy. Następnie na nowej karcie Wersja zmień WERSJĘ FILTRA i WERSJĘ PRODUKTU, Nazwa firmy itp. Zapisz pliki i gotowe!
twasbrillig
2
@UweBaemayr. odpowiedź, którą zacytowałeś, chcę zapytać tak samo, jak możemy to zautomatyzować, ponieważ robię to samo budowanie postów i chcę to zautomatyzować. Ale jak ?
SteveScm
1
W przypadku mojej starej biblioteki Delphi win32 dll to nie działa. Chociaż informacje dll są poprawnie zmieniane, podczas sprawdzania ich poprawności zdajesz sobie sprawę, że są uszkodzone.
sthiers
3
Wypróbowałem to (dodaj informacje o wersji) w Windows 8, VS 2015 i wszystko jest dobrze w Eksploratorze Windows, z wyjątkiem ... plik wykonywalny już się nie uruchamia.
Liviu
37

W przeciwieństwie do wielu innych odpowiedzi, to rozwiązanie wykorzystuje całkowicie bezpłatne oprogramowanie.

Najpierw utwórz plik o nazwie Resources.rctakiej:

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

Następnie użyj GoRC, aby skompilować go do .respliku za pomocą:

GoRC /fo Resources.res Resources.rc

(zobacz mój komentarz poniżej dla lustra GoRC.exe)

Następnie użyj Resource Hacker w trybie CLI, aby dodać go do istniejącego .exe:

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

Otóż ​​to!

Danny Beckett
źródło
1
@CharlesB Sam to zauważyłem, ale to właściwy link. Wygląda na to, że ktoś zapomniał zapłacić swojemu usługodawcy hostingowemu! Oto plik binarny, skopiowałem go na moje publiczne konto Assembla: assembla.com/code/danny-beckett/subversion/nodes/13/GoRC.exe
Danny Beckett
3
Możesz również użyć kompilatora zasobów firmy Microsoft zamiast GoRC. Jest dostępny z Windows SDK.
Holistic Developer,
Kciuki w górę dla Resource Hacker, użyłem go w tej odpowiedzi na to i jest to genialny, świetny program. (brak podobieństwa do programu lub twórcy ;-)
user2109254
@UweKeim Nie używałem tego przez jakiś czas, ale jestem prawie pewien, że są one wymagane.
Danny Beckett
6
Wygląda na to wiersz poleceń zmienił się nieco: ResourceHacker.exe -open Source.dll -save Changed.dll -action addoverwrite -resource Version.resRównież Resource Hacker można skompilować sam plik .RC:ResourceHacker.exe -open Version.rc -save Version.res -action compile
Yusuf Tarık Gunaydin
23

Możesz też sprawdzić darmowy program StampVer for Win32 exe / dll.
Zmieni to tylko plik i wersje produktu, jeśli mają już zasoby wersji. Nie może dodać zasobu wersji, jeśli taki nie istnieje.

Ryan
źródło
19

rcedit jest stosunkowo nowy i działa dobrze z wiersza poleceń: 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"

Istnieje również moduł NPM, który otacza go z JavaScript i zadanie Grunt w przypadku, gdy używasz Grunt.

płatny frajer
źródło
5
zwróć uwagę, że rcedit może tylko modyfikować istniejące zasoby, a nie wstawiać nowych
Bevan Collins,
2
Nie działa z archiwami 7zip sfx: / Po prostu wycina część archiwum 7zip.
Mgamerz
1
próbowałem tego, nadal nie można załadować pliku, gdy znajduje się w tym samym katalogu i wygląda na to, że narzędzie może zależeć od konfiguracji hosta
Arijoon
Działa z kodem pośrednim 7zS.sfx, pierwszą częścią zawierającą VERSIONINFO wewnątrz, którego używasz do łączenia samorozpakowującego się archiwum. Możesz również ręcznie zmienić nazwę 7zS.sfx w 7zS.exe i edytować go w programie Visual Studio, ale ponieważ numer wersji zmienia się dla każdej kompilacji, wolisz plik wsadowy z instrukcjami rcedit w środku, aby go ustawić.
AndresRohrAtlasInformatik
1
to narzędzie jest bardzo paskudne, spójrz na ten błąd przed zastosowaniem go w swoich plikach
Brun,
14

A co z czymś takim?

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

Dostępne tutaj z pełnymi źródłami .

filofel
źródło
Wydawało się, że Verpatch stworzył dla mnie źródło złej wersji produktu (używając tej /va /pvopcji). Wersja pojawiła się poprawnie w Eksploratorze Windows, ale brakowało ostatniego znaku podczas pobierania w kodzie z VerQueryValue. Aby naprawić zły zasób, zrobiłem to: (1) Załaduj bibliotekę DLL w Resource Hacker. (2) Wyświetl zasoby wersji. (3) Kompiluj (zmodyfikuj coś, a następnie zmień z powrotem, aby włączyć przycisk). (4) Zapisz.
dan-gph
verpatch działa świetnie zarówno dla wersji x64, jak i x86 moich bibliotek DLL na moim dev boxie, jednak w projekcie kompilacji apveyor działa tylko dla x64 i nie robi absolutnie nic z dll x86 - też nie ma błędu! jakieś wskazówki, co może się stać? Widzę w dzienniku appveyor, że komenda verpatch jest wykonywana, żadnych błędów, a dll nie jest w jakiś sposób zastępowany i na końcu nie ma znacznika wersji; dla x64 wszystko działa dobrze we wszystkich sytuacjach. jakieś wskazówki proszę?
Ovi
@ Ovi-Wan Kenobi: Nie wiedziałem, co to jest apveyor, ale zgodnie z twoim opisem wygląda to bardziej na problem apveyor. W najgorszym przypadku, jeśli to możliwe, przygotuj się na debugowanie w środowisku apveyor? ...
filofel
11

Jest to narzędzie ChangeVersion [1]

Lista funkcji (ze strony internetowej):

  • interfejs linii komend
  • obsługa plików .EXE, .DLL i .RES
  • zaktualizuj FileVersion i ProductVersion na podstawie maski wersji
  • dodaj / zmień / usuń ciągi kluczy wersji
  • dostosuj flagi plików (debugowanie, specjalne, prywatne itp.)
  • zaktualizuj pliki projektu (.bdsproj | .bpr | .bpk | .dproj)
  • dodaj / zmień główną ikonę aplikacji
  • użyj pliku ini z konfiguracją
  • Obsługa systemu Windows Vista (wymaga podniesienia uprawnień)
  • łatwe do zintegrowania w ciągłym środowisku kompilacji

Pełne ujawnienie: znam gościa, który napisał to narzędzie, pracowałem z nim. Ale to również oznacza, że ​​wiem, że tworzy wysokiej jakości oprogramowanie;)


[1] link nie działa. Wygląda na to, że istnieje wersja lustrzana pod adresem download.cnet.com .

Druga strona
źródło
@Gareth Dodałem łącze lustrzane. Poza tym wątpię, aby ta odpowiedź miała jakąkolwiek wartość bez żadnego roboczego odniesienia.
Wolf
5
Drugi link prowadzi do wygasłego narzędzia"Change Version v2012.9.6.0 - (C)2007-2012 The-Software-Box.com This trial version has expired"
Preet Sangha
2
Po uruchomieniu w wierszu poleceń wyświetla się komunikat „Zmień wersję v2012.9.6.0 - (C) 2007-2012 The-Software-Box.com Ta wersja próbna wygasła”
RDeveloper
10

Robię to bez dodatkowego narzędzia. Właśnie dodałem następujące pliki do mojego projektu aplikacji Win32.

Jeden plik nagłówkowy, który definiuje niektóre stałe, których możemy ponownie użyć w naszym pliku zasobów, a nawet w kodzie programu. Musimy utrzymywać tylko jeden plik. Dzięki zespołowi Qt, który pokazał mi, jak to zrobić w projekcie Qt, teraz działa również w mojej aplikacji Win32.

---- [wersja.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
źródło
2
Po prostu ciekawy; Jak powstrzymałeś system Windows przed nadpisywaniem pliku .rc za każdym razem, gdy zmieniasz okno dialogowe lub modyfikujesz dowolny zasób w projekcie? Widziałem do tej pory kilka takich artykułów i wygląda na to, że zadziałałoby, gdybyś nigdy więcej nie musiał zmieniać zasobu, który spowodowałby automatyczne generowanie przez IDE.
shawn1874
@ shawn1874 - Uwzględnij wiersz #include <windows.h>w resource.hpliku, który został dodany automatycznie. Ten plik nie jest ponownie generowany (uwaga na górze pliku .rc wskazuje, że jest to wygenerowany kod i można go zmodyfikować w projektancie).
CJBS
1
@CJBS to nie odpowiada na pytanie. Chociaż może to zadziałać, nie wyjaśnia, jak może działać opublikowana odpowiedź. W opublikowanej odpowiedzi user3016543 umieszcza wersję.h bezpośrednio w pliku .rc. Jest kilka sposobów radzenia sobie z nadpisywaniem pliku .rc, które wiem, jak to zrobić. Kwestionuję tylko sposób, w jaki ta konkretna odpowiedź jest pokazana, ponieważ nie wygląda to dobrze.
shawn1874
Domyślam się, że ta metoda działa u niego, ponieważ dany komponent nie ma komponentów dialogowych, więc plik nie jest regenerowany często ani nigdy. Jednak w aplikacji systemu Windows z zasobami okna dialogowego MFC nie byłoby to możliwe.
shawn1874
1
Dziękuję za przypomnienie mi o technice, którą po raz pierwszy zobaczyłem w akcji w pliku zasobów dostarczonym z zestawem SDK WinBatch Extender. Minęło tak dużo czasu, odkąd go potrzebowałem, że zapomniałem większości szczegółów. Twoje wyjaśnienie przywróciło to wszystko.
David A. Gray
8

Verpatch jest dobry, ale nie obsługuje znaków Unicode ...
spróbuj ResourceLib

user581430
źródło
6

Istnieje wiele narzędzi, o których wspomina wiele świetnych odpowiedzi, wybiorę jedno.

Resource Hacker

Pobrałem najnowszą wersję ( 5.1.7 ) z [AngusJ]: Resource Hacker . Wszystkie potrzebne informacje można znaleźć na tej stronie (opcje wiersza poleceń, skrypty, ...). W poniższym przewodniku zamierzam operować na 2 plikach wykonywalnych (szczurach laboratoryjnych), które (z oczywistych powodów) skopiowałem w moim cwd :

  • ResourceHacker.exe : Pomyślałem, że byłoby interesujące operowanie na sobie
  • cmake.exe : losowy plik wykonywalny bez informacji o wersji (część instalacji v3.6.3 na moim komputerze)

Zanim przejdę dalej, chciałbym wspomnieć, że ResourceHacker ma zabawne wyjście terminala , a następujące fragmenty kopiuj / wklej mogą spowodować trochę zamieszania.

1. Konfiguracja

Jest to raczej wstępny krok, aby zapoznać się ze środowiskiem, pokazać, że nie dzieje się nic dziwnego, ...

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

Jak widać, pliki wykonywalne są w porządku, działają dobrze, a oto jak wyglądają ich szczegóły (na których nam zależy):

Img0-Initial

2. Zasoby

Pliki zasobów to pliki tekstowe zawierające zasoby. Zasób (uproszczony) ma:

  • Imię
  • Rodzaj
  • Wartość

Aby uzyskać więcej informacji, zobacz [MS.Docs]: About Resource Files . Istnieje wiele narzędzi (wymienionych w istniejących odpowiedziach), które ułatwiają edycję plików zasobów, takich jak:

  • VStudio tworzy domyślny plik podczas rozpoczynania nowego projektu
  • Taki plik można stworzyć ręcznie
  • Ale ponieważ chodzi o Resource Hacker i:

    • Jest w stanie wyodrębnić zasoby z istniejącego pliku wykonywalnego
    • Ma osadzone zasoby (jak pokazano na poprzednim obrazku)

    Użyję tego w tym kroku ( -action extract)

Następnie, aby zasób mógł zostać osadzony w pliku .exe ( .dll , ...), należy go skompilować do postaci binarnej, która pasuje do formatu PE . Ponownie, istnieje wiele narzędzi, które mogą to osiągnąć, ale jak zapewne się domyślasz, pozostanę przy 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

W twoim przypadku zapisywanie i edytowanie pliku zasobów nie będzie konieczne, ponieważ plik będzie już obecny, zrobiłem to tylko w celach demonstracyjnych. Poniżej znajduje się plik zasobów po modyfikacji (a więc przed kompilacją).

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. Osadź

Zostanie to również wykonane przez Resource Hacker ( -action addoverwrite). Ponieważ pliki .exe są już skopiowane, zamierzam edytować ich zasoby w miejscu.

[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

Jak widać, musiałem zrobić małą sztuczkę ( gainarie ), ponieważ nie mogę (przynajmniej nie sądzę, żebym mógł) modyfikować .exe podczas używania.

4. Test

Jest to faza opcjonalna, aby upewnić się, że:

  • Pliki wykonywalne nadal działają (nie zostały pomieszane w trakcie)
  • Zasoby zostały dodane / zaktualizowane
[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

I ich szczegóły :

Img1-Final

CristiFati
źródło
@ColonelPanic: Dziękuję!
CristiFati
Bardzo ładna odpowiedź. Niestety ResourceHacker nie jest już obsługiwany i zabraknie pamięci podczas próby edycji dużego pliku EXE (wystąpił błąd podczas próby otwarcia pliku exe o pojemności 3 GB).
Lews Therin
@LewsTherin: Najnowsza wersja (również używana w odpowiedzi) pochodzi z 2019/01, więc powiedziałbym, że jest całkiem utrzymana. Problem w tym, że jest 32 - bitowy . Możesz skontaktować się z autorami z prośbą o wersję 64-bitową (zakładam, że skoro mają już kod, nie byłoby trudno zbudować ją na 64-bitową ).
CristiFati
3

Dostępna jest konsola Resource Tuner firmy Heaventools Software.

Resource Tuner Console to narzędzie wiersza poleceń, które umożliwia programistom automatyzację edycji różnych typów zasobów w dużej liczbie 32- i 64-bitowych plików wykonywalnych systemu Windows.

Więcej informacji można znaleźć na stronie Zmiana zmiennych wersji i aktualizacja informacji o wersji .

Wylder
źródło
3

Trochę późno na imprezę, ale ponieważ jej szukałem (i być może będę musiał kiedyś to znaleźć), oto co zrobiłem, aby dołączyć wersję, nazwę firmy itp. Do mojej biblioteki DLL C ++ pod VS2013 Express:

  1. Utworzono i edytowano plik dllproj.rc, jak wskazano wcześniej.
  2. Dodano wiersz „rc.exe dllproj.rc” jako krok przed kompilacją w projekcie DLL.
  3. Dodano plik dllproj.res do folderu zasobów projektu.

Mam nadzieję że to pomoże!

Tom Gordon
źródło
3

powyżej odpowiedź od @DannyBeckett bardzo mi pomogło,

Umieszczam następujący plik w pliku wsadowym i umieszczam go w tym samym folderze, w którym znajduje się ResourceHacker.exe i plik EXE, nad którym pracuję, i działa doskonale. [możesz go edytować zgodnie ze swoimi potrzebami]

    @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

[na marginesie, do skompilowania pliku res użyłem hakera zasobów, a nie GoRC]

RDR
źródło
2

W rzeczywistości możesz spróbować pobrać FVIE z łącza pobierania i spróbować edytować informacje dla dowolnego pliku .exe.

(LUB)

Możesz pobrać StampVer - znakowanie zasobów wersji Win32 z linku pobierania, co jest naprawdę przydatne dla plików .exe systemu Windows.

(LUB)

Możesz użyć narzędzia poleceń o nazwie RCEDIT . Pobierz z linku źródłowego Github, a następnie skompiluj za pomocą programu Visual Studio 2015, a następnie masz określone polecenia do zmiany wersji plików .exe. Zobacz link Dokumenty, aby uzyskać dostęp do różnych dostępnych poleceń.

Subash J.
źródło
1

To najlepsze narzędzie, jakie widziałem do tej pracy, umożliwia pełną kontrolę nad wszystkimi zasobami plików, w tym VersionInfo.

Zobacz: ResourceEditor autorstwa Andersa Melandera .

J Collins
źródło
1
Pobieranie dla Edytora zasobów (0 bajtów) nie działa.
Jack