차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
tech:nsis [2013/03/29 02:54] V_Ltech:nsis [2016/07/12 00:56] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
 +{{tag>tech nsis}}
 +======NSIS======
 +Winamp로 유명한 널 소프트에서 만든 인스톨러 저작툴이다. 약간 쓰기 어렵지만, 공개라는 점과 스크립팅 시스템이 거의 상용수준이라는 점이 장점.
 +
 +프로그램을 배포할 때 받은 사람이 쉽게 설치 할수 있도록 배포본을 만들어주는 스크립트이다.
 +([[:http://www.cipher.pe.kr/tt/cipher/101|출처]]) 
 +
 +
 +  * [[http://nsis.sourceforge.net/|프로젝트 홈페이지]]
 +  * [[http://ko.wikipedia.org/wiki/NSIS|위키]]
 +
 +  * 전용 에디터 [[http://hmne.sourceforge.net/|hmne]] 간단한 인스톨 스크립트를 만들어주는 위저드 기능 포함. 물론 공개. 델파이로 만들었다.
 +
 +
 +기본적인 사용법
 +  * http://jgh0721.egloos.com/l3
 +  * [[http://jgh0721.tistory.com/category/프로그래밍/NSIS]]
 +  * http://swik.net/NSIS+install
 +
 +
 +  * [[http://weblogs.asp.net/mhawley/archive/2004/02/06/68763.aspx|.NET 설치 여부를 체크하는 스크립트]]
 +
 +
 +=====설명=====
 +
 +  * [[http://nsis.sourceforge.net/Main_Page|NSIS를 다운 받자]]
 +  * [[http://hmne.sourceforge.net/|쓸만한 텍스트 에디터는 HM NIS Edit이다.]]
 +
 +
 +위의 두 프로그램을 다운 받아서 인스톨 하면 모든 준비는 끝이다. 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"
 +
 +
 +=====배슬로 마인크래프트 서버 패치기=====
 +
 +<file nsis 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
 +
 +</file>
 +
 +
 +
 +
 +
 +
 +  * 출처: [[|]]
 +
 +^  누구나 수정하실 수 있습니다.  문법은 [[wiki:syntax]]참조하세요. |
 +