기존 .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에 버전, 회사 이름 등을 포함하기 위해 수행 한 작업은 다음과 같습니다.
- 앞에서 설명한대로 dllproj.rc 파일을 만들고 편집했습니다.
- DLL 프로젝트에서 사전 빌드 단계로 "rc.exe dllproj.rc"줄을 추가했습니다.
- 프로젝트의 리소스 폴더에 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
보시다시피 실행 파일은 정상이며 정상적으로 실행되며 세부 정보 (우리가 관심을 갖는)는 다음과 같습니다.
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
그리고 그들의 세부 사항 :
이것은 내가 본 최고의 도구이며 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/
'IT박스' 카테고리의 다른 글
Jackson과 함께 사용자 지정 Serializer를 어떻게 사용합니까? (0) | 2020.08.18 |
---|---|
RSpec : 설명, 컨텍스트, 기능, 시나리오? (0) | 2020.08.18 |
jQuery-요소에 클래스가있는 경우이를 수행 (0) | 2020.08.18 |
다른 git repo 안에 git repo 유지 (0) | 2020.08.18 |
구조체를 0으로 초기화 (0) | 2020.08.18 |