IT박스

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

itboxs 2020. 8. 18. 07:28
반응형

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


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

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

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

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

어떻게 할 수 있습니까?


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

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


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

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

그게 다야!


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


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 모듈있습니다.


이런 건 어때?

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

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


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

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

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

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


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


verpatch는 좋지만 유니 코드 문자를 처리하지 않습니다 ... ResourceLib를 사용
해보세요


추가 도구없이하고 있습니다. 방금 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

자원 튜너 콘솔 HeavenTools의 소프트웨어에서이.

리소스 튜너 콘솔은 개발자가 많은 수의 Windows 32 비트 및 64 비트 실행 파일에서 다양한 리소스 유형의 편집을 자동화 할 수 있도록하는 명령 줄 도구입니다.

자세한 내용은 특히 버전 변수 변경 및 버전 정보 업데이트 페이지를 참조하십시오.


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

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

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


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

(또는)

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

(또는)

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


리소스 해커

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

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

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

1. 설정

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

e:\Work\Dev\StackOverflow\q000284258>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

e:\Work\Dev\StackOverflow\q000284258>set PATH=%PATH%;c:\Install\x64\CMake\CMake\3.6.3\bin

e:\Work\Dev\StackOverflow\q000284258>.\cmake --help >nul 2>&1

e:\Work\Dev\StackOverflow\q000284258>echo %errorlevel%
0

e:\Work\Dev\StackOverflow\q000284258>.\ResourceHacker.exe -help

e:\Work\Dev\StackOverflow\q000284258>

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




e:\Work\Dev\StackOverflow\q000284258>echo %errorlevel%
0

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

Img0- 초기

2. 자원

리소스 파일은 리소스가 포함 된 텍스트 파일입니다. 리소스 (간체)에는 다음이 포함됩니다.

  • 이름
  • 유형

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

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

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

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

다음으로 리소스를 .exe ( .dll , ...) 에 포함하려면 PE 형식에 맞는 이진 형식 으로 컴파일 해야 합니다. 다시 말하지만,이를 달성 할 수있는 많은 도구가 있지만 아마도 짐작 하셨겠지만 Resource Hacker ( ) 를 고수 할 것 입니다.-action compile

e:\Work\Dev\StackOverflow\q000284258>:: Extract the resources into a file
e:\Work\Dev\StackOverflow\q000284258>.\ResourceHacker.exe -open .\ResourceHacker.exe -save .\sample.rc -action extract -mask VersionInfo,, -log con

e:\Work\Dev\StackOverflow\q000284258>

[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!

e:\Work\Dev\StackOverflow\q000284258>:: Modify the resource file and set our own values
e:\Work\Dev\StackOverflow\q000284258>
e:\Work\Dev\StackOverflow\q000284258>:: Compile the resource file
e:\Work\Dev\StackOverflow\q000284258>.\ResourceHacker.exe -open .\sample.rc -save .\sample.res -action compile -log con

e:\Work\Dev\StackOverflow\q000284258>

[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!

e:\Work\Dev\StackOverflow\q000284258>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. 삽입

리소스 해커 ( -action addoverwrite) 도이 작업을 수행합니다 . 이후 .EXE 의 이미 나는이 자리에 자원을 편집 할거야 복사됩니다.

e:\Work\Dev\StackOverflow\q000284258>.\ResourceHacker.exe -open .\cmake.exe -save .\cmake.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con

e:\Work\Dev\StackOverflow\q000284258>

[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!

e:\Work\Dev\StackOverflow\q000284258>copy ResourceHacker.exe ResourceHackerTemp.exe
        1 file(s) copied.

e:\Work\Dev\StackOverflow\q000284258>.\ResourceHackerTemp.exe -open .\ResourceHacker.exe -save .\ResourceHacker.exe -res .\sample.res -action addoverwrite -mask VersionInfo,, -log con

e:\Work\Dev\StackOverflow\q000284258>

[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!

e:\Work\Dev\StackOverflow\q000284258>del /f /q ResourceHackerTemp.*

e:\Work\Dev\StackOverflow\q000284258>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. 테스트

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

  • 실행 파일은 여전히 ​​작동합니다 (프로세스에서 엉망이되지 않았습니다).
  • 리소스가 추가 / 업데이트되었습니다.
e:\Work\Dev\StackOverflow\q000284258>.\cmake --help >nul 2>&1

e:\Work\Dev\StackOverflow\q000284258>echo %errorlevel%
0

e:\Work\Dev\StackOverflow\q000284258>.\ResourceHacker.exe -help

e:\Work\Dev\StackOverflow\q000284258>

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




e:\Work\Dev\StackOverflow\q000284258>echo %errorlevel%
0

그리고 그들의 세부 사항 :

Img1- 최종


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

참조 : ResourceEditor by Anders Melander .


https://www.apriorit.com/dev-blog/366-software-reverse-engineering-toolsreverse engineering 와 같이 Interactive Disassembler더 많은 도구에 대한 많은 정보를 변경할 수있는 곳 과 같은 많은 도구가 있습니다 . 다음 도구를 사용해보십시오 https://alternativeto.net/software/xn-resource-editor/

참고 URL : https://stackoverflow.com/questions/284258/how-do-i-set-the-version-information-for-an-existing-exe-dll

반응형