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

NSIS 시리즈 ⑥ – 레지스트리 및 환경변수 다루기: 시스템과 상호작용하기

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

NSIS 시리즈 ⑥ – 레지스트리 및 환경변수 다루기: 시스템과 상호작용하기

설치기에서 환경 설정을 자동으로 구성하는 것은 매우 중요한 작업입니다. 윈도우 설치기에선 특히 레지스트리 조작환경변수 설정이 핵심입니다. 이번 글에서는 NSIS에서 제공하는 레지스트리/환경변수 명령어와 실전 예제를 정리합니다.


✅ 윈도우 레지스트리란?

  • 윈도우 시스템의 구성 정보를 저장하는 데이터베이스입니다.
  • 경로 형식: HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER, HKEY_CLASSES_ROOT 등

NSIS에서는 레지스트리를 통해 제어판 등록, 시작 프로그램 등록, 환경설정 유지 등을 자동화할 수 있습니다.


📚 NSIS 레지스트리 관련 명령어

명령어 설명
WriteRegStr 문자열 레지스트리 값 쓰기
WriteRegDWORD 정수 값 쓰기
ReadRegStr 문자열 값 읽기
DeleteRegValue 키 안의 값 삭제
DeleteRegKey 키 전체 삭제

🛠️ 예제 1: 제어판 등록 정보 쓰기

WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\MyApp" \
  "DisplayName" "My Application"

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

이렇게 하면 프로그램이 제어판 > 프로그램 추가/제거 목록에 표시됩니다.


🧪 예제 2: 시작 프로그램 등록

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

윈도우 시작 시 MyApp.exe가 자동 실행됩니다.


🧪 예제 3: 기존 값 읽기

ReadRegStr $0 HKCU "Software\MyCompany\MyApp" "InstallPath"
MessageBox MB_OK "기존 설치 경로: $0"

✅ 환경변수 설정하기 (with EnVar 플러그인)

NSIS 기본 기능만으로는 환경변수를 다루기 어렵습니다. 이를 위해 EnVar 플러그인을 사용합니다.

📥 EnVar 플러그인 설치


반응형

🧱 EnVar 명령어

명령어 설명
EnVar::SetHKCU 사용자 환경변수 대상으로 설정
EnVar::SetHKLM 시스템 환경변수 대상으로 설정
EnVar::Set "NAME" "VALUE" 환경변수 설정
EnVar::AddValue "Path" "$INSTDIR" 기존 Path에 값 추가
EnVar::DeleteValue "NAME" 환경변수 제거
EnVar::GetValue "NAME" 현재 환경변수 값 읽기
 

🛠️ 예제 4: 사용자 환경변수 MYAPP_PATH 설정

EnVar::SetHKCU
EnVar::Set "MYAPP_PATH" "$INSTDIR"
Pop $0

환경변수 MYAPP_PATH에 설치 경로를 설정합니다.


🧪 예제 5: PATH 환경변수에 설치 경로 추가 (중복 방지 포함)

EnVar::SetHKCU
EnVar::GetValue "Path"
Pop $0
Push "$0"
Push "$INSTDIR"
Call StrStr
Pop $1
StrCmp $1 "" 0 done
  EnVar::AddValue "Path" "$INSTDIR"
  Pop $2
done:

이 코드는 PATH 변수에 $INSTDIR이 없는 경우에만 추가합니다.


🔁 환경변수 삭제 (제거 시 사용)

EnVar::SetHKCU
EnVar::DeleteValue "MYAPP_PATH"
Pop $0

📌 StrStr 함수 (문자열 포함 여부 검사)

환경변수 중복 여부 검사에 필요한 함수입니다:

Function StrStr
  Exch $R1
  Exch
  Exch $R0
  Push $R2
  Push $R3
  Push $R4
  Push $R5
  StrLen $R2 $R0
  StrLen $R3 $R1
  StrCpy $R4 0
  loop:
    StrCmp $R4 $R2 done
    StrCpy $R5 $R0 $R3 $R4
    StrCmp $R5 $R1 found
    IntOp $R4 $R4 + 1
    Goto loop
  found:
    StrCpy $R0 $R0 "" $R4
    Goto end
  done:
    StrCpy $R0 ""
  end:
    Pop $R5
    Pop $R4
    Pop $R3
    Pop $R2
    Push $R0
FunctionEnd

✅ 환경변수 반영 즉시 적용하기

설치 후 환경변수 적용을 위해 다음 메시지를 전송:

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

🎯 정리

  • 레지스트리를 통해 제어판 등록, 시작프로그램 자동 실행, 설정 저장 등을 구현할 수 있습니다.
  • EnVar 플러그인을 사용하면 환경변수도 유연하게 설정 가능합니다.
  • 설치 환경을 자동 구성하고 싶다면 반드시 익혀야 할 고급 기능입니다.
반응형