반응형
NSIS 시리즈 ⑤ – 언인스톨러 만들기: 깔끔한 제거 기능 구현
설치기 못지않게 중요한 것이 바로 언인스톨러(제거기) 입니다. 사용자가 설치한 프로그램을 완전히 제거할 수 있도록 하려면, NSIS 스크립트에 언인스톨 섹션과 관련 레지스트리 등록을 추가해주어야 합니다.
이번 글에서는 NSIS에서 언인스톨러를 만드는 전체 과정을 단계별로 설명합니다.
✅ 언인스톨러란?
언인스톨러는 설치한 파일, 폴더, 바로가기, 레지스트리 등을 자동으로 제거하는 실행 파일입니다.
보통 설치 시 생성된 uninstall.exe 파일이 다음 위치에 저장됩니다:
C:\Program Files\YourApp\uninstall.exe
윈도우 제어판의 "프로그램 제거"에서 해당 앱을 삭제할 때 이 언인스톨러가 호출됩니다.
🧱 기본 문법 구조
NSIS에서 언인스톨러를 구성하기 위해선 다음 두 가지가 필요합니다:
- 언인스톨 섹션 선언
- 언인스톨러 실행 파일 생성 및 등록
🛠️ 예제 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
🧭 설치 후 제거 동작 확인하기
- MyApp_Installer.exe 실행 → 설치 완료
- C:\Program Files\MyApp\uninstall.exe 생성됨
- 제어판 → 프로그램 제거에서 "MyApp" 목록 확인 가능
- 더블클릭 또는 uninstall.exe 실행 시 설치 제거 진행
💡 언인스톨러 작성 팁
- 삭제할 경로는 변경 가능성 고려하여 $INSTDIR 기준으로 작성하세요.
- 프로그램 실행 중에는 삭제가 불가능하므로, 실행 중이라면 언인스톨 전에 종료 처리 유도 필요.
- 설치 시 레지스트리 작성이 없다면 제어판 목록에 보이지 않을 수 있습니다.
반응형
'코딩취미 > 프로그램 지식' 카테고리의 다른 글
NSIS 시리즈 ⑦ – 사용자 입력 받기: nsDialogs를 활용한 맞춤형 설치기 만들기 (0) | 2025.06.06 |
---|---|
NSIS 시리즈 ⑥ – 레지스트리 및 환경변수 다루기: 시스템과 상호작용하기 (0) | 2025.06.06 |
NSIS 시리즈 ④ – 파일 복사와 바로가기 만들기: 설치기의 핵심 기능 (0) | 2025.06.05 |
NSIS 시리즈 ③ – 마법사 UI 만들기: MUI.nsh와 페이지 커스터마이징 (0) | 2025.06.05 |
NSIS 시리즈 ② – 변수와 조건문, 설치 로직 만들기 (0) | 2025.06.05 |