반응형
NSIS 고급 활용 시리즈 ④ – 사용자 환경 맞춤 설치기: OS, 언어, 하드웨어 조건 기반 설치 분기
프로그램이 다양한 환경에서 동작해야 할 경우, 설치기에서 사용자 시스템 조건을 감지하여 조건별로 다른 구성을 설치하는 것이 중요합니다. NSIS는 기본적으로 운영체제, 언어, CPU 아키텍처 등을 감지할 수 있는 내장 상수를 제공하며, 조건 분기에 따라 맞춤 설치를 구현할 수 있습니다.
✅ 주요 기능 요약
조건 | NSIS 기능 또는 상수 |
OS 버전 | ${IsWin10}, ${IsWin7}, ${IsWinXP} 등 |
아키텍처 | ${RunningX64}, ${ProcessorArchitecture} |
시스템 언어 | $LANGUAGE, GetSystemLang |
관리자 권한 여부 | UserInfo::GetAccountType |
사용자 지정 변수 | 사용자 입력 기반 조건 분기 |
📂 사용 예시 시나리오
- Windows 7 이하에서는 특정 파일을 설치하지 않음
- 한국어 시스템에서만 한글 도움말 설치
- 64비트 시스템에만 특정 드라이버 설치
- 고급 모드일 때만 환경변수 등록
🧠 OS 버전 분기
Function .onInit
${If} ${IsWin10}
MessageBox MB_OK "Windows 10 이상입니다."
${ElseIf} ${IsWin7}
MessageBox MB_OK "Windows 7 환경입니다."
${Else}
MessageBox MB_ICONSTOP "지원하지 않는 운영체제입니다."
Abort
${EndIf}
FunctionEnd
IsWin* 매크로는 LogicLib.nsh에 정의되어 있으며, 기본적으로 포함됩니다.
⚙️ 아키텍처(32/64비트) 감지
!include "x64.nsh"
Section
${If} ${RunningX64}
MessageBox MB_OK "64비트 시스템입니다."
; 64비트 전용 드라이버 설치
File /oname=$INSTDIR\driver64.sys "driver\x64\driver.sys"
${Else}
MessageBox MB_OK "32비트 시스템입니다."
File /oname=$INSTDIR\driver32.sys "driver\x86\driver.sys"
${EndIf}
SectionEnd
${RunningX64}는 실행 중인 프로세스가 64비트 시스템에서 실행되고 있는지 확인합니다.
반응형
🌐 시스템 언어 기반 조건
Function .onInit
; 시스템 언어 확인 (예: 한국어는 1042)
System::Call 'kernel32::GetUserDefaultLangID() i .r0'
IntCmp $0 1042 0 not_korean 0
MessageBox MB_OK "한국어 시스템입니다. 한글 도움말을 설치합니다."
StrCpy $LANGUAGE 1042
Goto done
not_korean:
MessageBox MB_OK "한국어 시스템이 아닙니다. 영문 도움말만 설치됩니다."
done:
FunctionEnd
참고: 언어 ID 리스트 (MSDN)
🧪 예제: 조건에 따라 설치 파일 분기
Section "Install Files"
; 공통 파일 설치
File "common\myapp.exe"
; 운영체제에 따라 설치할 추가 파일
${If} ${IsWin10}
File "win10\special_feature.dll"
${EndIf}
; 언어에 따라 문서 분기
${If} $LANGUAGE == 1042
File "doc\manual_kr.pdf"
${Else}
File "doc\manual_en.pdf"
${EndIf}
; 아키텍처에 따라 드라이버 분기
${If} ${RunningX64}
File "driver\x64\driver.sys"
${Else}
File "driver\x86\driver.sys"
${EndIf}
SectionEnd
🔄 사용자 선택 기반 조건 설치
nsDialogs 또는 InstallOptions를 사용하여 사용자의 선택을 변수로 받아 설치 흐름에 반영할 수도 있습니다.
; 고급 사용자 입력을 받아 설치 분기
${If} $R1 == "advanced"
File "config\expert_mode.ini"
${Else}
File "config\default_mode.ini"
${EndIf}
$R1에는 사용자의 선택값을 저장해둘 수 있습니다.
🎯 설치 환경 분기 시 체크리스트
조건 | 고려 요소 |
OS 버전 | 최신 Windows만 지원하는 기능 유무 |
언어 설정 | 다국어 리소스 제공 여부 |
CPU 아키텍처 | 드라이버 또는 DLL 차이 |
관리자 권한 | 환경 변수, 서비스 등록 필요 여부 |
반응형
'코딩취미 > 프로그램 지식' 카테고리의 다른 글
NSIS 고급 활용 시리즈 ⑥ – 설치 후 구성 자동화: 바로가기, 서비스 등록, 환경변수 설정 (0) | 2025.06.08 |
---|---|
NSIS 고급 활용 시리즈 ⑤ – 설치 복구 및 재설치 제어: Repair 모드 구현과 중복 방지 (0) | 2025.06.08 |
NSIS 고급 활용 시리즈 ③ – 설치 보안 강화: 무결성 검증, 암호 입력, 관리자 권한 처리 (0) | 2025.06.08 |
NSIS 고급 활용 시리즈 ② – 사용자 정의 페이지 고급 구현: nsDialogs로 조건부 입력, 폼 구성, 이벤트 제어 (0) | 2025.06.07 |
NSIS 고급 활용 시리즈 ① – 플러그인 연동 심화: 외부 프로세스 제어, INI 처리, 로그 저장 (0) | 2025.06.07 |