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

NSIS 고급 활용 시리즈 ⑥ – 설치 후 구성 자동화: 바로가기, 서비스 등록, 환경변수 설정

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

NSIS 고급 활용 시리즈 ⑥ – 설치 후 구성 자동화: 바로가기, 서비스 등록, 환경변수 설정

설치가 완료된 뒤, 사용자에게는 다음과 같은 편의 기능이 제공되어야 합니다:

  • 바탕화면이나 시작 메뉴에 바로가기 생성
  • 윈도우 서비스로 자동 시작되도록 등록
  • 명령어 실행이 가능한 환경변수 설정

이번 편에서는 NSIS로 이러한 설치 후 구성 작업을 자동화하는 방법을 알아봅니다.


✅ 설치 후 구성 기능 요약

기능 설명
바로가기 생성 CreateShortCut, CreateDirectory 사용
환경변수 설정 EnVar 플러그인 또는 레지스트리 직접 쓰기
윈도우 서비스 등록 nsExec로 sc.exe 실행

🖥️ ① 바탕화면 및 시작메뉴에 바로가기 만들기

Section "Shortcuts"
  ; 시작 메뉴 폴더 생성
  CreateDirectory "$SMPROGRAMS\MyApp"

  ; 시작 메뉴 바로가기
  CreateShortCut "$SMPROGRAMS\MyApp\MyApp.lnk" "$INSTDIR\myapp.exe"

  ; 바탕화면 바로가기
  CreateShortCut "$DESKTOP\MyApp.lnk" "$INSTDIR\myapp.exe"
SectionEnd

CreateShortCut은 실행파일, 아이콘, 인수 등 다양한 옵션을 지정할 수 있습니다.


🌐 ② 환경변수 등록 (PATH 포함)

방법 A – EnVar 플러그인 사용

!include "EnvVarUpdate.nsh"

Section "Set Environment Variable"
  ; PATH에 추가 (중복 방지)
  ${EnvVarUpdate} $0 "PATH" "A" "HKCU" "$INSTDIR"
SectionEnd

A: Append / HKCU: Current User 기준 (관리자 권한 불필요)

방법 B – 레지스트리 직접 쓰기 (관리자 필요)

WriteRegExpandStr HKCU "Environment" "MYAPP_PATH" "$INSTDIR"
System::Call 'User32::SendMessageTimeoutA(i 0xffff, i ${WM_SETTINGCHANGE}, i 0, t "Environment", i 0, i 5000, *i .r0)'

환경변수 변경 후에는 반드시 SendMessageTimeout으로 시스템 갱신이 필요합니다.

반응형

⚙️ ③ 윈도우 서비스 등록 (sc.exe 사용)

예: MyService.exe를 윈도우 서비스로 등록

Section "Register Windows Service"
  nsExec::ExecToLog 'sc create "MyService" binPath= "$INSTDIR\MyService.exe" start= auto'
  nsExec::ExecToLog 'sc start "MyService"'
SectionEnd
  • sc create: 서비스 등록
  • binPath= 뒤에는 공백 필수
  • 관리자 권한 필수 (RequestExecutionLevel admin 필요)

서비스가 이미 있는 경우에는 sc delete MyService로 제거 후 다시 등록하는 로직을 넣을 수 있습니다.


🛠️ 실전 예제: 설치 후 전체 구성 자동화

Section "Post Install Configuration"

  ; 바로가기 생성
  CreateShortCut "$DESKTOP\MyApp.lnk" "$INSTDIR\myapp.exe"

  ; 환경변수 PATH에 설치 폴더 추가
  ${EnvVarUpdate} $0 "PATH" "A" "HKCU" "$INSTDIR"

  ; 윈도우 서비스 등록
  nsExec::ExecToLog 'sc create "MyAppService" binPath= "$INSTDIR\myappsvc.exe" start= auto'
  nsExec::ExecToLog 'sc start "MyAppService"'

SectionEnd

💡 팁

내용 항목
CreateShortCut 실행파일 외에 .bat, .url, .txt도 대상 가능
환경변수 설정 사용자 수준(HKCU)과 시스템 수준(HKLM)은 구분 필요
서비스 등록 실패 이미 존재할 경우 sc query로 상태 점검 후 처리
반응형