E D R , A S I H C RSS

NSIS

1. NSIS

1.1. Opening Statement

๋ณดํ†ต ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ๋‚˜์„œ '๋งŒ๋“ค์—ˆ๋‹ค' ๋กœ ๋๋‚˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ํ•˜์ง€๋งŒ, ์ •์ž‘ ๋ฐฐํฌ๋•Œ์—๋Š” ํ• ์ผ์ด ๋งŽ๋‹ค. ํŠนํžˆ ์ œ์–ดํŒ ํ”„๋กœ๊ทธ๋žจ ๋“ฑ๋ก/์‚ญ์ œ ์— ๋“ฑ๋ก๋˜๋Š” ๋ฐฉ์‹์ด๋ผ๋˜์ง€, ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ๊ฑด๋“œ๋ฆฐ๋‹ค๋˜์ง€, Program Files ํด๋”์— ๋ณต์‚ฌํ•œ๋‹ค๋˜์ง€. ์ด ๊ฒฝ์šฐ์—๋Š” ๋ณดํ†ต ์ „์šฉ Installer ํ”„๋กœ๊ทธ๋žจ์„ ์“ฐ๊ฒŒ ๋˜์ง€๋งŒ, ์•„์ง ์ œ๋Œ€๋กœ ์จ๋ณธ ์ ์ด ์—†์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

์ด๋ฒˆ์—๋Š” '๋ฐฐํฌ' ๋ผ๋Š” ๋…€์„์— ๋Œ€ํ•ด ์ด›์ ์„ ๋งž์ถฐ๋ณด๊ณ ์ž, ์ธ์Šคํ†จ๋Ÿฌ์ค‘ ํ•˜๋‚˜์ธ NSIS ์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค. (์ž.. ์ด์ œ ํผ์ข€ ๋‚ด๋ฉด์„œ ๋งŒ๋“  ํ”„๋กœ๊ทธ๋žจ ๋ณด์—ฌ์ฃผ์ž. ^^; ์ด๊ฒŒ ๊ฐ€์žฅ ํฐ ๋ชฉ์ . --;)

nsis ๋Š” free software ์ด๋ฉฐ, ์†Œ์Šค๊ฐ€ ๊ณต๊ฐœ๋˜์–ด์žˆ๋‹ค. ๊ด€์‹ฌ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์€ ๋ถ„์„ํ•ด๋ณด์‹œ๊ธธ.

1.2. ์ฐธ์กฐ ๋งํฌ

1.3. ์ „์ฒด ๊ณผ์ •

NSIS์˜ ์›๋ฆฌ๋Š” ๊ฐ„๋‹จํ•˜๋‹ค. nsi ๋ผ๋Š” ์Šคํฌ๋ฆฝํŠธ ํ™”์ผ์„ ํ•ด์„ํ•ด์„œ ํ•ด๋‹น ๋งž๋Š” ํ”„๋กœ๊ทธ๋žจ๋“ค์„ ํ•˜๋‚˜์˜ ํ™”์ผ๋กœ ์••์ถ•์‹œํ‚ค๊ณ  ์‹คํ–‰ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. (๋งˆ์น˜ ๋ฐฐ์น˜ํ™”์ผ์„ ์ž‘์„ฑํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ• ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค.)

  1. ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•œ๋‹ค.
  2. NSI Script ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  3. makensis ๋กœ Script ๋ฅผ ์ปดํŒŒ์ผํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด makensis ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ถ„์„ํ•˜๋ฉด์„œ ํฌํ•จํ•ด์•ผ ํ•  ํ™”์ผ๋“ค์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  zip์˜ ํ˜•์‹์œผ๋กœ ์••์ถ•ํ•ด์ค€๋‹ค. (๋‚ด๋ถ€์ ์œผ๋กœ zip2exe ๊ฐ€ ์ด์šฉ๋œ๋‹ค. ์ด๊ฑด zlib ์‚ฌ์šฉ๋จ.)
  4. ํ•˜๋‚˜์˜ Install ํ™”์ผ ์ƒ์„ฑ. ์™„๋ฃŒ. (๋ฟŒ๋ฆฌ์ž~ -_-v)

1.4. MakeNSIS usage

NSIS installer๋“ค์€ 'MakeNSIS' ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด์„œ NSI script (.NSI) ๋ฅผ ์ปดํŒŒ์ผํ•จ์œผ๋กœ์„œ ๋งŒ๋“ค์–ด์ง„๋‹ค.
makensis ์˜ ์‹คํ–‰ ๋ฌธ๋ฒ•์€ ๋Œ€๊ฐ• ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

~cpp 
Makensis [/Vx] [/Olog] [/LICENSE] [/PAUSE] [/NOCONFIG] [/CMDHELP [command]] [/HDRINFO] [/CD] [/Ddefine[=value] ...]
         ["/XCommand parameter" ...] [Script.nsi | - [...]]
  • /LICENSE - license page๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.
  • /Vx (x๋Š” 0~4) - output ์˜ ํ‘œ์‹œ ์ •๋„๋ฅผ ์กฐ์ ˆํ•œ๋‹ค.
    0 : no output
    1 : errors only
    2 : warnings and errors
    3 : info, warnings, and errors
    4 : all output
  • /Olog (log ๋Š” filename) - compile ์ค‘ screen ์ƒ์— ํ•ด๋‹น ํ™”์ผ์— ๋Œ€ํ•œ log๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋Œ€์‹  ํ™”์ผ๋กœ ์„ค์ •ํ•œ๋‹ค.
  • /PAUSE - Makensis ๊ฐ€ ์ข…๋ฃŒ๋˜๊ธฐ ์ „ ์ค‘๊ฐ„์— ์ผ์‹œ์ •์ง€ํ•ด์ค€๋‹ค. ์ด๋Š” Windows ์—์„œ ์ง์ ‘ ์‹คํ–‰ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.
  • /NOCONFIG - nsisconfi.nsi ์„ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ด ํŒŒ๋ผ๋ฉ”ํ„ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ, ์ธ์Šคํ†จ๋Ÿฌ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ nsisconf.nsi ๋กœ๋ถ€ํ„ฐ ๊ธฐ๋ณธ์„ค์ •์ด ์„ธํŒ…๋œ๋‹ค. (NSIS Configuration File ์ฐธ์กฐ)
  • /CMDHELP - command ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

ํ•˜์ง€๋งŒ ๊ฑฐ์˜ ๊ธฐ๋ณธ ์˜ต์…˜์ด์ƒ ์ž˜ ์•ˆ์“ฐ๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ^^;

1.5. ํšจ์œจ์ ์ธ ๊ฐœ๋ฐœ์ž‘์—…ํ™˜๊ฒฝ

NSIS ๋Š” ์ธ์Šคํ†จํ•˜๊ณ  ๋‚œ ๋’ค์—๋Š” ์˜ค๋ฅธ์ชฝ๋ฒ„ํŠผ shell-extension ์— ํ•ด๋‹น ํ™•์žฅ์ž ์ปดํŒŒ์ผ์ด ๋“ฑ๋ก๋œ๋‹ค. ํ•˜์ง€๋งŒ command ๋กœ ์ˆ˜๋™์œผ๋กœ ์˜ต์…˜์„ ์„ค์ •ํ•˜๋ฉด์„œ ์ž…๋ ฅํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋” ํŽธํ•˜๋‹ค.

๋˜๋Š” Editplus ์˜ ์‚ฌ์šฉ์ž๋„๊ตฌ๊ทธ๋ฃน์— makensis ์„ ๋“ฑ๋ก์‹œ์ผœ์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๊ฒ ๋‹ค. (nsis ๋ฅผ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ide ๋งŒ๋“ค์–ด์„œ ์จ๋จน์–ด๋ณด๋Š”์ค‘.. ์ด์˜€์ง€๋งŒ. ์—‰์—‰.. ๊ทธ๋ž˜๋„ editplus ๊ฐ€ ํ›จ ํŽธํ•˜๊ธด ํ•˜๋‹ค. --;)

1.6. .NSI script ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

NSIS Script File (.nsi) ๋Š” command ๋“ค์˜ ๋ฌถ์Œ์ธ batch-file์™€๋„ ๊ฐ™์•„๋ณด์ด๋Š” text file์ด๋‹ค.
  • ; ๋‚˜ # ์œผ๋กœ ์‹œ์ž‘๋˜๋Š” ํ–‰๋“ค์€ ์ „๋ถ€ comment ์ด๋‹ค.
  • ;, # ๋’ค์— ๋‚˜์˜ค๋Š” ๊ฒƒ ๋˜ํ•œ comment ๋กœ ์ทจ๊ธ‰๋œ๋‹ค.
  • ์ฃผ์„์ด ์•„๋‹Œ ํ–‰๋“ค์€ 'command parameter' ์˜ ํ˜•ํƒœ๋ฅผ ๋ค๋‹ค.
  • parameter ์˜ ์ˆซ์ž๋“ค์€ 10์ง„์ˆ˜, 16์ง„์ˆ˜, 8์ง„์ˆ˜๋“ค์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (์ผ๋ฐ˜ ์ˆซ์ž, 0x__, 0124 ์‹์œผ๋กœ..)
  • ํ‘œํ˜„ํ•˜๊ณ ์žํ•˜๋Š” string ์— ๊ณต๋ฐฑ์ด ์žˆ์œผ๋ฉด ๋”ฐ์˜ดํ‘œ๋ฅผ ์ด์šฉํ•œ๋‹ค.
    ex)

~cpp 
	MessageBox MB_OK "I'll be happy" ; this one puts a ' inside a string
	MessageBox MB_OK 'And he said to me "Hi there!"' ; this one puts a " inside a string
	MessageBox MB_OK `And he said to me "I'll be fucked!"` ; this one puts both ' and "s inside a string:
  • ํ•˜๋‚˜์˜ command ๊ฐ€ ์—ฌ๋Ÿฌ์ค„์„ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ '' ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

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


1.7. NSI Script Study

NSIS ๋Š” ์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ์ผ์ข…์˜ ๋ฐฐ์น˜ํ™”์ผ๊ณผ ๊ฐ™์œผ๋ฏ€๋กœ, ์˜ˆ์ œ์œ„์ฃผ์˜ ์ ‘๊ทผ์„ ํ•˜๋ฉด ์‰ฝ๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. NSIS/์˜ˆ์ œ1, NSIS/์˜ˆ์ œ2, NSIS/์˜ˆ์ œ3 ๋“ฑ์„ ๋ถ„์„ํ•˜๊ณ  ์†Œ์Šค๋ฅผ ์กฐ๊ธˆ์”ฉ ์šฉ๋„์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•˜์—ฌ ์ž‘์„ฑํ•˜๋ฉด ์‰ฝ๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์˜๋ฌธ์ด ์ƒ๊ธฐ๋Š” ๋ช…๋ น์–ด๋‚˜ ์†์„ฑ(attribute)์— ๋Œ€ํ•ด์„œ๋Š” NSIS/Reference ๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋ฐ”๋ž€๋‹ค.

1.8. CHM Document

NSIS ์˜ windows installer ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๋ฉด NSIS.CHM ํ™”์ผ์ด ๊ฐ™์ด ์žˆ๋‹ค.

1.9. NSIS ์—์„œ ์ธ์Šคํ†จ ์ค‘ Explorer ์ฐฝ ์ „๋ถ€ ๋‹ซ๊ธฐ

1.10. ํ•ด๋‹น dll ๋“ค system32 ์˜ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ณต์‚ฌํ•ด์ฃผ๊ธฐ

~cpp 
;copy files
File /r `.\tmp\*.*`
;system32 ์— ๋ณต์‚ฌํ•ด์ค„ dll ๋“ค๋„ ์ผ๋‹จ ๋ณต์‚ฌํ•ด์ค€๋‹ค.
File /r `.\AdditionalDLL\*.dll` 

;move system addtinoal dlls to system folder
Rename "$INSTDIR\MSVCP60.dll" "$SYSDIR\MSVCP60.dll"


1.11. windows ๊น”๋ฆฐ ์œ„์น˜ ์ฐพ์•„์˜ค๊ธฐ

์ด์šฉ ์˜ˆ : windows ์˜ system32 ๋””๋ ‰ํ† ๋ฆฌ์— dll ๋“ค์„ ๋ณต์‚ฌํ•ด์ค„ ๋•Œ.

~cpp 
Section "ThisNameIsIgnoredSoWhyBother?" 
  .
  .
  MessageBox MB_OK "$WINDIR"
  MessageBox MB_OK "$SYSDIR"
  ; ๋ณต์‚ฌํ•  ํ™”์ผ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ. 
SectionEnd ; section ์™„๋ฃŒ 


1.12. ExecWait

exec ๋กœ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃฝ์„ ๋•Œ ๊นŒ์ง€ wait.
regsvr32.exe ๋กœ dll ์„ unregister ํ•œ ๋‹ค์Œ์— ์ „์ฒด ํด๋”๋ฅผ ์‚ญ์ œํ•  ๋•Œ, regsvr32.exe ๋Š” Exec ๊ฐ€ ์•„๋‹Œ ExecWait ๋กœ ์‹คํ–‰ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. (๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ํ•ด๋‹น dll ์ด unregister ๋˜๊ธฐ ์ „์— dll ํ™”์ผ์ด delete ๋˜์–ด ์ •์ƒ์ ์ธ uninstall ์ด ๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.)

1.13. NSIS ์—์„œ ํŠน์ • Process ๊ฐ€ ์‚ด์•„์žˆ๋Š”์ง€ ์—ฌ๋ถ€ ํ™•์ธ

FindProc Plugin ์„ ์„ค์น˜ํ•œ๋‹ค.


์‚ฌ์šฉ ์˜ˆ : exec ๋กœ regsvr32.exe ํ˜ธ์ถœ์‹œ ๋น„๋™๊ธฐ ํ˜ธ์ถœ์ด ๋˜์–ด ๋’ค์˜ delete ๋ฌธ์ด ์‹คํ–‰๋œ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•œ๋‹ค.

~cpp 
  Exec 'regsvr32.exe /u /s "$INSTDIR\COMDLL.dll"'
  waitloop:
    FindProcDLL::FindProc "regsvr32.exe"
    IntCmp $R0 0 waitdone
    Sleep 500
    Goto waitloop
  waitdone:

  Delete "$INSTDIR\*.*"
  RMDir /r "$INSTDIR"


1.14. NSIS ์—์„œ ActiveX Component ๋“ฑ๋กํ•˜๊ธฐ

http://nsis.sourceforge.net/archive/viewpage.php?pageid=435
~cpp 
;Inside the -Post section
Exec 'regsvr32.exe /s "$INSTDIR\${NAME_OF_MY_DLL}"'

;And Inside the Uninstall Section 
Exec 'regsvr32.exe /s /u "$INSTDIR\${NAME_OF_MY_DLL}"'


1.15. NSIS ์—์„œ uninstall.exe ๋งŒ๋“ค๊ธฐ


ํ•  ์ผ : 1. 'Uninstall' Section ์„ ๋งŒ๋“ ๋‹ค. 2. WriteInstaller ๋ฅผ ์ด์šฉํ•ด์ค€๋‹ค.

~cpp 
;--------------------------------    
;Uninstaller Section  
Section "Uninstall"
   
;Delete Files 
  RMDir /r "$INSTDIR\*.*"    
 
;Remove the installation directory
  RMDir "$INSTDIR"
  
;Delete Start Menu Shortcuts
  Delete "$DESKTOP\${MUI_PRODUCT}.lnk"
  Delete "$SMPROGRAMS\${MUI_PRODUCT}\*.*"
  RmDir  "$SMPROGRAMS\${MUI_PRODUCT}"
  
;Delete Uninstaller And Unistall Registry Entries
  DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\${MUI_PRODUCT}"
  DeleteRegKey HKEY_LOCAL_MACHINE
"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}"  
  
SectionEnd

Section ""
.
.
.

;๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— uninstall ํ”„๋กœ๊ทธ๋žจ ์…‹ํŒ…ํ•ด์ฃผ๋Š” ๋ถ€๋ถ„
;write uninstall information to the registry
  WriteRegStr HKLM
"Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}"
"DisplayName" "${MUI_PRODUCT} (remove only)"
  WriteRegStr HKLM
"Software\Microsoft\Windows\CurrentVersion\Uninstall\${MUI_PRODUCT}"
"UninstallString" "$INSTDIR\Uninstall.exe"

; Uninstaller ๋ฅผ ๋งŒ๋“œ๋Š” ๋ถ€๋ถ„ 
WriteUninstaller "$INSTDIR\Uninstall.exe"

SectionEnd


2. Thread

--fnwinter ํ˜• ๊ณ ๋งˆ์›Œ์—ฌ~ NSIS ์“ฐ๋Š”๊ฑฐ ์ •๋ฆฌ ํ•  ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋Š” ๋ฐ , PS ์ด๊ฑฐ ๋ง๊ณ ๋„ INNO SETUP ์ด๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๊ฑฐ๋“ ์š”. ๊ทธ๊ฒƒ๋„ ๊ดœ์ฐฎ์€๋ฐ, ํ•œ๋ฒˆ ์จ๋ณด์„ธ์š”~
๋ช‡๋ช‡ ์œ ํ‹ธ๋ฆฌํ‹ฐ ์ธ์Šคํ†จ๋Ÿฌ์—์„œ InnoSetup ์“ฐ๋Š”๊ฑฐ ์ข…์ข… ๋ณด์˜€์—ˆ๋Š”๋ฐ, ์ด๊ฒƒ๋„ ๊ณต์งœ์˜€๊ตฐ..~ ๊ทธ๋‚˜์ €๋‚˜, http://isfd.kaju74.de/index.php?screenshots . ๋„ˆ๋ฌด ๋ฝ€๋Œ€๋‚˜๋Š”๊ฑฐ ์•„๋ƒ?;; --1002
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:50
Processing time 0.0083 sec