출처 : http://blog.empas.com/bwangel/9314543


원문 : http://www.nullsoft.com/free/nsis/makensis.htm

주로 이용하는 것들 (NSIS/예제1, NSIS/예제2, NSIS/예제3 을 작성할 때 필요한 것 정도의 수준)위주로 정리. 좀 더 자세한 것에 대해서는 원문을 참조.
  1. Installer attributes
    1. General
    2. Install Directory
    3. License Page - 라이센스 관련 페이지에 쓰이는 속성들
    4. Component Page - 설치할 항목을 선택하는 페이지에 쓰이는 속성들
    5. Directory Page - 설치할 디렉토리를 선택하는 페이지에 쓰이는 속성들
    6. Install Page - 실질적인 Install 화면을 표시하는 페이지에 쓰이는 속성들
    7. Uninstall
  2. Compiler Flags
  3. Section
  4. Function (함수)
    1. 유의 사항
    2. attribute
  5. Labels
  6. Instructions
    1. Basic
    2. Registry/INI
    3. Advanced
    4. Branching/etc
    5. File/directory i/o
    6. Misc
    7. Strings
    8. Stack
    9. Integers
    10. Reboot
    11. Uninstall
  7. Variables
    1. modifiable variables that are usable in Instructions
    2. constant variables that are usable in Instructions and InstallDir
    3. usable anywhere in a string
  8. Uninstall Section
  9. Callback functions
    1. Install callback
    2. Uninstall callback
  10. Compiler utility commands
  11. Compiler defines / conditional compilation

Installer attributes

General

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 의 설정

Install Directory

attribute parameter example 설명
InstallDir? $PROGRAMFILESexample 기본 설치 디렉토리
InstallDirRegKey? . .

License Page - 라이센스 관련 페이지에 쓰이는 속성들

attribute parameter example 설명
LicenseText? "인스톨 하기 전 이 문구를 읽어주십시오" "동의합니다" license text 에서의 구체적 문구


인자는 text buttontext. buttontext 가 없으면 기본적으로 "I Agree"
LicenseData? zp_license.txt 해당 license 문구 텍스트가 담긴 화일

Component Page - 설치할 항목을 선택하는 페이지에 쓰이는 속성들

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:" 에 대한 표현 관련 텍스트

Directory Page - 설치할 디렉토리를 선택하는 페이지에 쓰이는 속성들

attribute parameter example 설명
DirShow? show 디렉토리 설정 화면 표시여부
DirText? "설치할 디렉토리를 골라주십시오" "인스톨할 디렉토리설정" "폴더탐색" 디렉토리 선택 페이지에서의 각각 문구들의 설정.
AllowRootDirInstall? false 루트디렉토리에 설치할 수 있도록 허용할것인지에 대한 여부

Install Page - 실질적인 Install 화면을 표시하는 페이지에 쓰이는 속성들

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

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? .

Compiler Flags

Section

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 (함수)

유의 사항

attribute

Function function_name 하당 함수이름으로 함수 선언
FunctionEnd?
함수의 끝을 알린다.

Labels

Label은 Goto 명령어나 기타 조건제어문들 (IfErrors?, MessageBox?, IfFileExists?, StrCmp? 등)을 위해 이용한다.
Label 은 반드시 Section 이나 Function 내에 존재해야 한다. Label 은 해당 Section 과 Function 내에서만 그 범위를 가진다.
선언은 간단하다.
MyLabel: 

Instructions

Basic

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여야함)

Registry/INI

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 . .

Advanced

CreateDirectory? path_to_create 디렉토리 생성
CopyFiles? . .
SetFileAttributes? . .
CreateShortCut? . .
GetFullPathName? . .
SearchPath? . .
GetTempFileName? . .
CallInst?DLL . .
RegDLL . .
UnReg?DLL . .
GetDllVersion? . .
GetDLLVersionLocal? . .
GetFileTime? . .
GetFileTimeLocal? . .

Branching/etc

Goto . .
Call . .
Return . .
IfErrors? . .
ClearErrors? . .
SetErrors? . .
FindWindow? . .
SendMessage? . .
IsWindow? . .
IfFileExists? . .
MessageBox? . .
StrCmp? . .
IntCmp? . .
IntCmp?U . .
Abort . .
Quit . .
GetFunctionAddress? . .
GetLabelAddress? . .
GetCurrentAddress? . .

File/directory i/o

FindFirst? . .
FindNext? . .
FindClose? . .
FileOpen? . .
FileClose? . .
FileRead? . .
FileWrite? . .
FileReadByte? . .
FileWriteByte? . .
FileSeek? . .

Misc

SetDetailsView? . .
SetDetailsPrint? . .
SetAutoClose? . .
DetailPrint? . .
Sleep . .
BringToFront? . .
HideWindow? . .

Strings

StrCpy? . .
StrLen? . .

Stack

Push . .
Pop . .
Exch . .

Integers

IntOp? . .
IntFmt? . .

Reboot

Reboot . .
IfRebootFlag? . .
SetRebootFlag? . .

Uninstall

  • WriteUninstaller? - uninstller 화일이름 설정. 보통 uninstall.exe 라고 써주면 됨. 단, 레지스트리에 등록시키는 화일과 같아야 한다.

Variables

modifiable variables that are usable in Instructions

constant variables that are usable in Instructions and InstallDir?

  • $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진수값.
  • $$ - '$' 표현시..

usable anywhere in a string

Uninstall Section

        Section "Uninstall" 
Delete $INSTDIRUninst.exe ; delete self (see explanation below why this works)
Delete $INSTDIRmyApp.exe
RMDir $INSTDIR
DeleteRegKey HKLM SOFTWAREmyApp
SectionEnd

Callback functions

Install callback

Uninstall callback

Compiler utility commands

Compiler defines / conditional compilation


신고
Posted by 나비 나비:D
출처 : http://www.cipher.pe.kr/tt/cipher/101

NSIS는 이미 알고 있듯이 스크립트로 만들어서 컴파일 하는 과정을 거치게 되어 있다. 아주 복잡한 인스톨 프로그램까지 만들 수 있지만, 천리길도 한 걸음부터라고 가장 기본부터 하나씩 정리해볼 생각이다. 누군가에게 도움이 되기를 바라는 마음도 있지만, 나 자신의 알고 있음을 한번 더 정리하는것도 크니 꾸준하게 정리해서 목표는 현재 곰플레이어 인스톨 하는 수준까지 만드는게 목표이다.

  1. NSIS를 다운 받자
    http://nsis.sourceforge.net/Main_Page

  2. 쓸만한 텍스트 에디터를 사용한다. 내가 생각하기에 제일 쉬운 에디터는 HM NIS Edit이다.
    http://hmne.sourceforge.net/
위의 두 프로그램을 다운 받아서 인스톨 하면 모든 준비는 끝이다. NSIS는 완전 free로 다운 받아서 쓰는데 상용화하는데도 전혀 문제가 없는 프로그램이다. HM NIS Edit 은 무료로 사용할 수도 있고 마음에 들어서 제작자에게 도움을 주고 싶으면 donation 할 수 있는 프로그램이다.

둘 다 인스톨 했으면 HM NIS Edit 을 실행한다. 이제 필요한 스크립트를 만들 준비가 다 되었다. HM NIS Edit의 "파일" 메뉴를 보면 위에서부터 네 개의 메뉴가 있다. 일반적인 에디터와 다르게 "스크립트 작성 마법사"를 사용하면 간단하게 인스톨 프로그램을 작성할 수 있다.
사용자 삽입 이미지
"인스톨-옵션 파일 만들기"는 플러그인을 활용하여 인스톨 중에 사용자로부터 선택을 받아서 인스톨 하는 프로그램을 만들때 사용할 수 있다. 처음에는 그냥 "빈 스크립트 만들기" 메뉴를 이용하여 전체적인 스크립트를 다 만들어 보도록 하겠다.

















1. Commands
NSIS 의 스크립트는 기본적으로 한 줄에 하나의 명령을 쓰게 되어 있다. 즉 한번에 해석되는 것이 한 줄 단위라는 것이다. 일반적으로 C의 경우 세미콜론(;) 단위로 실행되게 되어 있는데, NSIS는 줄 단위로 해석된다고 생각하면 된다. 만약 한 줄에 썼을때 에디터에서 보기도 힘들고 할 경우에는 끊고 싶은 부분에서 back-slash(\)를 쓰면 다음 줄까지 연결해서 해석 한다.
형태는 'command [parameters]' 로 사용한다.
예를 들자면

File "myfile"

와 같이 하면 " " 안에 있는 파일을 인스톨 프로그램에 포함시키면서 실제 인스톨시에는 현재 셋팅된 output 폴더에 인스톨을 한다. command에 대해서는 나중에 좀 더 자세하게 보도록 하겠다.

2. Comments
스크립트 언어 이므로 나중에 안 헷갈리기 위해서 가능한 주석을 달아 놓는게 좋다. 주석의 경우 세 가지 방법으로 주석을 나타낼 수 있다. ; 또는  # 을 사용할 경우 이 두 기호 이후부터 줄 끝까지를 주석으로 해석한다. 만약 한꺼번에 여러 줄을 주석으로 처리해야 할 경우는 C와 똑같은 주석을 쓸 수 있다. 즉 /*     */ 로 여러 줄을 한꺼번에 주석 처리할 수 있는 것이다. 만약 ; 나 # 을 파라메터로 넘겨줘야 할 경우는 "  " 로 감싸면 된다.

3. Plug-ins
NSIS에서 플러그인 이란 자체적으로 제공하지 않는 기능을 사용자가 직접 추가 하기 위한 방법을 제공하는 것이다. 이런 플러그인에 있는 command를 사용하기 위해서는

plugin::command [parameters]

형태로 쓴다. 물론 plugin 이란 실제 플러그인의 이름을 말하는 것이다. 추후 더 자세하게 플러그인에 대해서 볼 경우가 생길 것이다.

4. Numbers
숫자를 파라메터로 넘겨 줄 경우에는 10진수, 8진수(시작을 o로 할 경우), 16진수(시작을 ox)로 넘겨 줄 수 있다.

IntCmp 1 0x1 lbl_equal

5. Strings
문자열을 표시할때는 "와 "로 감싸면 공백을 포함한 문자열을 만들 수 있다. " 대신에 ' 또는 ` 등을 사용할 수 있다. 또한 문자열 안에서 "를 표시하기 위해서는 $\ 를 사용하면 된다.

  1.  
  2. MessageBox MB_OK "$\"A quote from a wise man$\" said the wise man"; "를 문자열 내에 포함
  3.  



문자열내에서 특별히 NSIS에서 변경할 수 없게 만들어 놓은 것들이 있다.
$$      $를 문자열 내에 표시할 경우 사용한다.
$\r    케리지 리턴을 표시한다
$\n    다음 줄을 표시한다.
$\t     탭을 표시한다.
위의 정확한 뜻은 예제를 하면서 한꺼번에 설명하도록 하겠다.

6. Variables
프로그래밍이 가능하므로 변수를 사용할 수 있다. 변수는 항상 시작을 $로 시작해야 한다. 그리고 사용하기전에 선언되어야 한다. 즉 실제로 사용하기전에 Var 라는 Command로 먼저 선언하고 사용해야 한다. Variables에 대해서도 뒤에 좀 더 자세하게 살펴 보겠다.

7. Long commands
명령어를 한 줄에 적다가 너무 길어지면 에디터에서 한 눈에 들어 오지 않으므로 여러 줄에 나누어서 작성하는 경우가 있다. 이럴때는 back-slash(\)를 사용하면 된다. 필요한 연결은 알아서 해준다.

CreateShortCut "$SMPROGRAMS\NSIS\ZIP2EXE project workspace.lnk" \
               "$INSTDIR\source\zip2exe\zip2exe.dsw"
MessageBox MB_YESNO|MB_ICONQUESTION \
                         "Do you want to remove all files in the folder? \
                          (If you have anything you created that you want \
                          to keep, click No)" \
                          IDNO NoRemoveLabel


위에 5번을 보면 주석문에도 \ 를 써서 다음 줄까지 주석문 임을 알릴 수 있지만 헷갈릴 수 있으므로 주석문에는 사용하지 않는게 좋다.

8. Configuration file
뒤에 따로 설명할 기회가 있을때 하겠다.


이상은 NSIS 메뉴얼 중에 Chapter 4 에 있는 Script File Format 이라는 부분에 있는 내용을 설명한 것이다. 이것만 가지고는 도대체 뭘 할지 알 수 없으니 예제를 하나 돌리면서 생각을 해보자

사용자 삽입 이미지

HM NIS Edit(앞으로 일반적으로 에디터라고 하면 이 에디터를 지칭한다) 에 위와 같이 글을 쓰고 나서 저장을 한다. 저장은 원하는 이름으로 저장하면 된다. 위에서 다른 부분은 신경쓰지 말고 현재는 command 중에서 outfile 에 파라메터로 주어진 값이 실제로 만들어지는 인스톨 프로그램이라는 것을 생각하자. 여기서는 "hello world.exe"로 만들었다. Section은 나중에 설명할테니 지금은 저렇게 Section 으로 시작하고 SectionEnd로 끝난다는 것만 기억하면 되겠다.
MessageBox의 경우 위에서 이미 설명한 것을 그대로 복사해서 만들었으니 실제로 실행했을때 어떻게 되는지 한번 보도록 하자. 실행을 하기 위해서는 먼저 컴파일을 하고 실행해야 하므로
사용자 삽입 이미지
아래와 같이 메뉴중에 NSIS 아래에 스크립트 컴파일 을 선택하면 컴파일이 되며, 컴파일 및 실행 을 선택하면 컴파일을 하고 자동으로 실행까지 해 주는 것이다. 일단 먼저 컴파일만 해보면 스크립트 파일을 저장한 폴더에 "hello world.exe" 파일이 생성된 것을 볼 수 있다. 이것을 한번 실행시켜 보자. 실행시키면 아래 그림과 같이 나오는 것을 볼 수 있다.

아래 그림에서 앞쪽에 나온 메시지 박스를 잘 보면 스크립트에서 적어 놓은데로 충실하게 출력을 하고 있는 것을 알 수 있다. 맨 앞에 물음표 아이콘이 바로 MB_ICONQUESTION 으로 지정된 것이며, MB_YESNO 가 버튼에서 예, 아니오 버튼이 나온 것이다. 그리고 문자열로 넘겨준 것들이 에디터에 보기 편하게 세줄로 나눈것이지 실제로 메시지 박스로 넘어 갈때는 한 줄로 해석되는 것을 알 수 있다.
사용자 삽입 이미지


간단하게 스크립트를 작성해서 어떻게 동작하는지를 알아 보았다. NSIS는 공개 소프트웨어라서 많은 사람들이 문서화를 해놓았다. 물론 NSIS 홈페이지에도 많은 문서가 있다. 웹에서 찾아 보면 더 많은 문서를 찾아 볼 수 있을 것이다. 여기에 적는 대부분의 내용은 NSIS에 있는 메뉴얼을 중심으로 필요한 내용만 뽑아서 예제를 많이 넣어서 이해하기 쉽게 적을려고 한다.

다음에는 Variables에 대해서 좀 더 자세하게 알아 보도록 하자.
참, 위에 메시지 박스에 적혀 있는 문자열에 $\r$\n 을 포함하여 어떻게 되는지 한번 보는 것도 좋은 경험이 될듯하다.
신고
Posted by 나비 나비:D
NSIS - 설치 스크립트 설명

정말 적기 힘드네요...
물론 이렇게 노가다로 일일히 안해도 됩니다.
HM NIS Edit 라는 스크립트 에디터 툴을 쓰시거나 Venis 라는 툴을 사용하셔도 됩니다.
하지만 한번 만들어 놓은 스크립트는 특별한 스크립트가 들어가지 않는한 변하질 않기 때문에 저 같은 경우 만들어 놓은걸 복사해서 일부분만 고쳐서 사용을 하죠...
아래 설치 스크립트에 대한 부분에 주석을 달아 놓았으니 참고하세요...^^

; 배포 프로그램 이름 지정

!define APPNAME "FreemontEncoder"

; 배포 프로그램의 이름 및 버전 표시 (실제 배포 프로그램 실행 시 화면에 표시되는 이름)

!define APPNAMEANDVERSION "FreemontEncoder 2.0"

<?xml:namespace prefix = o /> 

; Main Install settings

; 프로그램 이름 : 위에미리 정의한 APPNAMEANDVERSION을 지정한다.

Name "${APPNAMEANDVERSION}"

; 기본 설치 경로

InstallDir"$PROGRAMFILES\Freemont\Freemont Encoder"

; 배포 프로그램 정보가 등록될 레지스트리 경로

InstallDirRegKey HKLM"Software\${APPNAME}" ""

; 컴파일 후 배포 프로그램이 출력될 경로 지정

OutFile "C:\FMSSetup.exe"

 

; Modern interface settings

; UI Modern 으로설정한다.

!include "MUI.nsh"

 

; 경고 페이지 및 설치 종료 후 바로 실행할 파일 지정

!define MUI_ABORTWARNING

!define MUI_FINISHPAGE_RUN"$INSTDIR\Freemont Encoder.exe"

 

; 설치 및 삭제 아이콘 지정(주의 : 반드시 설치와 삭제 아이콘은 포멧이 일치해야 한다.)

!define MUI_ICON "res\FMS.ico"

!define MUI_UNICON"res\UnInstall.ico"

 

; 매크로 페이지 삽입

; 환영 메시지 페이지

!insertmacro MUI_PAGE_WELCOME

; 설치 경로 선택 페이지

!insertmacro MUI_PAGE_DIRECTORY

; 설치 상태 페이지 : 설치퍼센트 표시되는 페이지

!insertmacro MUI_PAGE_INSTFILES

; 완료 페이지

!insertmacro MUI_PAGE_FINISH

 

; 삭제 확인 페이지

!insertmacro MUI_UNPAGE_CONFIRM

; 삭제 상태 페이지 : 삭제퍼센트 표시되는 페이지

!insertmacro MUI_UNPAGE_INSTFILES

 

; Set languages (first is default language)

; 설치 시 표시 가능한 언어를 설정한다.

; 처음에 설정한 언어가 기본 언어가 된다.

!insertmacro MUI_LANGUAGE"Korean"

!insertmacro MUI_LANGUAGE"English"

!insertmacro MUI_RESERVEFILE_LANGDLL

 

; 설치 섹션

Section "Freemont Encoder"Section1

 

           ;설치 경로에 동일한 파일 존재 시 덮어씌우라는 의미

           SetOverwriteon

 

           ;파일이 설치될 경로를 위에서 지정한 INSTDIR 로 한다.

           SetOutPath"$INSTDIR\"

           ;INSTDIR 에 설치할 로컬 파일 경로를 지정한다.

           File"C\FMS\release\Freemont Encoder.exe"

           File"C\FMS\release\config.ini"

           ;파일이 설치될 경로를 windows\system32로 한다.

           ;일부 dll 이나 필수 파일 등등

           SetOutPath"$SYSDIR"

           ;windows\system32 에 설치할 로컬 파일 경로를 지정한다.

           File"C\FMS\release\FLogo.ax"

           ;dll 이나 ocx, ax 와 같이 레지스트리에 등록이 필요한 경우 (cmd : regsvr32.exe)

           RegDLL"$SYSDIR\FLogo.ax"

           ;바로 가기를 등록한다.

           ;바탕화면에 바로 가기 등록

           CreateShortCut"$DESKTOP\Freemont Encoder.lnk" "$INSTDIR\FreemontEncoder.exe"

           ;시작 프로그램에 바로 가기 등록

           CreateDirectory"$SMPROGRAMS\Freemont"

           CreateShortCut"$SMPROGRAMS\Freemont\Freemont Encoder\Freemont Encoder.lnk""$INSTDIR\Freemont Encoder.exe"

           CreateShortCut"$SMPROGRAMS\Freemont\Freemont Encoder\Uninstall.lnk""$INSTDIR\uninstall.exe"

SectionEnd

 

; 종료 섹션

Section -FinishSection

           ;종료 섹션은 특별한 일이 없는 이상 아래와 같이 설치하는 프로그램에 대한 정보를 레지스트리에 저장한다.

           WriteRegStrHKLM "Software\${APPNAME}" "" "$INSTDIR"

           WriteRegStrHKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}""DisplayName" "${APPNAME}"

           WriteRegStrHKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}""UninstallString" "$INSTDIR\uninstall.exe"

           WriteUninstaller"$INSTDIR\uninstall.exe"

SectionEnd

 

; Modern install component descriptions

!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN

           !insertmacroMUI_DESCRIPTION_TEXT ${Section1} ""

!insertmacro MUI_FUNCTION_DESCRIPTION_END

 

; 삭제 섹션

Section Uninstall

 

           ;설치 정보 레지스트리를 삭제한다

           DeleteRegKeyHKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}"

           DeleteRegKeyHKLM "SOFTWARE\${APPNAME}"

 

           ;파일 삭제

           ;삭제 파일 삭제

           Delete"$INSTDIR\uninstall.exe"

          

           ;바로 가기 삭제

           Delete"$DESKTOP\Freemont Encoder.lnk"

           Delete"$SMPROGRAMS\Freemont\Freemont Encoder.lnk"

           Delete"$SMPROGRAMS\Freemont\Uninstall.lnk"

 

           ;설치 파일 삭제

           Delete"$INSTDIR\Freemont Encoder.exe"

           Delete"$INSTDIR\config.ini"

           ;windows\system32 에 설치된 파일에 대한 레지스트리 삭제 (cmd : regsvr32/u)

           UnRegDLL"$SYSDIR\FLogo.ax"

           ;레지스트리에서 삭제된 파일 삭제

           Delete"$SYSDIR\FLogo.ax"

 

           ;바로 가기 및 설치 디렉토리 삭제

           RMDir"$SMPROGRAMS\Freemont\Freemont Encoder"

           RMDir"$INSTDIR\"

 

SectionEnd

 

; 배포 프로그램 초기화 함수

Function .onInit

           ;설치 언어 선택 페이지를 표시한다.

           !insertmacroMUI_LANGDLL_DISPLAY

 

FunctionEnd

신고
Posted by 나비 나비:D

BLOG main image
by 나비:D

공지사항

카테고리

분류 전체보기 (278)
Programming? (0)
----------------------------- (0)
나비의삽질 (5)
Application (177)
SQL (51)
Web (27)
etc. (14)
Omnia (0)
---------------------------.. (0)

글 보관함

달력

«   2017/08   »
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
Total : 870,708
Today : 10 Yesterday : 157