기존 .exe, .dll에 대한 버전 정보를 어떻게 설정합니까?


113

빌드 프로세스의 일부로 컴파일 된 모든 바이너리에 대한 버전 정보를 설정해야합니다. 일부 바이너리에는 이미 버전 정보 (컴파일시 추가됨)가 있고 일부는 그렇지 않습니다.

다음 정보를 적용하고 싶습니다.

  • 회사 이름
  • 저작권 고지
  • 상품명
  • 제품 설명
  • 파일 버전
  • 제품 버전

이러한 모든 속성은 빌드 스크립트에 의해 지정되며 컴파일 후에 적용되어야합니다. C ++ Builder 2007로 컴파일 된 표준 바이너리 (어셈블리가 아님)입니다.

어떻게 할 수 있습니까?


ResourceHacker를 사용하는 이유는 무엇 입니까? 작업이 정확히 어떻게 설정되어 있습니까? 어떤 문제에서 UpdateResource기능을 사용 하는 경우 기존 pe의 작업 업데이트 버전
— RbMm

이 시도 : alternativeto.net/software/xn-resource-editor을 , 나는 리버스 엔지니어링 도구가이 않는 생각
— i_thamary

답변:


59

배치 프로세스는 아니지만 Visual Studio는 파일 리소스를 추가 / 편집 할 수도 있습니다.

.EXE 또는 .DLL에서 파일-> 열기-> 파일을 사용하십시오. 이는 빌드 후 버전 정보를 수정하거나 시작할 이러한 리소스가없는 파일에 추가하는 데 유용합니다.


8
이것은 내가 그것을 시도했을 때 완벽하게 작동했습니다. 버전 정보가 완전히 누락 된 파일의 경우 : Visual Studio에서 DLL을 연 후 편집> 리소스 추가> 버전으로 이동하고 새로 만들기를 클릭합니다. 그런 다음 새 버전 탭에서 FILEVERSION 및 PRODUCTVERSION, CompanyName 등을 변경합니다. 파일을 저장하면 모든 설정이 완료됩니다!
— twasbrillig 2014

2
@UweBaemayr. 당신이 인용 한 대답은 내가 똑같은 포스트 빌드를하고 내가 그것을 자동화하고 싶은 것처럼 우리가 그것을 자동화 할 수있는 것과 똑같이 묻고 싶다. 하지만 어떻게?
— SteveScm

1
내 오래된 Delphi win32 dll의 경우 이것은 작동하지 않습니다. dll 정보가 올바르게 변경되었지만 온 전성 검사를 실행할 때 손상되었음을 알 수 있습니다.
— sthiers

3
Windows 8, VS 2015에서이 (버전 정보 추가)를 시도했으며 Windows 탐색기에서 모두 좋습니다. 단 ... 실행 파일이 더 이상 시작되지 않습니다.
— Liviu

36

다른 많은 답변과 달리이 솔루션은 완전히 무료 소프트웨어를 사용합니다.

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

다음으로 GoRC 를 사용하여 다음을 사용 하여 .res파일 로 컴파일합니다 .

GoRC /fo Resources.res Resources.rc

(의 거울은 아래 내 의견 참조 GoRC.exe)

그런 다음 CLI 모드에서 Resource Hacker 를 사용 하여 기존에 추가하십시오 .exe.

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

그게 다야!


1
@CharlesB 나는 나 자신을 발견했지만 올바른 링크입니다. 누군가 웹 호스트에 돈을 지불하는 것을 잊은 것 같습니다! 여기 바이너리가 있습니다. 공개 Assembla 계정에 미러링했습니다 : assembla.com/code/danny-beckett/subversion/nodes/13/GoRC.exe
— Danny Beckett

3
GoRC 대신 Microsoft Resource Compiler 를 사용할 수도 있습니다 . Windows SDK에서 사용할 수 있습니다.
— Holistic Developer

Resource Hacker에 대한 엄지 손가락, 나는이 답변을 기반으로 사용했으며 훌륭하고 훌륭한 프로그램입니다. ;-) 프로그램이나 메이커 (친 화성 없습니다
— user2109254

@UweKeim 나는 이것을 한동안 사용하지 않았지만 그들이 필요하다고 확신합니다.
— Danny Beckett

6
명령 줄이 약간 변경된 것 같습니다. ResourceHacker.exe -open Source.dll -save Changed.dll -action addoverwrite -resource Version.res또한 ResourceHacker는 .rc 파일 자체를 컴파일 할 수 있습니다.ResourceHacker.exe -open Version.rc -save Version.res -action compile
— Yusuf Tarık Günaydın

23

또는 Win32 exe / dll 파일 용 프리웨어 StampVer 를 확인할 수 있습니다.
이미 버전 리소스가있는 경우에만 파일 및 제품 버전을 변경합니다. 버전 리소스가 없으면 추가 할 수 없습니다.


19

rcedit 는 비교적 새롭고 명령 줄에서 잘 작동합니다 : 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"

Grunt를 사용하는 경우 JavaScript 및 Grunt 작업 에서 이를 래핑 하는 NPM 모듈 도 있습니다 .


5
rcedit는 새 리소스를 삽입하지 않고 기존 리소스 만 수정할 수 있습니다.
— Bevan에 콜린스

2
7zip sfx 아카이브에서는 작동하지 않습니다. : / 7zip 아카이브 부분을 잘라냅니다.
— Mgamerz

1
이 시도는 동일한 디렉토리에있을 때 파일을로드 할 수 없음을 계속 제공하고 도구가 호스트 구성에 의존 할 수있는 것처럼 보입니다
— Arijoon

자동 압축 해제 아카이브를 함께 연결하는 데 사용하는 VERSIONINFO가 포함 된 첫 번째 부분 인 7zS.sfx 스텁과 함께 작동합니다. 수동으로 7zS.exe에서 7zS.sfx의 이름을 바꾸고 Visual Studio에서 편집 할 수도 있지만 모든 빌드에 대해 버전 번호가 변경되므로 내부에 rcedit 문이있는 배치 파일을 사용하여 설정하는 것이 좋습니다.
— AndresRohrAtlasInformatik

1
이 도구는 매우 불쾌합니다. 바이너리에 적용하기 전에이 버그를 살펴보십시오. github.com/electron/rcedit/issues/51
— Brun

14

이런 건 어때?

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

여기에서 전체 소스를 사용할 수 있습니다 .


Verpatch는 /va /pv옵션을 사용하여 나에게 잘못된 제품 버전 리소스를 생성하는 것처럼 보였습니다 . 버전이 Windows 탐색기에 올바르게 표시되었지만 .NET Framework를 사용하여 코드에서 검색 할 때 마지막 문자가 누락되었습니다 VerQueryValue. 잘못된 리소스를 수정하기 위해 다음과 같이했습니다. (1) Resource Hacker에 DLL을로드합니다. (2) 버전 리소스를 봅니다. (3) 컴파일 (무엇을 수정 한 다음 버튼을 활성화하도록 다시 변경). (4) 저장합니다.
— dan-gph 2013-04-23

verpatch는 내 dev 상자에서 내 DLL의 x64 및 x86 버전 모두에서 훌륭하게 작동하지만 apveyor 빌드 프로젝트에서는 x64에서만 작동하며 x86 dll에 절대적으로 아무것도하지 않습니다. 오류도 없습니다! 무슨 일이 일어날 지 힌트가 있습니까? appveyor 로그에서 verpatch 명령이 실행되고 오류가 없으며 dll이 어떻게 든 교체되지 않고 결국 버전 스탬프가 없음을 알 수 있습니다. x64의 경우 모든 상황에서 모든 것이 잘 작동합니다. 단서가 있습니까?
— Ovi

@ Ovi-Wan Kenobi : 나는 apveyor가 무엇인지 몰랐지만 설명에 따르면 apveyor 문제처럼 보입니다. ? 그게 가능하다면 최악의 경우는 apveyor 환경에서 디버깅을위한 준비 ...
— filofel

10

이 도구 ChangeVersion [1]이 있습니다.

기능 목록 (웹 사이트에서) :

  • 명령 줄 인터페이스
  • .EXE, .DLL 및 .RES 파일 지원
  • 버전 마스크를 기반으로 FileVersion 및 ProductVersion 업데이트
  • 버전 키 문자열 추가 / 변경 / 제거
  • 파일 플래그 조정 (디버그, 특수, 개인 등)
  • 프로젝트 파일 업데이트 (.bdsproj | .bpr | .bpk | .dproj)
  • 메인 애플리케이션 아이콘 추가 / 변경
  • 구성과 함께 ini 파일 사용
  • Windows Vista 지원 (승격 필요)
  • 지속적인 빌드 환경에 쉽게 통합

전체 공개 :이 도구를 작성한 사람을 알고 있으며 그와 함께 작업했습니다. 그러나 이것은 또한 그가 양질의 소프트웨어를 만드는 것을 알고 있음을 의미합니다.)


[1] 링크가 끊어졌습니다. download.cnet.com에 미러링 된 버전이있는 것 같습니다 .


@Gareth 미러 링크를 추가했습니다. 다른 한편, 나는이 답변이 작업 참조없이 가치가 있다고 의심합니다.
— 늑대

5
만료 된 도구의 두 번째 링크 결과"Change Version v2012.9.6.0 - (C)2007-2012 The-Software-Box.com This trial version has expired"
— Preet 승가

2
명령 줄에서 실행하면 말한다 "변경 버전 v2012.9.6.0 - (C) 2,007에서 2,012 사이 The-Software-Box.com 평가 기간이 만료되었습니다"
— RDeveloper

10

추가 도구없이하고 있습니다. 내 Win32 앱 프로젝트에 다음 파일을 추가했습니다.

리소스 파일과 프로그램 코드에서 재사용 할 수있는 몇 가지 상수를 정의하는 하나의 헤더 파일입니다. 하나의 파일 만 유지하면됩니다. Qt 프로젝트에서 수행하는 방법을 보여준 Qt 팀 덕분에 이제 내 Win32 앱에서도 작동합니다.

---- [버전 .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
그냥 궁금합니다. 대화 상자를 변경하거나 프로젝트의 리소스를 수정할 때마다 Windows가 .rc 파일을 덮어 쓰는 것을 어떻게 막았습니까? 지금까지 이와 같은 몇 가지 기사를 보았고 IDE에서 자동 생성을 유발하는 리소스를 다시 변경할 필요가 없다면 작동 할 것 같습니다.
— shawn1874

@ shawn1874- 자동으로 추가 #include <windows.h>되는 resource.h파일에 줄 을 포함합니다 . 해당 파일은 다시 생성되지 않습니다 (.rc 파일 맨 위에 생성 된 코드임을 나타내며 디자이너에서 수정할 수 있음).
— CJBS

1
질문에 대답하지 않는 @CJBS. 작동 할 수도 있지만 게시 된 답변이 작동하는 방식을 설명하지 않습니다. 게시 된 답변에서 user3016543은 .rc 파일에 직접 version.h를 포함합니다. 내가하는 방법을 알고있는 .rc 파일의 덮어 쓰기를 처리하는 방법에는 여러 가지가 있습니다. 나는이 특정 답변이 나에게 옳지 않아 보이는 방식에 대해서만 질문하고 있습니다.
— shawn1874

문제의 구성 요소에는 대화 상자 구성 요소가 없으므로 파일이 자주 또는 한 번도 다시 생성되지 않기 때문에 그 방법이 그를 위해 작동한다고 생각합니다. 그러나 MFC 대화 상자 리소스가있는 Windows 응용 프로그램에서는 그렇지 않습니다.
— shawn1874

1
WinBatch Extender SDK와 함께 제공되는 리소스 파일에서 처음 본 기술을 상기시켜 주셔서 감사합니다. 내가 그것을 필요로한지 너무 오래되어서 대부분의 세부 사항을 잊어 버렸습니다. 당신의 설명은 모든 것을 다시 가져 왔습니다.
— 데이비드 A. 그레이


6

많은 훌륭한 답변에서 언급 된 여러 도구가 있습니다. 하나를 선택하겠습니다.

리소스 해커

[AngusJ] : Resource Hacker 에서 최신 버전 ( 5.1.7 )을 다운로드했습니다 . 필요한 모든 정보는 해당 페이지에서 찾을 수 있습니다 (명령 줄 옵션, 스크립트 등). 다음 연습에서는 (분명한 이유로) 내 cwd에 복사 한 2 개의 실행 파일 (실험실 쥐)에 대해 작업 할 것입니다 .

  • ResourceHacker.exe : 자체적으로 작동하는 것이 재미있을 것이라고 생각했습니다.
  • cmake.exe : 버전 정보가 설정 되지 않은 임의 실행 파일 ( 내 컴퓨터 에 v3.6.3 설치의 일부 )

더 진행하기 전에 ResourceHacker 에 재미있는 터미널 출력 이 있으며 다음 복사 / 붙여 넣기 조각이 약간의 혼란을 일으킬 수 있음을 언급하고 싶습니다 .

1. 설정

이것은 환경에 익숙해지고 펑키 한 사업이 진행되지 않음을 보여주기위한 예비 단계와 비슷합니다.

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

보시다시피, 실행 파일은 정상이며 잘 실행되며 세부 정보 (우리가 관심을 갖는)는 다음과 같습니다.

Img0- 초기

2. 자원

리소스 파일은 리소스가 포함 된 텍스트 파일입니다. 자원 (단순화)에는 다음이 있습니다.

  • 이름
  • 유형
  • 값

자세한 내용은 [MS.Docs] : 리소스 파일 정보를 확인하십시오 . 다음과 같이 리소스 파일 편집을 용이하게하는 많은 도구 (기존 답변에 언급 됨)가 있습니다.

  • VStudio 는 새 프로젝트를 시작할 때 기본을 만듭니다.
  • 이러한 파일을 수동으로 만들 수 있습니다.
  • 그러나 Resource Hacker 에 관한 것이므로 다음 과 같습니다.

    • 기존 실행 파일에서 리소스를 추출 할 수 있습니다.
    • 여기에 포함 된 리소스가 있습니다 (이전 그림 참조).

    이 단계 ( -action extract) 에 사용하겠습니다.

다음으로 리소스를 .exe ( .dll , ...) 에 포함하려면 PE 형식에 맞는 바이너리 형식 으로 컴파일 해야 합니다. 다시 말하지만,이를 달성 할 수있는 많은 도구가 있지만 아마 짐작 하셨겠지만 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

귀하의 경우에는 리소스 파일을 저장하고 편집 할 필요가 없습니다. 파일이 이미 존재하므로 데모 목적으로 만 수행했습니다. 그 아래에는 수정 된 후 (따라서 컴파일되기 전) 리소스 파일이 있습니다.

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. 삽입

이것은 또한 Resource Hacker ( -action addoverwrite)에 의해 수행됩니다 . 이후 .EXE 의 이미 나는이 자리에 자원을 편집 할거야 복사됩니다.

[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

보시다시피, 나는 사용 중에 .exe 를 수정할 수 없기 때문에 (적어도 나는 할 수 있다고 생각하지 않기 때문에 ) 약간의 속임수를 써야했습니다 ( gainarie ) .

4. 테스트

이는 다음을 확인하기위한 선택적 단계입니다.

  • 실행 파일은 여전히 ​​작동합니다 (프로세스에서 엉망이되지 않았습니다).
  • 리소스가 추가 / 업데이트되었습니다.
[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

그리고 그들의 세부 사항 :

Img1- 최종


@ColonelPanic : 감사합니다!
— CristiFati

아주 좋은 대답입니다. 불행히도 ResourceHacker는 더 이상 유지 관리되지 않으며 대용량 EXE 파일을 편집하려고 할 때 메모리가 부족합니다 (3GB exe를 열 때 오류가 발생했습니다).
— Lews Therin 19

@LewsTherin : 최신 버전 (답변에서도 사용됨)은 2019/01의 것이므로 꽤 유지되고 있다고 말하고 싶습니다. 문제는 그것이 32 비트 라는 것 입니다. 64 비트 버전을 요청하는 작성자에게 연락 할 수 있습니다 (이미 코드가 있으므로 64 비트 용으로 빌드하는 것이 어렵지 않을 것이라고 가정합니다 ).
— CristiFati


3

파티에 조금 늦었지만 내가 찾고 있었기 때문에 (언젠가 다시 찾아야 할 수도 있음) VS2013 Express 아래의 C ++ DLL에 버전, 회사 이름 등을 포함하기 위해 수행 한 작업은 다음과 같습니다.

  1. 앞에서 설명한대로 dllproj.rc 파일을 만들고 편집했습니다.
  2. DLL 프로젝트에서 사전 빌드 단계로 "rc.exe dllproj.rc"줄을 추가했습니다.
  3. 프로젝트의 리소스 폴더에 dllproj.res를 추가했습니다.

도움이 되었기를 바랍니다!


3

@DannyBeckett 의 위 답변은 나를 많이 도왔습니다.

다음을 배치 파일에 넣고 ResourceHacker.exe 및 내가 작업하는 EXE가있는 동일한 폴더에 배치하고 훌륭하게 작동합니다. [필요에 맞게 편집 할 수 있습니다.]

    @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

[참고로 나는 리소스 해커를 사용하여 GoRC가 아닌 res 파일을 컴파일했습니다.]


2

실제로 다운로드 링크 에서 FVIE 를 다운로드 하고 .exe 파일에 대한 정보를 편집 해 볼 수 있습니다 .

(또는)

Windows .exe 파일에 매우 유용한 다운로드 링크 에서 StampVer – Win32 버전 리소스 스탬프 를 다운로드 할 수 있습니다 .

(또는)

RCEDIT 라는 명령 도구를 사용할 수 있습니다 . Github 소스 링크 에서 다운로드 한 다음 Visual Studio 2015를 사용하여 빌드하면 .exe 파일의 버전을 변경하는 특정 명령이 있습니다. 사용 가능한 다양한 명령 은 문서 링크 를 참조하세요 .


1

이것은 내가 본 최고의 도구이며 VersionInfo가 포함 된 모든 파일 리소스를 완벽하게 제어 할 수 있습니다.

참조 : ResourceEditor by Anders Melander .


1
리소스 편집기 (0 바이트) 다운로드가 중단되었습니다.
— Jack
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.