๐Ÿš€ NSIS ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ํ™•์žฅ ๊ฐ€์ด๋“œ



๐Ÿš€ NSIS ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ํ™•์žฅ ๊ฐ€์ด๋“œ

๐Ÿงฉ 1๋‹จ๊ณ„: ์ œ๊ฑฐ ํ”„๋กœ๊ทธ๋žจ ์ƒ์„ฑ (Uninstaller)

Section "Install"
  SetOutPath "$INSTDIR"
  File "MyApp.exe"
  WriteUninstaller "$INSTDIR\Uninstall.exe"
SectionEnd
Section "Uninstall"
  Delete "$INSTDIR\MyApp.exe"
  Delete "$INSTDIR\Uninstall.exe"
  RMDir "$INSTDIR"
SectionEnd

๐Ÿ” ์„ค์น˜ ๋””๋ ‰ํ† ๋ฆฌ์— ์ œ๊ฑฐ์šฉ ์‹คํ–‰ ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” “ํ”„๋กœ๊ทธ๋žจ ์ œ๊ฑฐ”์—์„œ ์ด ํŒŒ์ผ๋กœ ์•ฑ์„ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์–ด์š”.


๐Ÿงฉ 2๋‹จ๊ณ„: ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋“ฑ๋ก

Section "Install"
  WriteRegStr HKLM "Software\MyApp" "Install_Dir" "$INSTDIR"
SectionEnd

Section "Uninstall"
  DeleteRegKey HKLM "Software\MyApp"
SectionEnd

๐Ÿ” ์„ค์น˜๋œ ์œ„์น˜๋‚˜ ์„ค์ • ๊ฐ’์„ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๋“ฑ๋กํ•˜๊ณ , ์ œ๊ฑฐ ์‹œ ํ•จ๊ป˜ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.
๐Ÿ“Œ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ RequestExecutionLevel admin ๊ผญ ์„ค์ •ํ•˜์„ธ์š”.


๐Ÿงฉ 3๋‹จ๊ณ„: ์„ค์น˜ ํ›„ ์ž๋™ ์‹คํ–‰

Section "Install"
  Exec "$INSTDIR\MyApp.exe"
SectionEnd

๋˜๋Š”, ์„ค์น˜ ์™„๋ฃŒ ํ›„ ์‹คํ–‰ ์—ฌ๋ถ€๋ฅผ ๋ฌป๋Š” UI ๊ตฌ์„ฑ๋„ ๊ฐ€๋Šฅํ•ด์š”:

Function .onInstSuccess
  MessageBox MB_YESNO "์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. MyApp์„ ์‹คํ–‰ํ• ๊นŒ์š”?" IDYES run
  return
  run:
    Exec "$INSTDIR\MyApp.exe"
FunctionEnd

๐Ÿงฉ 4๋‹จ๊ณ„: ์‹œ์ž‘ํ”„๋กœ๊ทธ๋žจ ๋“ฑ๋ก (์ž๋™ ์‹คํ–‰)

WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "MyApp" "$INSTDIR\MyApp.exe"

์‚ญ์ œ ์‹œ์—๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์ œ๊ฑฐ:

DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Run" "MyApp"

๐Ÿงฉ 5๋‹จ๊ณ„: ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ถ”๊ฐ€

System::Call 'Kernel32::GetEnvironmentVariableA(t, .r0, i) i(1024) t("PATH")'
StrCpy $0 "$0;$INSTDIR"
System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("PATH", r0)'

๐Ÿ“Œ ์„ค์น˜ ๊ฒฝ๋กœ๋ฅผ ํ™˜๊ฒฝ๋ณ€์ˆ˜ PATH์— ์ถ”๊ฐ€ํ•ด CLI์—์„œ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ์šฉ๋„์ž…๋‹ˆ๋‹ค.


๐Ÿงฉ 6๋‹จ๊ณ„: ํŒŒ์ผ ๋ณต์‚ฌ ๊ตฌ์กฐ ํ™•์žฅ (์„œ๋ธŒ ํด๋” ํฌํ•จ)

SetOutPath "$INSTDIR\bin"
File "bin\MyApp.exe"

SetOutPath "$INSTDIR\config"
File "config\settings.ini"

๋˜๋Š” ์ „์ฒด ํด๋” ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•œ ์ฑ„ ํ†ต์งธ๋กœ ๋ณต์‚ฌํ•˜๋ ค๋ฉด:

SetOutPath "$INSTDIR"
File /r "MyApp_Folder\*.*"

๐Ÿงฉ 7๋‹จ๊ณ„: ์•„์ด์ฝ˜ ๋“ฑ๋ก (์‹œ์ž‘ ๋ฉ”๋‰ด, ๋ฐ”ํƒ•ํ™”๋ฉด)

CreateShortCut "$DESKTOP\MyApp.lnk" "$INSTDIR\MyApp.exe"
CreateShortCut "$SMPROGRAMS\MyApp\MyApp.lnk" "$INSTDIR\MyApp.exe"

์ œ๊ฑฐ ์‹œ:

Delete "$DESKTOP\MyApp.lnk"
Delete "$SMPROGRAMS\MyApp\MyApp.lnk"
RMDir "$SMPROGRAMS\MyApp"

๐Ÿงฉ 8๋‹จ๊ณ„: ๋ฌด์ธ ์„ค์น˜ (Silent Install)

SilentInstall silent
SilentUnInstall silent

๐Ÿ“Œ ๋ฐฐํฌ ์‹œ ์‚ฌ์šฉ์ž UI ์—†์ด ์„ค์น˜ํ•˜๋ ค๋ฉด, ์ด ์„ค์ •์„ ๋ช…์‹œํ•˜๊ฑฐ๋‚˜ ๋ช…๋ น์ค„์—์„œ /S ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์„ธ์š”.

MyApp_Installer.exe /S

๐Ÿงฉ 9๋‹จ๊ณ„: ์‚ฌ์šฉ์ž ์ •์˜ ๋ณ€์ˆ˜ ํ™œ์šฉ

Var INSTALL_TIME

Function .onInit
  GetTime $INSTALL_TIME "%Y-%m-%d %H:%M:%S"
FunctionEnd

๐Ÿ” ๋กœ๊น…, ๋””๋ฒ„๊น…, ์‚ฌ์šฉ์ž ๋™์˜ ํ™•์ธ์šฉ ํŒ์—… ๋“ฑ์— ๋‹ค์–‘ํ•˜๊ฒŒ ์‘์šฉํ•  ์ˆ˜ ์žˆ์–ด์š”.


๐Ÿงฉ 10๋‹จ๊ณ„: ์„ค์น˜ ์™„๋ฃŒ ํ›„ ์›น ํŽ˜์ด์ง€ ์—ด๊ธฐ

ExecShell "open" "https://example.com/thank-you"

์„ค์น˜๊ฐ€ ๋๋‚œ ๋’ค ํŠน์ • ์›น ํŽ˜์ด์ง€(์˜ˆ: ๊ณ ๊ฐ์ง€์›, ํ”ผ๋“œ๋ฐฑ ๋“ฑ)๋กœ ์œ ๋„ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“Œ ์ •๋ฆฌ

์ด์ œ NSIS๋ฅผ ํ†ตํ•ด ๋‹จ์ˆœํ•œ ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ๋„˜์–ด์„œ, ์‹ค๋ฌด์—์„œ๋„ ๋ฐ”๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœํŽ˜์…”๋„ํ•œ ์ธ์Šคํ†จ๋Ÿฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์–ด์š”.
ํ•„์š”์— ๋”ฐ๋ผ ์œ„ ๊ธฐ๋Šฅ๋“ค์„ ์กฐํ•ฉํ•ด ์‚ฌ์šฉํ•˜๊ณ , Function๊ณผ IfFileExists, ReadRegStr, MessageBox ๋“ฑ์„ ํ™œ์šฉํ•ด ๋”์šฑ ๋ณต์žกํ•œ ์กฐ๊ฑด ๋ถ„๊ธฐ๊นŒ์ง€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋‹ต๊ธ€ ๋‚จ๊ธฐ๊ธฐ

์ด๋ฉ”์ผ ์ฃผ์†Œ๋Š” ๊ณต๊ฐœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•„์ˆ˜ ํ•„๋“œ๋Š” *๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค