NSIS sample script.

CMD BAT 인스톨 2018. 2. 7. 22:57


reference : 
http://kin.naver.com/knowhow/entry.php?d1id=3&dir_id=3&eid=jqpkwn4ECfIr/4mMJo06yrqC1Uwf0DUv&qb=bnNpcyB1bmluc3RhbGw=

NSIS 스크립트 예제>

=========================================================================================

 

;NSIS Modern User Interface
;Eocs (굴단::Nuke팀::헌터)
;Written by Eocs (=Arian2u,4u=SJWannabe=DeadlyAngel)

;★★★--------------------------------
;Include Modern UI
  !include "MUI.nsh" ; ◀ Modern UI 의 헤더파일입니다.

                             ; (Modern UI 는 최근의 윈도에서 사용되는 마법사와 같은 형태의

                             인터페이스를 갖추고 있습니다.)

;★★★--------------------------------
;General

 ;Name and file
  Name "Nuke UI Ver 0.7 베타" ; ◀ 셋업 실행시 상단에 나타날 프로그램 명칭입니다.
  OutFile "Nuke_Setup.exe" ; ◀ 셋업파일명을 지정해줍니다.

 ;Get installation folder from registry if available
  InstallDirRegKey HKCU "Software\Nuke UI Beta" "" ; ◀ 레지스트리에 등록합니다.
 
;★★★--------------------------------
;Interface Settings
  !define MUI_ABORTWARNING

 

;★★★--------------------------------
;Pages
 !insertmacro MUI_PAGE_LICENSE $(myLicenseData) ; ◀ 아래의 A) LicenseData와 맞물려

                                                                             한글 txt 파일을 읽어들입니다.
  !insertmacro MUI_PAGE_COMPONENTS
  !insertmacro MUI_PAGE_DIRECTORY
  !insertmacro MUI_PAGE_INSTFILES
  !insertmacro MUI_UNPAGE_CONFIRM
  !insertmacro MUI_UNPAGE_INSTFILES 
 
;★★★--------------------------------
;Languages
 !define EUL_RUL "를"       ;한글 (을)(를) 처리 ; ◀ 한글 (을)(를)처리를 수정해줍니다.
 !insertmacro MUI_LANGUAGE "Korean" ; ◀ 기본 언어를 한글로 설정합니다.
 
 ;Reserve Files
  !insertmacro MUI_RESERVEFILE_LANGDLL
 
 LicenseLangString myLicenseData ${LANG_KOREAN} "${NSISDIR}\Docs\Modern UI\License_NukeUI_KR.txt"
 LicenseData $(myLicenseData) ; ◀ A) LicenseLangString과 함께 사용하여 라이센스

                                              정보를 한글 파일로 사용할 수 있도록 합니다.

 

;★★★--------------------------------
;함수 내에서만 실행되는 것들 처리
Function .onInit         ;onInit
 ;WOW가 설치된 경로 가져오기
 ReadRegStr $INSTDIR HKEY_LOCAL_MACHINE "SOFTWARE\Blizzard Entertainment\World of Warcraft" "InstallPath" ; ◀ 레지스트리의 값을 읽어서 $INSTDIR에 저장합니다.
 ;중복실행 방지
  System::Call 'kernel32::CreateMutexA(i 0, i 0, t "NukeUI_Beta_0.7") i .r1 ?e'
  Pop $R0
  StrCmp $R0 0 +3
   MessageBox MB_OK|MB_ICONEXCLAMATION "NukeUI 0.7 설치를 위한 인스톨러가 이미 실행중입니다. - Eocs (굴단::Nuke팀::헌터) -" ; ◀ Mutex를 만들어 중복실행을 방지합니다.
   Abort
FunctionEnd

 

;★★★--------------------------------
;Default installation folder 
 InstallDir $INSTDIR ; ◀ 기본 설정 경로를 지정합니다.
 
;★★★--------------------------------
;Installer Sections - 필수 애드온 (UnitFrame 관련, Raid 관련, Sct, SpellAllert 등...)
Section "!필수(공통) 기능" GR_COMMON ; ◀ !가 들어간 Section의 문자열은 굵게 나타납니다.
 SectionIn RO ; ◀ 필수 선택으로 Read Only
 
  ; Write the installation path into the registry
  WriteRegStr HKLM SOFTWARE\NukeUI "Install_Dir" "$INSTDIR" ; ◀ 인스톨 경로를 레지스트리에

                                                                                           등록합니다.
 
  ; Write the uninstall keys for Windows

  ; ◀ 아래의 4줄은 Uninstall 정보를 레지스트리에 등록합니다.
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NukeUI" "DisplayName" "Nuke UI Ver 0.7 베타"
  WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NukeUI" "UninstallString" '"$INSTDIR\Uninstall_NukeUI.exe"'
  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NukeUI" "NoModify" 1
  WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NukeUI" "NoRepair" 1
 WriteUninstaller "$INSTDIR\Uninstall_NukeUI.exe"
 
 ;Start Menu Shortcuts ; ◀ 프로그램 그룹에 등록하고, 언인스톨의 바로가기 아이콘을 만듭니다.
  CreateDirectory "$SMPROGRAMS\Nuke UI Ver 0.7 베타"
  CreateShortCut "$SMPROGRAMS\Nuke UI Ver 0.7 베타\Nuke UI 언인스톨(제거).lnk" "$INSTDIR\Uninstall_NukeUI.exe" "" "$INSTDIR\Uninstall_NukeUI.exe" 0

 

 ;Remove And Create Directory
  RMDir /r "$INSTDIR\Interface" ; Interface(AddOns) 폴더 삭제 ; ◀ /r 옵션은 하위폴더를 포함
 RMDir /r "$INSTDIR\WTF" ; WTF(Account) 폴더 삭제 
 CreateDirectory "$INSTDIR\Interface"  ; Interface(AddOns) 폴더 생
 CreateDirectory "$INSTDIR\WTF"    ; WTF(Account) 폴더 생성
 
 ;필수(공통) 애드온 설치
 SetOutPath "$INSTDIR\Interface\AddOns\!ImprovedErrorFrame"
 File /r "..\..\..\..\AddOns(NukeUI 0.7배포)\!ImprovedErrorFrame\" ; ◀ /r 옵션으로 모두 포함
 SetOutPath "$INSTDIR\Interface\AddOns\!StopTheSpam"
 ;이하 생략 합니다.

 ;.

 ;.

 ;.


 ;WTF\Account 폴더에 설정 파일 설치
 SetOutPath "$INSTDIR\WTF\Account\계정이름입력"
 File /r "..\..\..\..\Account(NukeUI 0.7배포)\계정이름입력\"
SectionEnd

 

;★★★--------------------------------
;Installer Sections - 타이탄 패널과 플러그인
SectionGroup /e "타이탄 패널" GR_TITAN ; ◀ /e 옵션은 Expand입니다. 옵션을 확장시킵니다.
 Section "타이탄 기본" SecTitan
  SectionIn RO
  SetOutPath "$INSTDIR\Interface\AddOns\Titan"
  File /r "..\..\..\..\AddOns(NukeUI 0.7배포)\Titan\"
  SetOutPath "$INSTDIR\Interface\AddOns\TitanAmmo"
  File /r "..\..\..\..\AddOns(NukeUI 0.7배포)\TitanAmmo\"
  SetOutPath "$INSTDIR\Interface\AddOns\TitanBag"
  File /r "..\..\..\..\AddOns(NukeUI 0.7배포)\TitanBag\"
  SetOutPath "$INSTDIR\Interface\AddOns\TitanClock"
  File /r "..\..\..\..\AddOns(NukeUI 0.7배포)\TitanClock\"
  ;이하 생략합니다.

  ;.

  ;.

  ;.
 SectionEnd
 SectionGroup "타이탄 추가" GR_T_PLUGIN
  Section "경험치표시" SecTitanXPStatus
   SectionIn RO
   SetOutPath "$INSTDIR\Interface\AddOns\TitanXPStatus"
   File /r "..\..\..\..\AddOns(NukeUI 0.7배포)\TitanXPStatus\"
  SectionEnd 
  Section /o "어그로경고" SecTitanAggro
   SetOutPath "$INSTDIR\Interface\AddOns\TitanAggro"
   File /r "..\..\..\..\AddOns(NukeUI 0.7배포)\TitanAggro\"
  SectionEnd
  ;이하 생략합니다.

  ;.

  ;.

  ;.
 SectionGroupEnd
SectionGroupEnd ; ◀ SectionGroup내에 여러 Section과 하위 SectionGroup이 있습니다.
 
;★★★--------------------------------

; 이하 SectionGroup과 Section들 생략합니다.

;.

;.

;.


 

;★★★--------------------------------
;Descriptions

 

  ;Language strings ; ◀ 각 섹션그룹과 섹션의 설명(툴팁) 문자열을 지정합니다.
 LangString DESC_GR_COMMON ${LANG_KOREAN} "Nuke UI Ver 0.7 베타의 공통 라이브러리 입니다.(필수)"
 LangString DESC_GR_TITAN ${LANG_KOREAN} "타이탄 패널입니다. WOW 화면 상하단에 유용한 기능들을 제공합니다. (필수+선택)"
 LangString DESC_GR_T_PLUGIN ${LANG_KOREAN} "타이탄 패널용 플러그인 입니다. 컴퓨터 사양을 고려하여 목적에 따라 설치하시기바랍니다. (선택)"
 LangString DESC_SecTitanXPStatus ${LANG_KOREAN} "Titan Panel을 경험치바 형식으로 보이게하고 경험치 정보를 표시합니다. (필수)"
 LangString DESC_SecTitanAggro ${LANG_KOREAN} "어그로 대상을 탐지하고 알려주는 기능을 제공합니다. (선택)"
  ;이하 생략합니다.

  ;.

  ;.

  ;.


 

  ;Assign language strings to sections  ; ◀ 지정한 설명(툴팁) 문자열을 나타내도록 합니다.
  !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
  !insertmacro MUI_DESCRIPTION_TEXT ${GR_COMMON} $(DESC_GR_COMMON)
  !insertmacro MUI_DESCRIPTION_TEXT ${GR_T_PLUGIN} $(DESC_GR_T_PLUGIN)
  !insertmacro MUI_DESCRIPTION_TEXT ${SecTitan} $(DESC_SecTitan)
  !insertmacro MUI_DESCRIPTION_TEXT ${SecTitanXPStatus} $(DESC_SecTitanXPStatus)
  ;이하 생략합니다.

  ;.

  ;.

  ;.

 

;★★★--------------------------------
;Uninstaller Section

Section "Uninstall"

  ; Remove registry keys  ; ◀ 레지스트리에서 정보를 삭제합니다.
  DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NukeUI"
  DeleteRegKey HKLM SOFTWARE\NukeUI

  ; Remove files and uninstaller
  Delete $INSTDIR\Uninstall_NukeUI.exe ; ◀ 언인스톨용 exe 삭제

  ; Remove shortcuts
  Delete "$SMPROGRAMS\Nuke UI Ver 0.7 베타\*.*"

  ; Remove directories used for shortcuts
  RMDir "$SMPROGRAMS\Nuke UI Ver 0.7 베타" ; ◀ 시작 프로그램에 등록된 것들 삭제

 ; Remove WOW Inferace And WTF Folder
  RMDir /r "$INSTDIR\Interface" ; Interface(AddOns) 폴더 삭제 ; ◀ /r 옵션으로 모두 삭제
 RMDir /r "$INSTDIR\WTF" ; WTF(Account) 폴더 삭제 ; ◀ /r 옵션으로 모두 삭제

SectionEnd

 

=========================================================================================

 

 

※ 중요하다고 생각되는 부분만 설명 추가로 주석을 달았습니다.

    위 내용만으로 충분히 샘플 스크립트 역할을 하리라고 보는데요 ^^;

 

    NSIS 설치 후, 제공하는 NSIS Examples Directory 폴더의 내용들과

    http://nsis.sourceforge.net/ 의 자료들을 통해서 많은 부분 알 수 있었습니다.

 

    http://jgh0721.egloos.com/ 헬마님의 자료도 많은 도움이 되었습니다.

    이 자리를 빌어 감사드립니다. ^^;

 

    HELP, CHM과 위의 내용들로 기본 부분은 충분히 이해할 수 있으리라 생각합니다.

 

※ 이상 미흡하지만, WOW 애드온 배포본 제작할 때 NSIS로 스크립트를 작성하면서

    기초적인 NSIS 스크립트에 대한 이해를 돕기위해 작성한 글이었습니다.

 


출처 : [직접 서술] 블로그 집필 - Eocs (데들리엔젤::헌터)


'CMD BAT 인스톨' 카테고리의 다른 글

cmd 명령어  (0) 2018.11.04
[Win32] 레지스트리 읽기 / 쓰기  (0) 2018.02.23
NSIS 예문 파일  (0) 2018.02.07
NSIS 번외 - 레지스트리  (0) 2018.02.07
인스톨프로그램  (2) 2018.02.06