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