🚀 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를 통해 단순한 설치 프로그램을 넘어서, 실무에서도 바로 쓸 수 있는 프로페셔널한 인스톨러를 만들 수 있게 되었어요.
필요에 따라 위 기능들을 조합해 사용하고, FunctionIfFileExists, ReadRegStr, MessageBox 등을 활용해 더욱 복잡한 조건 분기까지 처리할 수 있습니다.


답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다