기존 .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.