본문 바로가기
코딩취미/프로그램 지식

NSIS 시리즈 ⑤ – 언인스톨러 만들기: 깔끔한 제거 기능 구현

by 브링블링 2025. 6. 5.
반응형

NSIS 시리즈 ⑤ – 언인스톨러 만들기: 깔끔한 제거 기능 구현

설치기 못지않게 중요한 것이 바로 언인스톨러(제거기) 입니다. 사용자가 설치한 프로그램을 완전히 제거할 수 있도록 하려면, NSIS 스크립트에 언인스톨 섹션과 관련 레지스트리 등록을 추가해주어야 합니다. 

이번 글에서는 NSIS에서 언인스톨러를 만드는 전체 과정을 단계별로 설명합니다.


✅ 언인스톨러란?

언인스톨러는 설치한 파일, 폴더, 바로가기, 레지스트리 등을 자동으로 제거하는 실행 파일입니다.
보통 설치 시 생성된 uninstall.exe 파일이 다음 위치에 저장됩니다:

C:\Program Files\YourApp\uninstall.exe

윈도우 제어판의 "프로그램 제거"에서 해당 앱을 삭제할 때 이 언인스톨러가 호출됩니다.


🧱 기본 문법 구조

NSIS에서 언인스톨러를 구성하기 위해선 다음 두 가지가 필요합니다:

  1. 언인스톨 섹션 선언
  2. 언인스톨러 실행 파일 생성 및 등록

🛠️ 예제 1: 기본 언인스톨러 구성

OutFile "MyApp_Setup.exe"
InstallDir "$PROGRAMFILES\MyApp"
RequestExecutionLevel admin

; 설치 섹션
Section "Install"
  SetOutPath "$INSTDIR"
  File "MyApp.exe"

  ; 시작메뉴 및 바탕화면 바로가기
  CreateShortCut "$DESKTOP\MyApp.lnk" "$INSTDIR\MyApp.exe"
  CreateDirectory "$SMPROGRAMS\MyApp"
  CreateShortCut "$SMPROGRAMS\MyApp\MyApp.lnk" "$INSTDIR\MyApp.exe"

  ; 언인스톨러 생성
  WriteUninstaller "$INSTDIR\uninstall.exe"

  ; 제어판 등록 (레지스트리 등록)
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp" \
    "DisplayName" "MyApp"
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp" \
    "UninstallString" "$INSTDIR\uninstall.exe"
SectionEnd

반응형

🔁 예제 2: 언인스톨러 섹션 정의

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

  Delete "$INSTDIR\MyApp.exe"
  Delete "$INSTDIR\uninstall.exe"
  RMDir  "$INSTDIR"

  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp"
SectionEnd

📋 주요 명령어 정리

명령어 설명
WriteUninstaller 언인스톨러 실행 파일 생성
WriteRegStr 윈도우 제어판 등록
Delete, RMDir 파일/폴더 삭제
DeleteRegKey 레지스트리 키 삭제

🧪 실전: 설치와 제거 흐름 예시

!include "MUI.nsh"

Name "MyApp"
OutFile "MyApp_Installer.exe"
InstallDir "$PROGRAMFILES\MyApp"
RequestExecutionLevel admin

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "LICENSE.txt"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"

Section "Main"
  SetOutPath "$INSTDIR"
  File "MyApp.exe"
  CreateShortCut "$DESKTOP\MyApp.lnk" "$INSTDIR\MyApp.exe"

  WriteUninstaller "$INSTDIR\uninstall.exe"

  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp" \
    "DisplayName" "MyApp"
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp" \
    "UninstallString" "$INSTDIR\uninstall.exe"
SectionEnd

Section "Uninstall"
  Delete "$DESKTOP\MyApp.lnk"
  Delete "$INSTDIR\MyApp.exe"
  Delete "$INSTDIR\uninstall.exe"
  RMDir  "$INSTDIR"

  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp"
SectionEnd

🧭 설치 후 제거 동작 확인하기

  1. MyApp_Installer.exe 실행 → 설치 완료
  2. C:\Program Files\MyApp\uninstall.exe 생성됨
  3. 제어판 → 프로그램 제거에서 "MyApp" 목록 확인 가능
  4. 더블클릭 또는 uninstall.exe 실행 시 설치 제거 진행

💡 언인스톨러 작성 팁

  • 삭제할 경로는 변경 가능성 고려하여 $INSTDIR 기준으로 작성하세요.
  • 프로그램 실행 중에는 삭제가 불가능하므로, 실행 중이라면 언인스톨 전에 종료 처리 유도 필요.
  • 설치 시 레지스트리 작성이 없다면 제어판 목록에 보이지 않을 수 있습니다.
반응형