7zip 실행 압축으로 설치 프로그램 만들어 주는 배치(batch) 파일 (7zip sfx batch)
만일 아래와 같이, 여러개의 파일로 구성된 설치 프로그램을 가정해 봅시다.
. │ somedata.dat │ build.txt │ Setup.exe │ ├─CAB │ inst.cab │ ├─RES │ string.txt │ ci.bmp │ ├─CUSTOM │ custom.ini │ └─DATA data1.cab data2.cab |
위 파일들을 하나의 .exe로 묶어, 실행시 최상위 Setup.exe를 실행하려면, 실행압축을 이용하여 해결할 수 있습니다. 보통 winrar를 이용할 수 있으나, 라이센스 이슈가 있어, 추가 확인이 필요할 것입니다.
그래서 7zip의 실행압축을 이용할 수 있는데, 이는 다른 plugin을 가져와야 하고, 명령행 인자를 공부(?)해야 하는 상황이 발생합니다. 이를 해결하기 위해, 배치 파일(.bat)를 공유해, 한큐에 생성 가능하도록 하는 스크립트를 만들어 볼 수 있습니다.
우선, 7zsd_All.sfx를 다운로드 받아야 합니다.
(구글등에서 7zsd_all.sfx download로 검색하세요. 그리고, 필히 virustotal.com등에 감염 여부를 확인하시기 바랍니다. 저는, 7zsd_tools_150_2712.7z를 사용하였습니다. 해당 파일명으로 검색해 보세요.)
다음으로 7z.dll / 7z.exe가 필요한데, 7zip을 설치하면 C:\Program Files\7-Zip에 포함된 파일을 사용하면 됩니다.
마지막으로, 7zsd_All.sfx의 리소스를 수정해야 합니다.
만일, 하나의 .exe로 묶을 경우, 실제로 그 아이콘이나 파일 정보등이 변경되어야 할 것입니다.
그래서, Resource Hacker를 이용할 수 있는데, 구글등에서 쉽게 찾아서 다운로드 할 수 있습니다.
Resource Hacker에서 7zsd_All.sfx를 로드합니다. (해당 .sfx 파일은 실제 .exe 파일입니다.)
하여 새로운 아이콘 파일로 변경할 수 있습니다.
위와 같이 Version Info를 변경하여, 파일 등록 정보를 변경할 수 있습니다. 변경후 "컴파일" 버튼을 눌러줍니다.
이런 과정으로 리소스를 수정한뒤, Resource Hacker의 파일->다른이름으로 저장하여 새로운 7zsd_All.sfx로 덮어 씁니다.
이렇게 생성된 7zsd_All.sfx을 이용하여 실행압축을 하게 되는데, 다음과 같은 config.txt가 필요합니다.
;!@Install@!UTF-8! Title="MY INSTALLER" ExecuteParameters="" RunProgram="Setup.exe" Progress="no" ;!@InstallEnd@! |
(자세한 설명은 구글등에서 "7zsfx config.txt"로 검색해 보시기 바랍니다.)
눈치가 있다면 확인이 바로되는데, 그런데 실제로 테스트해보니 "ExecuteParameters"는 잘 동작하지 않는듯 하였습니다. 만일 Setup.exe의 parameter가 필요하다면, RunProgram="Setup.exe /argument"와 같이 전달하시기 바랍니다.
Setup.exe를 실행하기전 압축을 푼뒤 실행하는데, 만일 파일의 크기가 크다면, Setup.exe 실행후 시간이 걸려, 사용자 반응이 느려질 수 있습니다. Progress="yes"가 전달된다면 압축을 풀때 Progress UI가 표시되기도 합니다.
참고로 만일, UAC등이 필요하다면, 내부에서 실행되는 Setup.exe의 manifest를 이용하시기 바랍니다.
이렇다면, 다음과 같이 _Build.bat 파일을 생성할 수 있습니다.
@echo off @rem 이전 Setup.exe, Setup.7z 삭제한다. del Setup.exe del Setup.7z @rem MASTER 경로에 있는 파일을 압축한다. @rem 경로를 변경하여, 압축시 MASTER 경로가 포함되지 않도록 한다. cd MASTER ..\7z a ..\Setup.7z .\*.* -r @rem 이제 다시 원래 경로로 복귀한다. cd .. @rem 아래 명령을 실행하여 Setup.exe를 생성한다. copy /b 7zsd_All.sfx + config.txt + Setup.7z Setup.exe pause |
실행전, 다음과 같은 폴더 구조가 되어야 합니다.
|
즉, 함께 묶여 실행될 파일들을 MASTER 경로에 두고, 그 상위 경로는 7z.dll / 7z.exe 가 있어야 하며, 위에서 생성한 7zsd_All.sfx와 config.txt가 있어야 합니다. 그리고 바로위에 있는 내용을 참고하여 _Build.bat도 저장합니다.
이제, _Build.bat를 실행하면, 다음과 같이 Setup.exe가 생성됩니다.
E:\....>_Build.bat 7-Zip 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
Scanning
Creating archive ..\Setup.7z
Compressing Build.txt
Compressing somedata.dat
Compressing Setup.exe
Everything is Ok
7zsd_All.sfx
config.txt
Setup.7z
1개 파일이 복사되었습니다.
계속하려면 아무 키나 누르십시오 . . . |
아마도 _Build.bat가 있는 경로에 새로운 Setup.exe가 포함되어 있을 것입니다.
'프로그래밍 > Let's Share it' 카테고리의 다른 글
Linux/gcc에서 CStringA MFC Class 사용하기 (0) | 2015.11.24 |
---|---|
Registry 변경 감시를 위한 간단 코드 공유 (1) | 2014.11.07 |
개발자 필수 유틸 FindInFiles 공유 (ToolsCode) (1) | 2014.07.17 |
.cab 파일 압축 해제 코드 (0) | 2014.03.10 |
data serialize (데이터 직렬화) 공유 (0) | 2013.08.05 |