출처 : http://blog.empas.com/bwangel/9314543
원문 :
http://www.nullsoft.com/free/nsis/makensis.htm 주로 이용하는 것들 (
NSIS/예제1,
NSIS/예제2,
NSIS/예제3 을 작성할 때 필요한 것 정도의 수준)위주로 정리. 좀 더 자세한 것에 대해서는 원문을 참조.
- Installer attributes
- General
- Install Directory
- License Page - 라이센스 관련 페이지에 쓰이는 속성들
- Component Page - 설치할 항목을 선택하는 페이지에 쓰이는 속성들
- Directory Page - 설치할 디렉토리를 선택하는 페이지에 쓰이는 속성들
- Install Page - 실질적인 Install 화면을 표시하는 페이지에 쓰이는 속성들
- Uninstall
- Compiler Flags
- Section
- Function (함수)
- 유의 사항
- attribute
- Labels
- Instructions
- Basic
- Registry/INI
- Advanced
- Branching/etc
- File/directory i/o
- Misc
- Strings
- Stack
- Integers
- Reboot
- Uninstall
- Variables
- modifiable variables that are usable in Instructions
- constant variables that are usable in Instructions and InstallDir
- usable anywhere in a string
- Uninstall Section
- Callback functions
- Install callback
- Uninstall callback
- Compiler utility commands
- Compiler defines / conditional compilation
| attribute | parameter example | 설명 |
| OutFile? | "example.exe" | 인스톨러의 화일 이름 |
| Name | "zp_exam_project" | 인스톨러 이름 (보통은 인스톨하려는 프로그램의 이름) |
| Caption | "zeropage" | 인스톨러의 titlebar 관련 caption. default는 "Name Setup" |
| SubCaption? | 0 ": 라이센스기록" | 인스톨러 각 페이지 관련 부타이틀 |
|
| 0 - License Agreement |
|
| 1 - Installation Options |
|
| 2 - Installation Directory |
|
| 3 - Installing Files |
|
| 4 - Completed |
| BrandingText? | "ZeroPage Installer System v1.0" | 인스톨러 하단부에 보여지는 텍스트 |
| Icon | "setup.ico" | Installer 의 아이콘. 반드시 32*32*16 color 이여야 한다. |
| WindowIcon? | on | off | Icon 을 표시할 것인지 말것인지 결정 |
| BGGradient | 000000 308030 FFFFFF | 그라데이션 배경화면의 이용. 16진수 RGB값으로 표현 |
|
| 기본인자는 off | topcolor bottomcolor captiontextcolor | notext |
| MiscButtonText? | "이전" "다음" "취소" "닫기" | 각 버튼들에 대한 text 설정 (순서대로) |
| InstallButtonText? | "설치 | Install 버튼에 대한 text 의 설정 |
| attribute | parameter example | 설명 |
| InstallDir? | $PROGRAMFILESexample | 기본 설치 디렉토리 |
| InstallDirRegKey? | . | . |
| attribute | parameter example | 설명 |
| LicenseText? | "인스톨 하기 전 이 문구를 읽어주십시오" "동의합니다" | license text 에서의 구체적 문구 |
|
| 인자는 text buttontext. buttontext 가 없으면 기본적으로 "I Agree" |
| LicenseData? | zp_license.txt | 해당 license 문구 텍스트가 담긴 화일 |
| attribute | parameter example | 설명 |
| ComponentText? | "해당 컴포넌트를 골라주세요" | 기본인자는 text subtext1 subtext2 |
|
| component list 관련 표시될 텍스트. |
| InstType? | "Full Install" | Install 관련 component type 에 대한 정의. 순서대로 1,2,3,4...8 까지의 번호들이 매겨지며, 이는 추후 SectionIn? 에서 해당 component 에 대한 포함관계시에 적용된다. |
| EnabledBitmap? | enabled.bmp | component 선택 관련 체크된 항목 bitmap. 20*20*16 color bmp format. |
| DisabledBitmap? | disabled.bmp | component 선택 관련 체크되지 않은 항목 bitmap. 20*20*16 color bmp format. |
| SpaceTexts? | "필요요구용량" "이용가능한용량" | "Space required:", "Space available:" 에 대한 표현 관련 텍스트 |
| attribute | parameter example | 설명 |
| DirShow? | show | 디렉토리 설정 화면 표시여부 |
| DirText? | "설치할 디렉토리를 골라주십시오" "인스톨할 디렉토리설정" "폴더탐색" | 디렉토리 선택 페이지에서의 각각 문구들의 설정. |
| AllowRootDirInstall? | false | 루트디렉토리에 설치할 수 있도록 허용할것인지에 대한 여부 |
| attribute | parameter example | 설명 |
| InstallColors? | FFFF00 000000 | foregroundcolor backgroundcolor. 또는 /windows 옵션을 이용가능 |
| InstProgressFlags? | smooth colored | smooth, colored. colored 를 설정시는 InstallColors? 의 색으로 적용 |
| AutoCloseWindow? | false | 인스톨 완료시 자동으로 인스톨 윈도우를 닫을것인지에 대한 여부 |
| ShowInstDetails? | show | hide | show | nevershow . install 되는 화면을 보여줄 것인지에 대한 여부 |
| DetailsButtonText? | "Show Details" | "Show details" 버튼의 text 에 대한 설정 |
| CompletedText? | "완료되었습니다" | "Completed" 문구 text에 대한 설정 |
Uninstall 화면에 대한 설정들.
| attribute | parameter | 설명 |
| UninstallText? | text subtext? | . |
| UninstallIcon? | path_to_icon.ico | 32*32*16 color icon |
| UninstallCaption? | caption | . |
| UninstallSubCaption? | page_number subcaption | 0: Confirmation, 1:Uninstalling Files, 2:Completed |
| ShowUninstDetails? | hide | show | nevershow | . |
| UninstallButtonText? | button text? | . |
Section 은 설치를 위한 일종의 하나의 모듈, 컴포넌트이다. Section 과 InstType? 은 다르다.
InstType
? 하나당 여러개의 Section 묶음으로 되어있는 것이다. 사용자는 각각의 Section 에 대해 활성/비활성화 함으로서 설치될 모듈들을 고를 수 있다.
단, Uninstall Section은 언인스톨을 위한 특수한 Section이다.
| attribute | parameter example | 설명 |
| Section | "ZPTest Defaults Modules (required)" | Section 의 시작을 알린다. Section의 이름을 설정. 만일 Section의 이름이 비어있거나 '-'로 시작되는 경우에는 사용자가 선택할 수 없고, 볼 수도 없다. (즉, 반드시 필요한 Section에 대해). 그리고 가장 처음으로 선언되는 Section은 default Section이 되며 역시 필수 Section이 된다. |
| SectionIn? | 123 or 1-2-3 | 위에 적은 InstType? 에 포함되는 Type의 번호를 넣는다. |
| SectionEnd? |
| Section의 끝을 알리는 attribute |
| SectionDivider? | " additional utilities " | 각 Section 간 절취선. 중간에 text 넣기 가능 |
| AddSize? | 1000 | kb 단위. 각 Section당 필요한 용량에 대해 적어준다. |
| Function | function_name | 하당 함수이름으로 함수 선언 |
| FunctionEnd? |
| 함수의 끝을 알린다. |
선언은 간단하다.
MyLabel:
| Instruction | parameter | 설명 |
| SetOutPath? | outpath | output path를 설정한뒤 ($OUTDIR), 만일 해당 path가 존재하지 않으면 만든다. 반드시 full-pathname 이여야 하며 일반적으로 $INSTDIR 이 이용된다. |
| File | (/r? file|wildcard ...?) | /oname=file.data infile.dat | 해당 output path ($OUTDIR)에 화일들을 추가한다. 와일드카드 (?, *) 등을 이용할 수 있다. 만일 /r 옵션을 이용할 경우, 해당 화일들와 디렉토리들이 재귀적으로 추가된다. (rm -rf의 'r' 옵션의 의미를 생각하길) |
| Exec | command | 특정 프로그램을 실행하고 계속 다음진행을 한다. $OUTDIR 은 작업디렉토리로 이용된다. ex) Exec '"$INSTDIRcommand.exe" parameters' |
| ExecWait? | command user_var(exit code)? | 특정 프로그램을 실행시키고, 종료될 때까지 기다린다. |
| ExecShell? | action command parameters?SW_SHOWNORMAL | SW_SHOWMAXIMIZED | SW_SHOWMINIMIZED? | ShellExecute?를 이용, 프로그램을 실행시킨다. action은 보통 'open', 'print' 등을 말한다. $OUTDIR 은 작업디렉토리로 이용된다. |
| Rename | /REBOOTOK? source_file dest_file | 화일이름을 변경한다. (또는 Move 한다.) |
| Delete | /REBOOTOK? file | 화일을 삭제한다. 와일드카드 사용가능. |
| RMDir | /r? directory | 해당 디렉토리를 지운다. (full-path여야함) |
| WriteRegStr? | root_key subkey key_name value | 레지스트리에 기록. root키의 경우 다음이 가능. HKCR - HKEY_CLASSES_ROOT |
|
| HKLM - HKEY_LOCAL_MACHINE |
|
| HKCU - HKEY_CURRENT_USER |
|
| HKU - HKEY_USERS |
|
| HKCC - HKEY_CURRENT_CONFIG |
|
| HKDD - HKEY_DYN_DATA |
|
| HKPD - HKEY_PERFORMANCE_DATA |
| WriteRegExpandStr? | . | . |
| WriteReg?DWORD | . | . |
| WriteRegBin? | . | . |
| WriteINIStr | ini_filename section_name entry_name value | ini 화일에 기록. section_name? entry_name=value 식으로 저장됨 |
| ReadRegStr? | . | . |
| ReadReg?DWORD | . | . |
| ReadINIStr | . | . |
| ReadEnvStr? | . | . |
| ExpandEnvStrings? | . | . |
| DeleteRegValue? | . | . |
| DeleteRegKey? | /ifempty? root_key subkey | 레지스트리 키 삭제 |
| EnumRegKey? | . | . |
| EnumRegValue? | . | . |
| DeleteINISec | . | . |
| DeleteINIStr | . | . |
| CreateDirectory? | path_to_create | 디렉토리 생성 |
| CopyFiles? | . | . |
| SetFileAttributes? | . | . |
| CreateShortCut? | . | . |
| GetFullPathName? | . | . |
| SearchPath? | . | . |
| GetTempFileName? | . | . |
| CallInst?DLL | . | . |
| RegDLL | . | . |
| UnReg?DLL | . | . |
| GetDllVersion? | . | . |
| GetDLLVersionLocal? | . | . |
| GetFileTime? | . | . |
| GetFileTimeLocal? | . | . |
| Goto | . | . |
| Call | . | . |
| Return | . | . |
| IfErrors? | . | . |
| ClearErrors? | . | . |
| SetErrors? | . | . |
| FindWindow? | . | . |
| SendMessage? | . | . |
| IsWindow? | . | . |
| IfFileExists? | . | . |
| MessageBox? | . | . |
| StrCmp? | . | . |
| IntCmp? | . | . |
| IntCmp?U | . | . |
| Abort | . | . |
| Quit | . | . |
| GetFunctionAddress? | . | . |
| GetLabelAddress? | . | . |
| GetCurrentAddress? | . | . |
| FindFirst? | . | . |
| FindNext? | . | . |
| FindClose? | . | . |
| FileOpen? | . | . |
| FileClose? | . | . |
| FileRead? | . | . |
| FileWrite? | . | . |
| FileReadByte? | . | . |
| FileWriteByte? | . | . |
| FileSeek? | . | . |
| SetDetailsView? | . | . |
| SetDetailsPrint? | . | . |
| SetAutoClose? | . | . |
| DetailPrint? | . | . |
| Sleep | . | . |
| BringToFront? | . | . |
| HideWindow? | . | . |
| Reboot | . | . |
| IfRebootFlag? | . | . |
| SetRebootFlag? | . | . |
- WriteUninstaller? - uninstller 화일이름 설정. 보통 uninstall.exe 라고 써주면 됨. 단, 레지스트리에 등록시키는 화일과 같아야 한다.
- $PROGRAMFILES - program files 디렉토리. (보통 C:Program Files) 실행시 탐색된다.
- $DESKTOP - 윈도우 데스트톱 디렉토리 (보통 C:windowsdesktop) 실행시 탐색된다.
- $EXEDIR - installer 가 실행되는 위치
- $WINDIR - windows 디렉토리 (보통 C:windows , C:winnt) 실행시 탐색된다.
- $SYSDIR - windows system 디렉토리 (보통 C:windowssystem, C:winntsystem32) 실행시 탐색된다.
- $TEMP - 시스템 임시 디렉토리 (보통 C:windowstemp) 실행시 탐색됨.
- $STARTMENU - 시작메뉴 folder. (CreateShortCut? 을 이용, 시작메뉴에 등록시 유용하다.)
- $SMPROGRAMS - 시작메뉴 programs folder (보통 $STARTMENUPrograms 대신 이용)
- $SMSTARTUP - 시작메뉴 programs/startup folder. 즉, '시작프로그램'
- $QUICKLAUNCH - IE4 이상. 퀵런치
- $HWNDPARENT - parent window의 HWND 에 대한 10진수값.
- $$ - '$' 표현시..
Section "Uninstall"
Delete $INSTDIRUninst.exe ; delete self (see explanation below why this works)
Delete $INSTDIRmyApp.exe
RMDir $INSTDIR
DeleteRegKey HKLM SOFTWAREmyApp
SectionEnd