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

NSIS 고급 활용 시리즈 ④ – 사용자 환경 맞춤 설치기: OS, 언어, 하드웨어 조건 기반 설치 분기

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

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 차이
관리자 권한 환경 변수, 서비스 등록 필요 여부
반응형