๋ถ๋ฅ:ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
์ด ๋ฌธ์์ ์๋ณธ์ ์ธ๋ถ ์ํค์์ ๊ฐ์ ธ์์ต๋๋ค.
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๋ก ์ ์๋ ์ค์น ํ๋ก๊ทธ๋จ์ด ๊นจ์ ธ์ ์คํํ์ง ๋ชปํ๋ค๋ ๋ป์ด๋ค. ์ฆ ํด๋น ์ค์นํ์ผ์ ์์๋์์ผ๋ ๋ค์ ๋ค์ด๋ฐ์์ผ ๋๋ค๋ ๊ฒ.
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)์ ๋ฃ์ผ๋ฉด ์ค์น๊ธฐ๋ฅผ ์คํํ ๋ ์คํ๋์ ์ด๋ฏธ์ง๊ฐ ๋ฌ๋ค.