NSIS 쉬운 문법 설명

반응형

HM NIS Edit으로 설정한 것들

;HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "PRODUCT 명"
!define PRODUCT_VERSION "버전"
!define PRODUCT_PUBLISHER "회사이름, Inc."
!define PRODUCT_DIR_REGKEY "Software\Microsoft"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"

SetCompressor lzma   ;압축 방법 (EX. lzma: 7z)
  • NSIS의 주석은 ;(세미콜론) 이다.
  • !define 매크로 상수를 사용하기 위해서는 ${PRODUCT_NAME} 처럼 사용하여야 한다.

MUI.nsh

; MUI(Modern Interface Settings) UI를 Modern으로 설정한다.
!include "MUI.nsh"

; MUI Settings
!define MUI_ABORTWARNING                                                ;경고 페이지
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\아이콘 명.ico"      ;install 파일 아이콘 설정
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\아이콘 명.ico"    ;uninstall 파일 아이콘 설정
                                            ;주의할 점은 install, uninstall 아이콘 포멧은 일치해야 함
                                            ;${NSISDIR}: NSIS폴더 경로 (C:\Program Files (x86)\NSIS)

; 환영 메시지 페이지
!insertmacro MUI_PAGE_WELCOME

; 설치 경로 선택 페이지
!insertmacro MUI_PAGE_DIRECTORY

; 설치 상태 페이지 (설치 퍼센트가 표시됨)
!insertmacro MUI_PAGE_INSTFILES

; 설치 완료 후 실행할 파일 정의하는 문구
!define MUI_FINISHPAGE_RUN "$INSTDIR\실행할 파일명.exe"

; 설치 완료 페이지
!insertmacro MUI_PAGE_FINISH

; 삭제 확인 페이지
! insertmacro MUI_UNPAGE_CONFIRM

; 삭제 상태 페이지
!insertmacro MUI_UNPAGE_INSTFILES

; 언어 파일
!insertmacro MUI_LANGUAGE "Korean"

; 예약 파일
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS

; 설치 윈도우가 자동으로 닫힐지 지정
AutoCloseWindow true              ; <-> AutoCloseWindow false

본문

Name "${PRODUCT_NAME}"                                ;설치 파일 Name
OutFile "생성될 설치파일명.exe"                        ;생성될 설치 파일명
InstallDir "C:\TEST"                                  ;설치될 디렉토리 / $INSTDIR  정의
InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""      
ShowInstDetails show                                  ;설치 파일의 세부사항을 볼 수 있는 설정
ShowUnInstDetails show                                ;uninstall 파일의 세부사항을 볼 수 있는 설정
                                                      ;show => nevershow로 하면 "보이지 않음"으로 설정
Section "MainSection" SEC01                           ;첫 번째 "MainSection" 이라는 뜻
  SetShellVarContext all                              
  Call WindowsType                                    ;정의한 함수 호출    [ Call 함수명 ]

  SetOutPath "$INSTDIR"                               ;설치할 경로 지정
  File "파일 경로\설치파일명"                          ;설치할 파일
  ExecWait "파일 경로\실행할 파일명"                   ;파일 실행
  DELETE "파일 경로\삭제할 파일명"                     ;삭제할 파일
SectionEnd

 

  • SetShellVarContext all
    $DESKTOP (바탕화면 디렉터리)
    $EXEDIR (인스톨러 실행 파일이 위치하는 디렉터리)
    $PROGRAMFILES (Program Files 디렉터리)
    $TEMP (임시 디렉터리)
    $STARTMENU (시작메뉴 폴더)
    $SMPROGRAMS (시작메뉴->프로그램 폴더)
    $DOCUMENTS (문서 디렉터리)
    등 위와 같은 상수의 컨텍스트는 SetShellVarContext 설정에 따라 달라질 수 있다. 기본값은 현재 사용자이므로 만약 코드가 전부 올바르게 작성되어 있는데 정상 작동하지 않는다 생각이 될 경우
    SetShellVarContext all 을 작성하면 될 경우가 있다.

 

  • Call 함수명

함수를 호출할 때 사용된다.
함수 정의 예제 )

Function WindowsType            ;Function 함수명
  ClearErrors
  ReadRegStr $0 HKLM "SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion" "ProgramFilesDir"
  ${If} $0 == ''
  Call InstallNetCore_x86
  ${Else}
  Call InstallNetCore_x64
  ${EndIf}
FunctionEnd

>   ReadRegStr $0 레지스트리 경로 및 이름
     $0 : 해당 Value 값이 저장됨.

>   ${If} : 조건문을 사용할 때 이와 같이 사용됨, 자세한 예는 코드 참고

 

 

 

  • Exec / ExecWait : 뒤에 나오는 경로의 파일을 실행한다.
    • Exec : 호출 된 문자열을 일부 응용 프로그램, 콘솔 또는 파일 처럼 실행한다.
    • ExecWait : Exec과 마찬가지로 해당 경로 파일을 실행하지만, 프로세스가 종료 될 때까지 기다린다는 차이점이 있다.

레지스트리 등록 및 uninstall 파일

Section -Post
  SetShellVarContext all
  WriteUninstaller "$INSTDIR\TEST_uninst.exe"
  
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "App Paths" "$INSTDIR\TEST\SampleClient.exe"
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "Location" "$INSTDIR\TEST"
  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "Version" "1.0.0.0"
  
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\TEST_uninst.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\TEST\SampleClient.exe"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
  WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
SectionEnd
  • WriteUninstaller : uninstall 파일명 및 경로 설정
  • WriteRegStr : 레지스트리 등록
    WriteRegStr HKLM “레지스트리 경로“ “이름“ “데이터(Value)“
반응형