많은 훌륭한 답변에서 언급 된 여러 도구가 있습니다. 하나를 선택하겠습니다.
리소스 해커
[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
보시다시피, 실행 파일은 정상이며 잘 실행되며 세부 정보 (우리가 관심을 갖는)는 다음과 같습니다.
2. 자원
리소스 파일은 리소스가 포함 된 텍스트 파일입니다. 자원 (단순화)에는 다음이 있습니다.
자세한 내용은 [MS.Docs] : 리소스 파일 정보를 확인하십시오 . 다음과 같이 리소스 파일 편집을 용이하게하는 많은 도구 (기존 답변에 언급 됨)가 있습니다.
다음으로 리소스를 .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
그리고 그들의 세부 사항 :
UpdateResource
기능을 사용 하는 경우 기존 pe의 작업 업데이트 버전