engineering/System Eng.2007. 3. 9. 09:47


출처 - http://kin.naver.com/knowhow/entry.php?d1id=3&dir_id=3&eid=DV7BINcdSKfXO5Pt8AqguM5pDM4QXkwq&qb=bnNpcyBmaWxlIMb3x9Q=




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 스크립트에 대한 이해를 돕기위해 작성한 글이었습니다.

Posted by theYoungman