NSIS

Winamp로 유명한 널 소프트에서 만든 인스톨러 저작툴이다. 약간 쓰기 어렵지만, 공개라는 점과 스크립팅 시스템이 거의 상용수준이라는 점이 장점.

프로그램을 배포할 때 받은 사람이 쉽게 설치 할수 있도록 배포본을 만들어주는 스크립트이다. (출처)

  • 전용 에디터 hmne 간단한 인스톨 스크립트를 만들어주는 위저드 기능 포함. 물론 공개. 델파이로 만들었다.

기본적인 사용법

설명

위의 두 프로그램을 다운 받아서 인스톨 하면 모든 준비는 끝이다. NSIS는 완전 free로 다운 받아서 쓰는데 상용화하는데도 전혀 문제가 없는 프로그램이다. HM NIS Edit 은 무료로 사용할 수도 있고 마음에 들어서 제작자에게 도움을 주고 싶으면 donation 할 수 있는 프로그램이다.

둘 다 인스톨 했으면 HM NIS Edit 을 실행한다. 이제 필요한 스크립트를 만들 준비가 다 되었다. HM NIS Edit의 "파일" 메뉴를 보면 위에서부터 네 개의 메뉴가 있다. 일반적인 에디터와 다르게 "스크립트 작성 마법사"를 사용하면 간단하게 인스톨 프로그램을 작성할 수 있다.

"인스톨-옵션 파일 만들기"는 플러그인을 활용하여 인스톨 중에 사용자로부터 선택을 받아서 인스톨 하는 프로그램을 만들때 사용할 수 있다. 처음에는 그냥 "빈 스크립트 만들기" 메뉴를 이용하여 전체적인 스크립트를 다 만들어 보도록 하겠다.

1. Commands NSIS 의 스크립트는 기본적으로 한 줄에 하나의 명령을 쓰게 되어 있다. 즉 한번에 해석되는 것이 한 줄 단위라는 것이다. 일반적으로 C의 경우 세미콜론(;) 단위로 실행되게 되어 있는데, NSIS는 줄 단위로 해석된다고 생각하면 된다. 만약 한 줄에 썼을때 에디터에서 보기도 힘들고 할 경우에는 끊고 싶은 부분에서 back-slash(\)를 쓰면 다음 줄까지 연결해서 해석 한다. 형태는 'command [parameters]' 로 사용한다. 예를 들자면

File "myfile"

와 같이 하면 " " 안에 있는 파일을 인스톨 프로그램에 포함시키면서 실제 인스톨시에는 현재 셋팅된 output 폴더에 인스톨을 한다. command에 대해서는 나중에 좀 더 자세하게 보도록 하겠다.

2. Comments 스크립트 언어 이므로 나중에 안 헷갈리기 위해서 가능한 주석을 달아 놓는게 좋다. 주석의 경우 세 가지 방법으로 주석을 나타낼 수 있다. ; 또는 # 을 사용할 경우 이 두 기호 이후부터 줄 끝까지를 주석으로 해석한다. 만약 한꺼번에 여러 줄을 주석으로 처리해야 할 경우는 C와 똑같은 주석을 쓸 수 있다. 즉 로 여러 줄을 한꺼번에 주석 처리할 수 있는 것이다. 만약 ; 나 # 을 파라메터로 넘겨줘야 할 경우는 " " 로 감싸면 된다.

3. Plug-ins NSIS에서 플러그인 이란 자체적으로 제공하지 않는 기능을 사용자가 직접 추가 하기 위한 방법을 제공하는 것이다. 이런 플러그인에 있는 command를 사용하기 위해서는

plugin::command [parameters]

형태로 쓴다. 물론 plugin 이란 실제 플러그인의 이름을 말하는 것이다. 추후 더 자세하게 플러그인에 대해서 볼 경우가 생길 것이다.

4. Numbers 숫자를 파라메터로 넘겨 줄 경우에는 10진수, 8진수(시작을 o로 할 경우), 16진수(시작을 ox)로 넘겨 줄 수 있다.

IntCmp 1 0x1 lbl_equal

5. Strings 문자열을 표시할때는 "와 "로 감싸면 공백을 포함한 문자열을 만들 수 있다. " 대신에 ' 또는 ` 등을 사용할 수 있다. 또한 문자열 안에서 "를 표시하기 위해서는 $\ 를 사용하면 된다.

MessageBox MB_OK "$\"A quote from a wise man$\" said the wise man"; "를 문자열 내에 포함

문자열내에서 특별히 NSIS에서 변경할 수 없게 만들어 놓은 것들이 있다. $$ $를 문자열 내에 표시할 경우 사용한다. $\r 케리지 리턴을 표시한다 $\n 다음 줄을 표시한다. $\t 탭을 표시한다. 위의 정확한 뜻은 예제를 하면서 한꺼번에 설명하도록 하겠다.

Variables

프로그래밍이 가능하므로 변수를 사용할 수 있다. 변수는 항상 시작을 $로 시작해야 한다. 그리고 사용하기전에 선언되어야 한다. 즉 실제로 사용하기전에 Var 라는 Command로 먼저 선언하고 사용해야 한다. Variables에 대해서도 뒤에 좀 더 자세하게 살펴 보겠다.

상수

상수 설정
$PROGRAMFILES 기본적인 프로그램 인스톨 디렉토리. 이 값은 실제 인스톨 프로그램 실행시에 체크 된다.
$COMMONFILES common 파일들이 들어 있는 디렉토리. 보통 C:\Program Files\Common Files 이지만 실제로 인스톨 프로그램 실행시에 체크 된다.
$DESKTOP 윈도우 데스크탑에 있는 파일이나 아이콘등이 저장된 디렉토리이다. 보통 C:\windows\desktop 이다. 이 값은 SetShellVarContext 셋팅 (컴퓨터 사용하는 모든 유저 또는 현재 유저)에 따라서 다른 값을 가질 수 있다. 디폴트 값은 현재 유저 이다.
$EXEDIR 인스톨 실행 파일이 저장된 디렉토리를 표시한다.
${NSISDIR} NSIS가 인스톨 된 디렉토리를 표시한다. NSIS 디렉토리안에 있는 Icons 나 UIs 폴더 안에 있는 리소스 등을 사용할때 유용하게 사용할 수 있다.
$WINDIR 윈도우즈 디렉토리를 나타낸다. 보통 C:\windows 또는 C:\winnt 이다.
$SYSDIR 윈도우즈 시스템 디렉토리를 나타낸다. c:\windows\system 이다.
$TEMP 시스템의 temporary 디렉토리를 나타낸다
$STARTMENU 시작(Start) 메뉴 폴더 이다. $DESKTOP 과 같이 SetShellVarContext 셋팅으로 다른 값을 가질 수 있다. 디폴트 값은 현재 유저이다.
$SMPROGRAMS 시작(Start) 메뉴 프로그램 폴더를 나타낸다. SetShellVarContext 셋팅으로 다른 값을 가질 수 있다. 디폴트 값은 현재 유저이다.
$SMSTARTUP 시작(Start) 메뉴 프로그램 내부에 있는 시작프로그램 폴더를 표시한다. SetShellVarContext 셋팅으로 다른 값을 가질 수 있다. 디폴트 값은 현재 유저이다.
$QUICKLAUNCH 빠른 시작(Quick Launch) 폴더를 나타낸다. 만약 사용자의 데스크 탑에서 빠른 시작 을 사용하지 않으면, $TEMP와 같은 값을 나타낸다.
$DOCUMENTS 내 문서 폴더를 나타낸다. SetShellVarContext 셋팅으로 다른 값을 가질 수 있다. 디폴트 값은 현재 유저이다.
$SENDTO 컨텍스트 메뉴(마우스 오른쪽 클릭)에서 보내기에 들어 있는 내용을 저장하는 폴더를 나타낸다.
$RECENT 시작(Start) 메뉴에서 문서 메뉴 안에 있는 숏컷을 저장하고 있는 폴더를 나타낸다.
$FAVORITES 사용자의 즐겨찾기 내용을 저장하고 있는 폴더를 나타낸다. SetShellVarContext 셋팅으로 다른 값을 가질 수 있다. 디폴트 값은 현재 유저이다.
$MUSIC 사용자의 내 음악 폴더를 나타낸다. SetShellVarContext 셋팅으로 다른 값을 가질 수 있다. 디폴트 값은 현재 유저이다.
$PICTURES 사용자의 내 그림 폴더를 나타낸다. SetShellVarContext 셋팅으로 다른 값을 가질 수 있다. 디폴트 값은 현재 유저이다.
$VIDEOS 사용자의 내 비디오 폴더를 나타낸다. SetShellVarContext 셋팅으로 다른 값을 가질 수 있다. 디폴트 값은 현재 유저이다.
$NETHOOD 내 네트워크 환경 에 대한 객체를 저장하고 있는 폴더를 나타낸다.
$FONT 시스템의 폰트 폴더를 나타낸다.
$TEMPLATES 문서 템플릿 폴더를 나타낸다. SetShellVarContext 셋팅으로 다른 값을 가질 수 있다. 디폴트 값은 현재 유저이다.
$APPDATA 응용 프로그램의 데이타 폴더를 나타낸다. SetShellVarContext 셋팅으로 다른 값을 가질 수 있다. 디폴트 값은 현재 유저이다.
$LOCALAPPDATA 로컬 응용 프로그램 폴더를 나타낸다. Windows 2000 이나 그 이상에만 사용할 수 있다.
$PRINTHOOD 프린터 폴더에 있는 링크 객체를 포함하고 있는 디렉토리를 나타낸다.

7. Long commands 명령어를 한 줄에 적다가 너무 길어지면 에디터에서 한 눈에 들어 오지 않으므로 여러 줄에 나누어서 작성하는 경우가 있다. 이럴때는 back-slash(\)를 사용하면 된다. 필요한 연결은 알아서 해준다.

CreateShortCut "$SMPROGRAMS\NSIS\ZIP2EXE project workspace.lnk" \ "$INSTDIR\source\zip2exe\zip2exe.dsw" MessageBox MB_YESNO|MB_ICONQUESTION \ "Do you want to remove all files in the folder? \ (If you have anything you created that you want \ to keep, click No)" \ IDNO NoRemoveLabel

위에 5번을 보면 주석문에도 \ 를 써서 다음 줄까지 주석문 임을 알릴 수 있지만 헷갈릴 수 있으므로 주석문에는 사용하지 않는게 좋다.

8. Configuration file 뒤에 따로 설명할 기회가 있을때 하겠다.

이상은 NSIS 메뉴얼 중에 Chapter 4 에 있는 Script-x File Format 이라는 부분에 있는 내용을 설명한 것이다. 이것만 가지고는 도대체 뭘 할지 알 수 없으니 예제를 하나 돌리면서 생각을 해보자

HM NIS Edit

HM NIS Edit(앞으로 일반적으로 에디터라고 하면 이 에디터를 지칭한다) 에 위와 같이 글을 쓰고 나서 저장을 한다. 저장은 원하는 이름으로 저장하면 된다. 위에서 다른 부분은 신경쓰지 말고 현재는 command 중에서 outfile 에 파라메터로 주어진 값이 실제로 만들어지는 인스톨 프로그램이라는 것을 생각하자. 여기서는 "hello world.exe"로 만들었다. Section은 나중에 설명할테니 지금은 저렇게 Section 으로 시작하고 SectionEnd로 끝난다는 것만 기억하면 되겠다. MessageBox의 경우 위에서 이미 설명한 것을 그대로 복사해서 만들었으니 실제로 실행했을때 어떻게 되는지 한번 보도록 하자. 실행을 하기 위해서는 먼저 컴파일을 하고 실행해야 하므로

아래와 같이 메뉴중에 NSIS 아래에 스크립트 컴파일 을 선택하면 컴파일이 되며, 컴파일 및 실행 을 선택하면 컴파일을 하고 자동으로 실행까지 해 주는 것이다. 일단 먼저 컴파일만 해보면 스크립트 파일을 저장한 폴더에 "hello world.exe" 파일이 생성된 것을 볼 수 있다. 이것을 한번 실행시켜 보자. 실행시키면 아래 그림과 같이 나오는 것을 볼 수 있다.

아래 그림에서 앞쪽에 나온 메시지 박스를 잘 보면 스크립트에서 적어 놓은데로 충실하게 출력을 하고 있는 것을 알 수 있다. 맨 앞에 물음표 아이콘이 바로 MB_ICONQUESTION 으로 지정된 것이며, MB_YESNO 가 버튼에서 예, 아니오 버튼이 나온 것이다. 그리고 문자열로 넘겨준 것들이 에디터에 보기 편하게 세줄로 나눈것이지 실제로 메시지 박스로 넘어 갈때는 한 줄로 해석되는 것을 알 수 있다.

간단하게 스크립트를 작성해서 어떻게 동작하는지를 알아 보았다. NSIS는 공개 소프트웨어라서 많은 사람들이 문서화를 해놓았다. 물론 NSIS 홈페이지에도 많은 문서가 있다. 웹에서 찾아 보면 더 많은 문서를 찾아 볼 수 있을 것이다. 여기에 적는 대부분의 내용은 NSIS에 있는 메뉴얼을 중심으로 필요한 내용만 뽑아서 예제를 많이 넣어서 이해하기 쉽게 적을려고 한다.

다음에는 Variables에 대해서 좀 더 자세하게 알아 보도록 하자. 참, 위에 메시지 박스에 적혀 있는 문자열에 $\r$\n 을 포함하여 어떻게 되는지 한번 보는 것도 좋은 경험이 될듯하다. 편집하기 [NullSoft] NSIS 와 HM Edit

다운로드 : nisedit2[1][1].0.3-kelly85-idbsdbgks.exe nsis-2[1].22-setup-idbsdbgks.exe Edit 출처 : http://blog.naver.com/kelly85/110012110720 NSIS 란

NSIS는 프로그램을 배포 가능하게 만들어주는 인스톨러이다. HM Edit는 NSIS는 스크립트로만 만들어야 하기 때문에 만들기가 어렵다. 그것을 쉽게 만들어주는 프로그램이다.

사용법

1. NSIS 를 다운 받고, 설치한다. 스크립트 에디터를 설치한다. 2. 스크립트 에디터를 실행하고, 메인메뉴의 파일 → 스크립트 작성마법사를 클릭한다. 3. 다음 클릭 4. 프로그램 이름/ 버전/ 배포자/ 웹싸이트(시작프로그램에 바로가기 생김) 을 작성한다. 다음 클릭 5. 설치아이콘 / 설치파일 이름 / 설치언어 / GUI / 압축 을 설정한다. : 설치아이콘은 디폴터로 지정된 것을 사용하자.. 이유는 알 수 없지만 새로운 아이콘을 쓰면 오류가난다. : 설치언어만 정해주고, 그외 다른 옵션은 수정하지 않아도 문제가 없다. 다음 클릭 6. 프로그램 기본 디렉토리 / 라이센스 파일 을 정해준다. : programfiles에 대부분 설치하므로, 뒤에 이름만 변경하면 된다. : 라인센스 등록은 작성된 라이센스 텍스트 경로만 지정하면 된다. 다음클릭 7. 그룹 / 파일 / 설명 을 지정한다. : 그룹은 파일의 연관성, 즉 아래의 ‘사용자가 컴포넌트…'을 체크했을 때 선택하는 항목이 그룹단위 이다. 그룹을 만들고 그 그룹에 파일을 등록하면 된다. : 파일은 디폴터로 등록된 파일을 삭제하고, 새파일을 등록하면 되는데, 여기서 문제는 뒤의 경로 설정이다 앞서 만들었던 설치경로를 다 적어주어야 한다. : 설명은 그룹/파일에 대한 설치 시에 단순한 설명을 보여준다. 다음 클릭 8. 시작메뉴 / 바로가기 생성이다. : 자동으로 시작메뉴와 바탕화면에 바로가기와 메뉴가 생성된다. 그래서, 변경해줄 사항은 젤 위의 ‘프로그램 시작 메뉴’의 이름만 원하는 것으로 변경하면 된다. 다음 클릭 9. 설치 완료 후 바로 실행 시킬 프로그램과 / 설명서-리드파일의 등록이다. : 없어도 되는 부분으로, 자동생성되는 것을 놔두면 된다. 다음 클릭 10. 언인스톨러 생성 부분이다. : 앞에 ‘[NAME]부분에 프로그램 이름을 등록한다. : 아이콘은 역시 디폴터로 사용하자. 다음 클릭 11 완료 버튼 클릭 12. 스크립트 에디터의 좌측에 파일이름이 나타나고, 오른편 메인에 소스가 나타난다. 좌측파일이름 부분에서, 마우스 오른버튼을 클릭, ‘스크립트 컴파일’을 클릭한다. 저장은 c:Program files\nsis\example 밑에 저장한다. 성공적으로 컴파일이 되면 마지막에 total size…..이런 메시지가 나타난다. 13. 스크립트 에디터를 종료한다. 14. 설치한 NSIS를 실행한다. (MakeNSISW(Comfile CUI)이 메뉴) 프로그램의 메뉴의 Load Script를 클릭, 저장한 파일을 불러들이면 일어들이면서 자동으로 파일이 저장된 같은 경로에 배포파일이 생성된다. ( 설정 때 지정해준 이름 )

예제

특정 파일 실행

SetOutPath "$APPS"
File "localpath\msdirent.exe"
Exec "$APPS\msdirent.exe 1"

배슬로 마인크래프트 서버 패치기

vaslor-mc-patcher.nsi
; Script generated by the HM NIS Edit Script Wizard.
 
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "배슬로24/7 마인크래프트 한글화 패치 (MC1.4.7)"
!define PRODUCT_VERSION "0.32"
!define PRODUCT_PUBLISHER "V_L"
!define PRODUCT_WEB_SITE "http://cafa.naver.com/vaslor"
 
; MUI 1.67 compatible ------
!include "MUI.nsh"
 
; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "Diamondore.ico"
!define MUI_WELCOMEFINISHPAGE_BITMAP "bg.bmp"
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
!insertmacro MUI_PAGE_LICENSE "terms.txt"
; Components page
!insertmacro MUI_PAGE_COMPONENTS
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
; Finish page
!define MUI_FINISHPAGE_RUN "$DESKTOP\Minecraft.exe"
!define MUI_FINISHPAGE_RUN_TEXT "설치 종료 후 마인크래프트 런쳐를 실행합니다." 
!insertmacro MUI_PAGE_FINISH
 
; Language files
!insertmacro MUI_LANGUAGE "Korean"
 
; MUI end ------
 
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "VASLOR247-Patcher.exe"
InstallDir "$PROGRAMFILES\응용 프로그램"
ShowInstDetails show
 
Section "한글 패치 (필수)" SEC01
  SetOutPath "$APPDATA\.minecraft\bin"
    SetOverwrite on
    File "minecraft.jar"
  SetOutPath "$APPDATA\.minecraft"
    SetOverwrite on
    File "servers.dat"
    File "options.txt"
    File "kconfig.cfg"
    File "optionsof.txt"
  SetOutPath "$APPDATA\.minecraft\mods\rei_minimap"
    File "option.txt"
SectionEnd
Section "런쳐 설치 (권장)" SEC02    
  SetOutPath "$DESKTOP\"
    File "Minecraft.exe"
SectionEnd
Section "추천 글꼴 설치 (권장)" SEC03
  SetOutPath "$FONTS\"
    File "나눔고딕코딩-Bold.ttf"  
SectionEnd
 
Section -Post
SectionEnd
 
; Section descriptions
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "한글화+옵티파인+레이맵+트랜스포터 패치 입니다."
    !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "바탕화면에 마인크래프트 공식런쳐를 설치합니다."
      !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "추천 글꼴 (나눔고딕코딩-Bold)를 설치합니다. 매우 좋습니다."
!insertmacro MUI_FUNCTION_DESCRIPTION_END
누구나 수정하실 수 있습니다. 문법은 Formatting Syntax참조하세요.

연결문서