반응형
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 플러그인 설치
- 공식 사이트: https://nsis.sourceforge.io/EnVar_plug-in
- 파일 위치: Plugins\x86-unicode\EnVar.dll
반응형
🧱 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 플러그인을 사용하면 환경변수도 유연하게 설정 가능합니다.
- 설치 환경을 자동 구성하고 싶다면 반드시 익혀야 할 고급 기능입니다.
반응형
'코딩취미 > 프로그램 지식' 카테고리의 다른 글
NSIS 시리즈 ⑧ – 조건부 설치 및 다국어 지원: 다양한 사용자 환경에 대응하기 (0) | 2025.06.06 |
---|---|
NSIS 시리즈 ⑦ – 사용자 입력 받기: nsDialogs를 활용한 맞춤형 설치기 만들기 (0) | 2025.06.06 |
NSIS 시리즈 ⑤ – 언인스톨러 만들기: 깔끔한 제거 기능 구현 (0) | 2025.06.05 |
NSIS 시리즈 ④ – 파일 복사와 바로가기 만들기: 설치기의 핵심 기능 (0) | 2025.06.05 |
NSIS 시리즈 ③ – 마법사 UI 만들기: MUI.nsh와 페이지 커스터마이징 (0) | 2025.06.05 |