출처 : 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? |
. |
. |
Push |
. |
. |
Pop |
. |
. |
Exch |
. |
. |
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