์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.

1. ๊ฐœ์š”2. ์†Œ์Šค ์ฝ”๋“œ
2.1. ์ฝ”๋“œ ์˜ˆ์ œ
3. ํ”Œ๋Ÿฌ๊ทธ์ธ
3.1. ๊ธฐ๋ณธ ํ”Œ๋Ÿฌ๊ทธ์ธ

1. ๊ฐœ์š”[ํŽธ์ง‘]

Nullsoft Scriptable Install System
Windows์šฉ ์˜คํ”ˆ์†Œ์Šค ์„ค์น˜(Setup) ํ”„๋กœ๊ทธ๋žจ ์ œ์ž‘ ํˆด ํ™ˆํŽ˜์ด์ง€

์›๋ž˜ Winamp๋ฅผ ๋งŒ๋“  Nullsoft์˜ ์ €์Šคํ‹ด ํ”„๋ž‘์ผˆ์ด Winamp์˜ ์„ค์น˜ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“  ์ œ์ž‘ํˆด์„ 2001๋…„ ์˜คํ”ˆ์†Œ์Šค๋กœ ๊ณต๊ฐœํ•œ ๊ฒƒ์ด ์ดํ›„ ์—ฌ๋Ÿฌ ๊ฐœ๋ฐœ์ž์— ์˜ํ•ด์„œ ์—…๋ฐ์ดํŠธ ๋˜๊ณ  ์žˆ๋‹ค.

NSIS๊ฐ€ ์ฒ˜์Œ ๊ณต๊ฐœ๋œ 2001๋…„์—๋Š” ์ธ์Šคํ†จ ์‰ด๋“œ์™€ ๊ฐ™์€ ์ƒ์—…์ ์ธ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ ๊ฐœ๋ฐœ ํˆด๋งŒ์ด ์กด์žฌํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์ธ์Šคํ†จ ์‰ด๋“œ๋Š” ๋ฌด๊ฒ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์—ˆ๋‹ค. NSIS๊ฐ€ ๊ณต๊ฐœ๋œ ์ดํ›„ ์ˆ˜๋งŽ์€ ์ƒ์šฉ ์†Œํ”„ํŠธ์›จ์–ด ๋ฐ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ์—์„œ NSIS๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์•„๋งˆ๋„ ํ˜„์žฌ Windows ํ”Œ๋žซํผ์—์„œ ์ œ์ผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์„ค์น˜ ํˆด์ผ ๊ฑธ๋กœ ์˜ˆ์ƒ๋œ๋‹ค.

์ดˆ๊ธฐ ๋ฒ„์ „์€ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์น˜ํŒŒ์ผ๋กœ ๋ฌถ๊ธฐ ์œ„ํ•ด์„œ Deflate์™€ Bzip2์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜๋งŒ์„ ์‚ฌ์šฉํ•˜์˜€์ง€๋งŒ, 2.0๋ฒ„์ „๋ถ€ํ„ฐ๋Š” LZMA๋ฅผ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด์„œ, ์„ค์น˜ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ๋งŽ์ด ์ค„์ด๋Š”๋ฐ ์ผ์กฐํ•˜์˜€๋‹ค.

2013๋…„๋ถ€ํ„ฐ ๊ณต๊ฐœ๋œ 3.0 ๋ฒ„์ „์€ ์œ ๋‹ˆ์ฝ”๋“œ๋ฅผ ์ง€์›ํ•˜๊ธฐ ์‹œ์ž‘ํ•˜์˜€๋‹ค.

๊ฐ„ํ˜น ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ–ˆ์„ ๋•Œ NSIS Error๊ฐ€ ๋œจ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด๋Š” NSIS๋กœ ์ œ์ž‘๋œ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์ด ๊นจ์ ธ์„œ ์‹คํ–‰ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๋Š” ๋œป์ด๋‹ค. ์ฆ‰ ํ•ด๋‹น ์„ค์น˜ํŒŒ์ผ์€ ์†์ƒ๋˜์—ˆ์œผ๋‹ˆ ๋‹ค์‹œ ๋‹ค์šด๋ฐ›์•„์•ผ ๋œ๋‹ค๋Š” ๊ฒƒ.

2. ์†Œ์Šค ์ฝ”๋“œ[ํŽธ์ง‘]

  • SetOutPath [๊ฒฝ๋กœ]
    ํŒŒ์ผ์ด ์ฒ˜๋ฆฌ๋  ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, $USERPROFILEDesktop ์œผ๋กœ ์„ค์ •ํ•˜๋ฉด, File ์„ ํ†ตํ•œ ํŒŒ์ผ ์••์ถ•ํ•ด์ œ๋Š” ๋ฐ”ํƒ•ํ™”๋ฉด์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.
  • File [ํŒŒ์ผ๋ช…]
    ์„ค์น˜ํŒŒ์ผ ์•ˆ์— ํŒŒ์ผ์„ ๋„ฃ๋Š”์ฝ”๋“œ์ด๋‹ค. SetOutPath๋ฅผ ํ†ตํ•ด ์„ค์ •ํ•œ ๊ฒฝ๋กœ๋กœ ํŒŒ์ผ์ด ํ’€๋ฆฐ๋‹ค.
  • DetailPrint [๋‚ด์šฉ]
    ์„ค์น˜ ๊ณผ์ • ์ค‘์— [๋‚ด์šฉ]์„ ํ‘œ์‹œ์‹œํ‚จ๋‹ค.
  • RMDir /r [๊ฒฝ๋กœ]
    [๊ฒฝ๋กœ] ์ž์ฒด๋ฅผ ์ง€์šด๋‹ค.
  • Delete [๊ฒฝ๋กœ\ํŒŒ์ผ]
    [๊ฒฝ๋กœ\ํŒŒ์ผ]์„ ์ง€์šด๋‹ค.
  • Copyfiles [๊ฒฝ๋กœ1] [๊ฒฝ๋กœ2]
    [๊ฒฝ๋กœ1]์˜ ํŒŒ์ผ์„ [๊ฒฝ๋กœ2]๋กœ ์˜ฎ๊ธด๋‹ค.

2.1. ์ฝ”๋“œ ์˜ˆ์ œ[ํŽธ์ง‘]

;๋Š” NSIS์ƒ์—์„œ์™€ ๊ฐ™์ด ์ฃผ์„์œผ๋กœ ์ทจ๊ธ‰ํ•จ. ๊ฐ ์ฝ”๋“œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์ฃผ์„์€ ๋นจ๊ฐ„์ƒ‰ ์ฒ˜๋ฆฌ, ์Šคํฌ๋ฆฝํŠธ ๋งˆ๋ฒ•์‚ฌ์—์„œ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ฃผ์„์€ ์ดˆ๋ก์ƒ‰ ์ฒ˜๋ฆฌ
์•„๋ž˜ ์˜ˆ์ œ๋Š” ์ปค์Šคํ…€ ํผ์„ ์—ฐ๊ฒฐํ•œ ๊ฒƒ์ด๋‹ค.
!define PRODUCT_NAME "์˜ˆ์ œ"
!define PRODUCT_VERSION "1"
!define PRODUCT_PUBLISHER "์ œ์ž‘์ž"
!define PRODUCT_WEB_SITE "์ œ์ž‘์ž ์›น์‚ฌ์ดํŠธ"

SetCompressor lzma

; MUI 1.67 compatible ------
!include "MUI.nsh"
!include "LogicLib.nsh"

; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "icon.ico" ;icon.ico๋ฅผ ์•„์ด์ฝ˜์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.
BrandingText "ํ…์ŠคํŠธ" ;"ํ…์ŠคํŠธ"๋ฅผ ํ•˜๋‹จ์— ํ‘œ๊ธฐํ•œ๋‹ค.

!define MUI_WELCOMEFINISHPAGE_BITMAP "File.bmp"
;File.bmp๋ผ๋Š” ๋น„ํŠธ๋งต ์ด๋ฏธ์ง€๋ฅผ ์ œ์ผ ์ฒ˜์Œ WelcomePage ์‚ฌ์ด๋“œ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
; Welcome page
!insertmacro MUI_PAGE_WELCOME
!define MUI_PAGE_HEADER_TEXT "ํ…์ŠคํŠธ" ;ํ—ค๋” ํ…์ŠคํŠธ
!define MUI_PAGE_HEADER_SUBTEXT "ํ…์ŠคํŠธ" ;์„œ๋ธŒํ—ค๋” ํ…์ŠคํŠธ
; License page
!insertmacro MUI_PAGE_LICENSE "License.txt" ;License.txt ํŒŒ์ผ์„ ๋ผ์ด์„ ์ŠคํŽ˜์ด์ง€์— ํ‘œ์‹œํ•œ๋‹ค.
; Directory page
!insertmacro MUI_PAGE_DIRECTORY ;์„ค์น˜ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•˜๋Š” ํŽ˜์ด์ง€.
; Install Setting page
Page Custom Form ;์ ์šฉํ•œ ์ปค์Šคํ…€ ํผ์„ ์ด์šฉํ•œ๋‹ค.
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES ;ํŒŒ์ผ์„ ์„ค์น˜ํ•œ๋‹ค.
; Finish page
!insertmacro MUI_PAGE_FINISH ;์™„๋ฃŒ๋˜๊ณ  ๋‚œ ๋‹ค์Œ ํ‘œ๊ธฐ๋˜๋Š” ๋งˆ์ง€๋ง‰ ํŽ˜์ด์ง€

; Language files
!insertmacro MUI_LANGUAGE "Korean"

; Reserve files
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS

; MUI end ------

Var 'var' ;ํ•จ์ˆ˜ var๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

ReserveFile "Form.ini" ;Form.ini ํŒŒ์ผ์„ ์—ฐ๋™ํ•œ๋‹ค. ์ด๋•Œ iniํŒŒ์ผ์€ ์ปค์Šคํ…€ ํŽ˜์ด์ง€.
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS

Function .onInit
!insertmacro MUI_INSTALLOPTIONS_EXTRACT "Form.ini" ;์ปค์Šคํ…€ ํŽ˜์ด์ง€๋ฅผ ์ž„์‹œ๋กœ ์••์ถ•์„ ํ•ด์ œํ•œ๋‹ค.
FunctionEnd

Function Form
!insertmacro MUI_INSTALLOPTIONS_DISPLAY_RETURN "Form.ini" ;์ปค์Šคํ…€ ํŽ˜์ด์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
FunctionEnd


Name "ํŒŒ์ผ์˜ ์ด๋ฆ„"
OutFile "์ถœ๋ ฅ๋  ํŒŒ์ผ์˜ ์ด๋ฆ„.exe"
InstallDir "๊ฒฝ๋กœ" ;์ด๋•Œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ด์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์œˆ๋„์šฐ์™€ ๋‹ฌ๋ฆฌ $๋ฅผ ๋ถ™์ธ๋‹ค. NSIS๋งŒ์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋„ ์กด์žฌํ•˜๋Š”๋“ฏ ํ•˜๋‹ค.
ShowInstDetails show ;์„ค์น˜ ๊ณผ์ •์ค‘ ์ž์„ธํžˆ ๋ณด์—ฌ์ค„ ๊ฒƒ์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. show์™€ hide, nevershow๊ฐ€ ์žˆ๋‹ค.
SetOverwrite ifnewer

Section "MainSection" SEC01
SetOutPath "$INSTDIR/Deleteme" ;๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•œ๋‹ค.
File "javakill.cmd" ;ํŒŒ์ผ์„ ์Šคํฌ๋ฆฝํŠธ์— ๋„ฃ๊ณ  "๊ฒฝ๋กœ1"์— ํ‘ผ๋‹ค.
DetailPrint "๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ •์ง€ํ•ฉ๋‹ˆ๋‹ค: Javaw.exe" ;"๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ •์ง€ํ•ฉ๋‹ˆ๋‹ค: Javaw.exe"๋ฅผ ์„ค์น˜ ๊ณผ์ •์ค‘์— ํ‘œ์‹œํ•œ๋‹ค.
nsExec::Exec "javakill.cmd" ;"๊ฒฝ๋กœ1"์— ์žˆ๋Š” "javakill.cmd"๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
goto Step1 ;Step1์œผ๋กœ ๊ฐ„๋‹ค. ๋ฐฐ์น˜ํŒŒ์ผ๊ณผ ๋น„์Šทํ•œ ๊ฐœ๋….
Step1:
!insertmacro MUI_INSTALLOPTIONS_READ "$Var" "Form.ini" "Field 1" "State" ;"Form.ini"์˜ 1๋ฒˆ ํ•„๋“œ์˜ ๊ฐ’์„ Varํ•จ์ˆ˜๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.
StrCmp $Var "1" CheckA1 CheckA2 ;C/C++์˜ StrCmp์™€ ๊ฐ™์€ ๊ฐœ๋…
CheckA1:
RMDir /r "$INSTDIR/Deleteme" ;ํด๋” ๋ฐ ํ•˜์œ„ ํด๋”์™€ ํŒŒ์ผ์„ ์ œ๊ฑฐํ•œ๋‹ค.
goto Step2
CheckA2:
goto Step2
Step2:
SetOutPath "$INSTDIR/Temp"
DetailPrint "ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ์ค‘..."
Nsisdl::download "ํŒŒ์ผ ์ง์ ‘๋งํฌ" "๋‹ค์šด๋กœ๋“œ๋  ํŒŒ์ผ์˜ ์ด๋ฆ„" ;ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•œ๋‹ค.
DetailPrint "์ ์šฉ์ค‘..."
File "7za.exe" ;7zip ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ(7za.exe)์„ ์ปดํ“จํ„ฐ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
File "Extract.cmd" ;"Extract.cmd"ํŒŒ์ผ์„ ์ปดํ“จํ„ฐ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
nsExec::Exec "Extract.cmd" ;"Extract.cmd"ํŒŒ์ผ์„ ์‹คํ–‰ํ•œ๋‹ค.
DetailPrint "์ž„์‹œํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š”์ค‘...."
RMDir /r "$INSTDIR/Temp" ;์—ฌ๊ธฐ์„œ๋Š” ์ž„์‹œํŒŒ์ผ์ด ์ œ๊ฑฐ๋œ๋‹ค.
DetailPrint "์™„๋ฃŒ"
SectionEnd

Section -Post
SectionEnd

3. ํ”Œ๋Ÿฌ๊ทธ์ธ[ํŽธ์ง‘]

NSIS๋Š” ๋‹ค์–‘ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ง€์›ํ•œ๋‹ค. ์ž์ฒด์ ์œผ๋กœ ํฌํ•จ๋œ ํ”Œ๋Ÿฌ๊ทธ์ธ๋„ ์žˆ์œผ๋ฉฐ ๋‚˜๋จธ์ง€ ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์—ฌ๊ธฐ์„œ ํ™•์ธํ• ์ˆ˜ ์žˆ๋‹ค.
๊ธฐ๋ณธ์ ์œผ๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ์šฉ ์ฝ”๋“œ๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ ์ด๋ฆ„::๋ช…๋ น์–ด ๋กœ ์„ค์ •๋œ๋‹ค.

3.1. ๊ธฐ๋ณธ ํ”Œ๋Ÿฌ๊ทธ์ธ[ํŽธ์ง‘]

NSIS๋ฅผ ์„ค์น˜ํ•  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์ด๋‹ค.
  • nsExec
    nsExec::Exec [๊ฒฝ๋กœ] ๋กœ ํ•ด๋‹น ๊ฒฝ๋กœ์˜ ํŒŒ์ผ์„ ์‹คํ–‰์‹œํ‚ฌ์ˆ˜ ์žˆ๋‹ค.
  • NSISdl
    NSISdl::download [๋‹ค์šด๋กœ๋“œ ๋งํฌ] ๋กœ ํ•ด๋‹น ๋งํฌ์™€ ์—ฐ๊ฒฐ๋œ ํŒŒ์ผ์„ ๋ฐ›์„์ˆ˜ ์žˆ๋‹ค.
  • advsplash
    ์„ค์น˜๊ธฐ ์‹œ์ž‘ ํ•จ์ˆ˜(.onInit)์— ๋„ฃ์œผ๋ฉด ์„ค์น˜๊ธฐ๋ฅผ ์‹คํ–‰ํ• ๋•Œ ์Šคํ”Œ๋ž˜์‹œ ์ด๋ฏธ์ง€๊ฐ€ ๋œฌ๋‹ค.