2.1 소개


 당신이 다운로드 하거나 구입한 소프트웨어 패키지 대부분에는 인스톨러가 포함되어 있습니다. 인스톨러는 파일들을 복사 또는 업데이트하고, 레지스트리 키들을 쓰고, 환경설정을 쓰고, 바로가기는 생성하는 등 의 작업을 합니다. 모든 이러한 작업들은 사용자들을 위해서 자동적으로 수행됩니다. 사용자가 이를 하기 위해 필요한 모든 것들이 약간의 정보를 지원하고 인스톨러는 나머지 일을 모두 처리할 것 입니다. wizard(인스톨 마법사 같은것을 말하는 듯)를 경험해본 사용자는 적절한 선택들을 할 수 있고 인스톨러가 끝날때 까지 기다립니다. 인스톨러가 끝난 후에, 사용자에게는 프로그램의 실행하는 간단한 일 밖에 남겨지지 않습니다. 사용자는 그들이 잊어버리는 일들에 대해서 걱정할 필요가 없습니다. 모든 필요한 단계들은 인스톨러에 의해서 실행되기 때문입니다.


 NSIS 는 개발자가 인스톨러를 생성하기 위해 존재하는 툴 입니다. NSIS는 당신이 그저 파일을 복사하는 기본직인 인스톨러들부터 레지스트리 키를 쓰고, 환경변수를 설정하고, 인터넷에서 최근의 파일들을 다운받고, 환경파일을 수정하는 등 그 외의 작업도 가능하도록 하는 복잡한 인스톨러의 기능까지, 모든것을 할 수 있게 해줍니다. NSIS는 매우 유연하고 배우기 쉬운 스크립트 언어입니다.


 NSIS는 모든 파일들과 설치 스크립트를 하나의 실행가능한 파일로 컴파일 합니다. 그래서 당신의 어플리케이션을 배포하기 쉬울 것 입니다. NSIS는 오직 그것의 코드의 34kb를 데이터로 추가합니다. NSIS는 작은 용량을 자랑하는 반면에 스크립팅언어와 외부 플러그인 덕분에 여전히 많은 옵션을 제공합니다.


2.2 스크립트 파일들


 NSIS 인스톨러를 만들기 위해서 당신은 첫번째로 NSIS 스크립트를 작성해야 합니다. NSIS 스크립트는 그저 정규적인 몇 몇 가지의 특별한 구문과 함꼐 존재하는 텍스트 파일입니다. 당신은 모든 텍스트 에디터에서 스크립트들을 수정할 수 있습니다. NISS 스크립트는 당신에게 라인 숫자를 보여주는 텍스트 에디터를 사용하기를 권장합니다. 왜냐하면 NSIS는 어디에서 에러가 발생하였는지, 어디에서 에러가 발생할 가능성이 있는지 알려주기 위해서 라인 숫자를 사용하기 때문입니다. 구문 하이라이팅을 지원하는 텍스트 에디터가 또 추천됩니다. 당신은 NSIS 스크립트를 위해서 특별하게 만들어진 에디터를 다운받을 수 있고 하이라이팅을 위한 파일들은 NSIS Wiki에 존재합니다.


 NSIS 스크릅트의 모든 라인들은 명령으로 다뤄 집니다. 만약에 당신의 커맨드가 하나의 라인으로 하기에는 너무 길면 라인의 끝에 백 슬러쉬(back-slash - '\')를 이용할 수 있습니다. 컴파일러는 새로운 라인을 이전의 라인에 추가적인 라인으로 다룰 것이고 새로운 라인으로 예상하지 않을 것 입니다. 예를들어서


Messagebox MB_OK|MB_ICONINFORMATION \ 

"This is a sample that shows how to use line breaks ofr larger commands in NSIS scripts"


 만약에 당신이 쿼터 문자열을 벗어나거나 ` 나 ' 같이 다른타입의 쿼터를 인용하기 위해서 문자열에 더블쿼터를 사용하기를 원하면 당신은 $\" 문자 역시 사용 가능합니다. 스크립트 구성방식에 대한 더 많은 세부사항들은 스크립트 파일 포멧을 보세요.


 스크립트 파일에 대한 기본적인 확장자는 .nsi입니다. 헤더 파일들은 .nsh 확장자를 가지고 있습니다. 해더 파일들은 당신이 당신의 스크립트들을 한블록의 코드 이상으로 분리하는데 도움을 줄 수 있습니다. 당신은 또한 함수들이나 메크로들은 헤더 파일에넣거나 헤더 파일들을 어려개의 인스톨러들 속에 포함할 수 있습니다. 이것은 갱신을 쉽게 하거나 당신의 스크립트들을 읽기 더 쉽게 한듭니다. 헤더 파일을을 당신의 스크립트 안에 포함하려면 !include 를 사용하십시오. 해더 파일들 당신의 NSIS 디렉토리 하부에 포함 디렉토리에 존재하는 헤더파일들은 그저 그 파일들의 이름을 이용해서 포함될 수 있습니다. 예를 들어서 다음과 같이 사용합니다. 

 

!include Sections.nsh



2.3 스크립팅 구조


 NSIS 스크립트는 인스톨러 Attribute들과 Section/Function들을 포함할 수 있습니다. 당신은 컴파일시간 동작들을 위해서 또한 컴파일러 커맨드들을 사용할 수 있습니다. 요구되는 것은 OutFile 명령, NSIS가 어디에 Write를 할지에 대한 정보와 하나의 section 입니다.


2.3.1 인스톨러 속성들

 

 인스톨러 Attribute들은 당신의 인스톨러의 행동과 외부모습, 느낌을 결정합니다. 이러한 속성들과 함께 당신은 인스톨 동안여 보여지는 텍스트들, 설치 타입의 등의 번호를 변경할 수 있습니다. 이러한 명령들의 대부분은 결정되고 동작시간동안 변경될 가능성이 없습니다.

 

다른 기본 명령들은 Name InstallDIr 입니다.

 

인스톨러의 속성에 대한 더 많은 정보를 알기를 원한다면 Intaller Attributes 속성을 한번 봐 주세요.

 

2.3.2 페이지(Page)들

 

 하나의 조용하지 않은 인스톨러는 사용자의 사용자의 인스톨러 설정을 위해서 마법사 페이지 들을 가지고 있습니다. 당신은 Page 명령어를을 이용해서페이지들을 설정할 수 있습니다(아니면 PageEx는 좀더 진보된 설정 입니다). 하나의 전형적인 페이지들의 설정은 다음과 비슷합니다.

 

Page license

Page components

Page directory

Page instfiles

UninstPage uinstConfirm

UninstPage instfiles

 

 NSIS 스크립트에게, 이 전형적인 페이지 설정(위의 예제를 말함)은 라이선스 동의, 인스톨러 컴포넌트들의 선택, 설치 디렉토리 선택, 그리고 마지막으로 선택된 instfiles 페이지 내에서 선택된 컴포넌트들을 설치하는 작업의 스크립트 입니다. 언인스톨러(uninstaller)에서는, 삭제 확인 페이지, 그리고 설치된 파일들을 삭제하는 페이지로 이루어져 있습니다.

 

 

 2.3.3 섹션(Section)들

 일반적인 인스톨러에서는 사용자가 설치를 할 수 있는 몇몇 가지가 있습니다. 예를 들어서 NSIS 배포 인스톨러에서 당신은 소스코드, 추가적인 플러그인들, example들 그 이상을 선택할 수 있습니다. 이 컴포넌트들 그들 스스로의 코드 조각입니다. 만약에 당신이 이 컴포넌트를 설치하기 위해서 선택한다면, 인스톨러는 그 코드를 실행할 것입니다. 스크립트 안에서 저 코드는 Section들 안에서 정의되어 집니다. 각 각의 Section은 컴포넌트들의 페이지 속에 존재하는 하나의 컴포넌트와 일치합니다. 섹션의 이름은 보여지는 컴포넌트 이름이고, 당신이 그 컴포넌트를 선택하면 섹션 코드는 실행됩니다. 하나의 섹션으로만 당신의 인스톨러를 빌드 하는 것도 가능합니다. 그러나 당신이 컴포넌트 페이지들을 사용하고 사용자가 설치될 것은 선택하게 하려면은 당신은 하나 이상의 섹션을 선택 해야 할 것입니다.

 

언이스톨러는 여러개의 섹션을 가지고 있습니다. 언인스톨러 섹션의 이름들은 'un.' 이라는 접두어가 존재합니다. 예는 다음과 같습니다.

 

Section "Installer Section"

SectionEnd

 

Section "un.Uninstaller Section"

SectionEnd

 

 섹션들에서 사용되는 그 명령어들은 인스톨러 속성들 명령들과 매우 다르기 때문에 그것들은 사용자의 컴퓨터의 실행시간에 실행됩니다. 이러한 명령어들은 파일들을 추출하고, 레지스트리, INI 파일들 그리고 일반 파일들을 읽고 쓰고, 디렉토리를 생성하고, 바로가기를 생성하는 등 그 이상의 동작을 합니다. 당신은 더 많은 정보를 다음 링크에서 찾을 수 있습니다. Instructions

 

 대부분의 기본 명령어들은 인스톨러가 압축을 푸는 파일의 위치를 말하는 SetOutPath 와 압축 해제가 되는 파일들을 말하는 File 입니다.

 

다음은 예입니다. :

 

Section "My Programn"

SetOutPath $INSTDIR

File "My Program.exe"

File "Readme.txt"

SectionEnd

 

섹션에 대한 더 많은 정보를 위해서 다음 링크를 보세요 Sections

 

2.3.4 함수(Function)들

 

 함수들은 세션과 마찬가지로 스크립트 코드를 포함하고 있습니다. Section들과 Function들이 다른점은 그들이 Call 되는 방식입니다. 두가지 타입의 함수들이 존재합니다. 하나는 사용자 함수(user function)들 그리고 콜백 함수(callback function)입니다. 사용자 함수들은 그들이 불려지기 전까지는 실행되지 않습니다. 당신이 함수 내에서 인스톨러를 멈추지 않는 이상, 명령이 호출에 뒤따라서 함수의 코드가 실행된 후에는, 인스톨러는 명령어들의 실행을 계속 할 것입니다. 당신이 인스톨러 여러곳에서 사용되는 명령어들의 셋이 존재한다면 함수를 사용하면 사용자 함수들은 매우 유용할 것입니다. 만약에 당신이 하나의 함수에 코드를 넣는다면 당신은 복사하는 시간을 아낄 수 있고 코드를 좀 더 쉽게 유지보수 할 수 있을 것입니다.

 

콜백 함수들은 인스톨러 시작할 때와 같이 확실하게 정의된 이벤트들에 의해서 호출됩니다. 콜백들은 선택적입니다. 만약에 예를 들어서 당신이 사용자를 환영하고 싶다면 당신의 호출되는 .onInit에 함수를 정의할 것 입니다. NSIS 컴파일러는 이 함수를 인스톨러가 함수의 이름을 이용해서  콜백 함수로 인식하고 인스톨러가 시작 할 시에 호출할 것 입니다.

 

Function .onInit

MessageBox MB_YESNO "This will install My Program. Do you wish to continue?" IDYES gogogo

Abort

gogogo:

FunctionEnd

 

 Abort 는 콜백함수들에게 있어서 특별한 의미입니다. 각 각의 콜백 함수들은 이것을 위해서 특별한 의미를 가지고 있습니다. Callback Functions 링크로 들어가서 더 많은 정보를 보세요. 위의 예제에서 Abort 는 인스톨러에게 인스톨로를 초기화 하는것을 멈추고 즉시 종료하라는 명령어 입니다.


2.3.5 스크립트 동작


2.3.5.1 논리적 코드 구조


 조건적으로 실행하는 코드 나 루프에서 동작한는 코드는 StrCmp, IntCmp, IfErrors, Goto 그 외 기능을 써서 동작합니다.그러나 더 쉬운 방법이 여기에 있습니다. 로직라이브러리(LogicLib)는 몇가지 단순한 메크로들을 지원합니다. 복잡한 논리적 구조의 간단한 구성을 위해서, LigicLib.nsh에서 설명되고 있는 로직 라이브러리의 구문은 다른 프로그래밍 언어들과 비슷하고 시작하는 사람과 숙련된 사람 둘다 더 간단해짐을 제공될 수 있습니다.


예를 들어서 로지컬 라이브러리 없이 변수의 값을 체크하는것은 아래와 같이 실행될 수 있다.


StrCmp $0 'some value' 0 + 3

MessageBox MB_OK '$$0 is some value'

Goto done

StrCmp $0 'some other value' )0 + 3

MessageBox MB_OK $$0 is some other value'

Goto done

#else

MessageBox MB_OK '$$0 is "$0"'

done:


그러나 LogicLib와 함께 함께, 얻어진 코드는 더 읽기 쉽고 이해하기 쉽습니다. 다음에서 예제를 확인 할 수 있습니다.


${if} $0 == 'some value'

MessageBox MB_OK '$$0 is some value'

${ElseIf} $0 == 'some other value'

MessageBox MB_OK '$$0 is some other value'

${Else}

MessageBox MB_OK '$$0 is "$0"

${EndIf}


같은것 또한 swich 문을 사용해서 행해 질 수 있습니다. 다음 예제에서 볼 수 있습니다.


${Switch} $0

  ${Case} 'some value'
    MessageBox MB_OK '$$0 is some value'
    ${Break}
  ${Case} 'some other value'
    MessageBox MB_OK '$$0 is some other value'
    ${Break}
  ${Default}
    MessageBox MB_OK '$$0 is "$0"'
    ${Break}
${EndSwitch}

여러가지 조건들 또한 지원됩니다. 다음 예는 $0 이나 $1 값이 비어있게 되면 유저에게 알려줍니다.


${If} $0 == ''

${AndIf} $1 == ''

MessageBox MB_OK|MB_ICONSTOP 'both are empty!'

${EndIf}


로지컬 라이브러리는 레이블이나 분기점프 필요성을 제거하기 때문에 레이블이름의 충돌을 막고, 제거한다 필요성을 인의적으로 조정된 상대적인 분기 오프셋 값을 매일 스크립트가 변경되는.


이것은 간단한 루핑에도 해당된다. 모든 아래의 예제는 숫자 5를 세는것이다. LogLib를 사용해서.


StrCpy $R1 0
${While} $R1 < 5
  IntOp $R1 $R1 + 1
  DetailPrint $R1
${EndWhile}
${For} $R1 1 5
  DetailPrint $R1
${Next}
StrCpy $R1 0
${Do}
  IntOp $R1 $R1 + 1
  DetailPrint $R1
${LoopUntil} $R1 >= 5

로직 라이브러리를 사용하기 위해서는 다음 라인이 필요하다. 스크립트의 윗부분에 삽입하는것이


!include LogicLib.nsh


더 많 예들이 LogicLib.nsi 에서 찾을 수 있다.



2.3.5.2 변수들


당신은 당신의 Var 명령을 이용해서 스스로의 변수들을 선언할 수 있습니다.변수들은 전역이고 어떠한 Section이나 Function에서 사용이 가능합니다.


유저 변수의 선언 및 사용


Var BLA ;Declare the variable

Section bla

  StrCpy $BLA "123" ;Now you can use the variable $BLA

SectionEnd

게다가 일시적인 저장공간으로 사용 가능한 스택이 존재합니다.. 스택에 접근하기 위해서는 Push 명령과 Pop명령을 이용해야 합니다. Push 는 변수를 스택에 추가합니다. Pop은 스택에서 하나의 변수를 재거하고 값들을 설정합니다.


코드를 고유하기 위해서, 20개의 레지스터들이 사용가능합니다.($0 에서 $R0 같이). 이 스태틱 변수들은 선언될 필요 없고 어떠한 변수명에 대한 충돌도 없을 것입니다. 만약에 당신이 변수들을 사용하기를 원한다면, 원래 변수들을 스택에 저장하고 원래값을 복구해야합니다.


함수를 호출한 후에, 변수들을 이전과 사용했던것과 같은 변수들을 포함하고 있습니다. 여러 변수를 사용했을 경우에 얻어오는 순서를 적어봅니다. (list-in first-out)


Function bla

  Push $R0
  Push $R1

    ...code...

  Pop $R1
  Pop $R0

FunctionEnd


2.3.5.3 디버깅 스크립트들


 당신이 NSIS 스크립트로 점점 더 작업을 할 수록 더 복잡한 스크립트가 될 것 입니다. 특히 많은 변수를 다룰 때, 당신은 실수들의 가능성이 높아집니다. 당신이 코드를 디버깅 하는데 도와 줄 많은 기능이 존재합니다. 변수들의 내용을 

보기 위해서 당신은 MessageBoxDetailPrint를 이용해야 합니다. 모든 변수들에 대한 간단한 설명을 얻기 위해서 당신은 DumpState 플러그인을 사용해야 합니다. 기본적으로 인스톨러의 모든 액션은 Log 창에 출력됩니다. 만약에 당신이 로그 윈도우에서 오른쪽 클릭을 한 이후 "Copy Details To Clipboard"를 선택하면 당신은 로그를 접근 할 수 있을 것입니다. 그리고 이 로그들을 파일로 쓸 수 있느 ㄴ또 한가지 방법이 있습니다. 여기 보세요.


2.3.6 스크립트 예외


한명의 유저가 인스톨러나 언인스톨러를 실행했을 때, 페이지들은 그들이 스크립트 안에 정의한 순서대로 보여집니다. instfiles 페이지가 접근됬을때, 선택한 컴포넌트들에 해당하는 Section들은 그들이 스크립트 안에 정의한 순서대로 실행됩니다. 만약에 컴포넌트 페이지들이 보이지 않는다면 모든 섹션들이 실행되고, 페이지들이 선택되지 않았어나 어떤방법이든 스크립트로 인해서 비활성화 되었다고 여길 것입니다.


Section들에 존재하는 코드 옆에 callback function 들도 존재합니다. 만약에 그것들이 정의되었다면, 그것들은 Section 코드 이전에 실행 될 수도 있습니다. 예를 들어서 .onInit callback function(콜백함수)는 스크립트 안에 다른 어떠한 것보다 먼저 실행됩니다. 페이지 보여주기 프로세스에 특정한 부분에서 실행되는 page callback function 들도 존재합니다.


2.3.7 컴파일러 명령어들


컴파일러 명령어들은 당신의 컴퓨터에서 컴파일 시간에 실행됩니다. 그것들은 조건부 컴파일을 할때 헤더 파일들을 include 할때, 어플리케이션을 실행할 때, 작업 디렉토리를 변경할 때 그 외에 사용됩니다. 대부분의 일반적인 사용법은 정의들입니다. 정의들을 컴파일 시간 정수들 입니다. 당신은 당신의 제품의 버전의 숫자를 정의할 수 있고 당신의 스크립트 내에서 사용할 수 있습니다. 다음은 예입니다.


!macro MyFunc UN
Function ${UN}MyFunc
  Call ${UN}DoRegStuff
  ReadRegStr $0 HKLM Software\MyProgram key
  DetailPrint $0
FunctionEnd
!macroend

!insertmacro MyFunc ""
!insertmacro MyFunc "un."

이 메크로는 당신이 인스톨러나 언인스톨러에서 같은 코드를 반복해서 사용하는 것을 피하도록 도와줍니다. 두 개의 !insertmacros는 두개의 함수를 insert 합니다. 인스톨러를 위한 하나는 MyFunc에서 불려지고 언인스톨러를 위한 하나는 un.MyFunc에서 불리워 지고 두개는 정확히 같은 일을 합니다.


더 많은 정보를 보려면 컴파일 시간 명령들을 봐보십시오




2.4 컴파일러

두번째 해야할 당신의 인스톨러를 만들기 위해서 당신의 스크립트를 생성한 이후 일인 당신이 필요한 것은 당신의 스크립트를 컴파일 하는 것 입니다. MakeNSIS.exe는 NSIS 컴파일러 입니다. 그것은 당신의 스크립트릴 읽고, 그것을 파싱하고 당신을 위해서 인스톨러를 만들어 냅니다.


컴파일을 하기 위해서는 당신은 .nsi 파일에 오른쪽 클릭을 해야하고 NSIS 스크립트 Compile 버튼을 눌러주세요. 이것은당신의 컴파일 스크립트 안에 있는 MakeNSIS를 실행하고 Call하기 위해서 NSIS 컴파일 인터페이스인 MakeNSISW를 실행시킵니다. MakeNSISW는 MakeNSIS의 결과물을 얻고 당신이 그것을 볼 수 있는 윈도우에 당신에게 제공하고, 그것을 복사하고, 인스톨러를 테스트 하고, 그것을 탐색하고 그 이상의 것을 합니다. 커맨드 프롬프트에서 makensis.exe를 사용하는것 또한 가능합니다.


컴파일러는 당신의 스크립트를 체크 할 것이고 당신에게 경고들이나 하나의 에러를 줄 것입니다.. 만약에 에러가 발생하게 되면 (두개의 파라미터들이 요구되지만 한개만 주어졌을 경우에) 컴파일러는 중단하고 라인 Number가 포함되어 있는 짧은 에러 메시지를 보여줄 것입니다. 치명적이지 않은 에러들에 대해서는 컴파일러는 경고 메시지를 줄 것입니다. (예를 들어서 두개의 DirText 명령어들이 하나의 스크립트에 있을때). 만약에 당신의 스크립트가 에러를 가기고 있지 않다면 컴파일러는 당신의 배포를 위한 인스톨러를 생산 할 것 입니다.


NSIS는 다른 비교 방식을 제공해 줍니다. 여기에 설명되어 있습니다. ZLIB는 빠르고 약간의 메모리의 비트만을 사용하는 기본적인 비교 방식입니다.LZMA는 인터넷 배포를 위한 작은 인스톨러들을 생성하는 좋은 방식입니다.BZIP2는 대게 ZLIB보다 더 많이 압축하는데 LZMA 만큼은 아닙니다. 그것은 당신이 더 낮은 메모리 사용이 필요할때나 빠른 스크립트 컴파일을 진행 할 시에 유용합니다.

윈도우 인스톨러를 리눅스, BSD, Mac OS X 서버에서 컴파일 하는것 또한 가능합니다. 세부적정보를 위해서 NSIS 빌

를 봐보세요.


2.5 Modern UI


NSIS를 위한 인기있는 유저 인터페이스는 Modern User 인터페이스 입니다. 그것은 최근의 윈도우 버전의 wizard 같은 인터페이스를 가지고 있습니다. The Modern UI는 사용자가 수정이 가능한 리소스 파일일 뿐만 아니라, 많은 새로운 인터페이스 요소를 가지고 있습니다. 그것은 현재의 단계를 묘사하기 위해서 컴포넌트 페이지, 환영 페이지, 유저가 어플리케이션을 실행하거나 시스템을 재부팅하거나 그외에 것을 할 수 있는 마지막 페이지에서 있는 설명부분인 하얀색 헤더를 제공합니다.


더 많은 정보를 위해서 Modern UI 2 설명서Modern UI 예들을 체크해 보세요



2.6 플러그인들


NSIS는 스크립트 안에서 호출 가능한 플러그인들을 제공합니다. 플러그인들은 C, C++, Delphi 또는 다른 프로그래밍 언어로 만들어진 DLL 파일입니다.


플러그인 호출을 다음과 같이 합니다.


DLLName::FunctionName "parameter number 1" "parameter number 2" "parameter number 3"

모든 플러그인 함수는 그것이 파라미터들이 됬을 경우나 몇가지가 아무것도 요구하지 않거나 몇가지가 당신이 보내고 싶은 만큼이나 많은 파라미터를 받을때 스스로의 요구사항을 가지고 있습니다. 다음은 예입니다.


nsExec::ExecToLog '"${NSISDIR}\makensis.exe" /CMDHELP'

InstallOptions::dialog "$PLUGINSDIR\test.ini"

NSISdl::download http://download.nullsoft.com/winamp/client/winamp291_lite.exe $R0

싶은 만큼이나 많은 파라미터를 받을때 스스로의 요구사항을 가지고 있습니다. 다음은 예입니다.


NSIS 가 알고있는 플러그인 들은 컴파일러의 output 의 윗부분에 리스트화 되어 있습니다. NSIS는 플러그인들을 당신의 NSIS 디렉토리 아래에 있는 Plugins Folder에서 찾고 사용가능한 모든 함수들을 나열합니다. 당신은 역시 NSIS에게 다른 디렉토리에서 찾으라고 알려주기 위해서 !addplugindir을 사용 할 수 있습니다.


NSIS 배포는 이미 많은 플러그인들을 포함하고 있었습니다. InstallOption은 당신이 NSIS 페이지 명령들과 함께 조합하여. 유저가 수정할 수 있는 페이지를 만들 수 있는 인기 있는 플러그인 입니다 (Pages를 봐라). 시작메뉴 플러그인은 페이지가 사용자가 시작메뉴 폴더를 선택할 수 있게 해주는 페이지를 제공해 줍니다. 다른 목적들을 위해 존재하는 많은 플러그인들이 있고, 도움이 되는 파일들과 예제들을 위해서 한번 Docs foler를 봐보세요. 당신은 추가적인 플러그인들을 NSIS Wiki에서 찾을 수 있을 것 입니다.


 당신은 또한 당신 스스로 플러그인을 만들 수 있을 것 입니다. C/C++ 그리고 델파이 헤더파일들이 이미 이용가능하고, 이것을 어떻게 해야할지 알기 위해 예제 플러그인을 한번 봐보세요. 플러그인들에 포함되어 있는 소스 코드는 소스코드 패키지에서 찾을 수 있다


2.7 그 외

 이 튜토리얼은  NSIS 기본 특징에 기술되어 있습니다. NSIS 가 할 수 있는모든것을 배우기, 메뉴얼을 읽기 위해서 약간의 시간을 투자해 주세요.




저작자 표시 비영리
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 앱등김치맨

1.1 NSIS에 대해서

 설치 프로그램은 사용자가 응용프로그램을 처음으로 경험하는 부분입니다. 느리거나 성공적이지 않은 소프트웨어 설치는 가장 짜증나는(irritate) 컴퓨터 문제 입니다. 그러므로 빠르고 유저 친화적인 인스톨러는 당신의 소프트웨어 제품의 필수적인 부분입니다.


 NSIS (Nullsoft Scriptable Install System)은 프로그래머가 윈도우 환경에서 위와 같이 편안한 인스톨러 생성하도록 해주는 툴 입니다. 그것은 오픈소스 라이선스로 배포되고 누구나 완벽하게 공짜로 사용 할 수 있습니다.


 NSIS는 Install 가능한, UnInstall 가능한, SystemSetting을 할 수 있는, 파일들을 추출 등의 기능을 할 수 있는 Installer를 설치합니다. 그것은 스크립트 파일에 기반하기 때문에 당신은 완벽하게 당신의 인스톨러들의 모든 부분을 컨트롤 할 수 있습니다. NSIS 스크립트 언어 일반적인 프로그램 언어처럼 변수들과, 함수들, 문자열 처리를 지원합니다. - 그러나 인스톨러의 생성을 위해서 설계되었습니다. 심지어 이런 모든 특징과 함께, NSIS는 여전히 사용 가능한 가장 작은 인스톨러 시스템 입니다. 그러한 기본적인 옵션에도 그것은 34kb의 오버헤드를 가지고 있습니다.


 이제 당신은 운영체제에 의해 보여지는데 문제가 없이 지원되는 모든 언어들을 타겟으로 하는 유니코드 인스톨러를 생성할 수 있습니다. 



1.2 주요 특징들


작은 용량 사이즈


 NSIS는 작고, 빠르고, 효과적으로 생성됩니다. 다른 인스톨러 파일들은 종종 몇백 킬로바이트 또는 몇 메가정도를 당신의 인스톨 데이터에 추가하는 반면에, 완벽한 NSIS 특징의 인스톨러는 34KB의 용량을 가지고 있습니다.


모든 메인 윈도우 버전들과의 호환성


 당신은 윈도우 95, 98, ME, NT4, 2000, XP, 2003 Vista, Server 2008, 7, Server 2008R2, 8, Server 2012, 8.1, Server 2012R2과 호환되는 인스톨러 파일을 생성 할 수 있습니다.


고유 압축 방법들


 당신은 세가지의 다른 통합적인 압축 방법(ZLib, BZip2, LZMA)중 선택 할 수 있습니다. 새로운 LZMA 압축은 다른 어떠한 일반적인 압축 방법보다 더 좋은 결과들을 줍니다. 당신은 큰 자체압축해제 모듈이나 다른 어플리케이션을 사용할 필요가 없습니다. 이러한 압축 지원은 위에 언급한 34kb의 NSIS 용량에 포함되어 있습니다.


스크립트 베이스


 오직 파일의 리스트와 레지스트리 키들을 기본으로 한 인스톨러를 생성하는 다른 시스템들과 달리, NSIS는 강력한 스트립팅 언어입니다. 이 스크립팅 언어는 인스톨러들을 위해서 디자인 되었고 당신이 인스톨 작업들을 수행하는데 필요한 많은 명령들을 가지고 있습니다. 당신은 쉽게 수정된 로직을 추가하고 다른 분분 업그레이드, 버전 체크, 이 외의 것들을 다룰 수 있습니다. NSIS Wiki 에서 당신은 더 많은 것을 찾을 수 있습니다.


하나의 인스톨러 안에 여러가지 언어들


 하나의 인스톨러가 여러 개의 인터페이스 언어들을 지원합니다. 60개 이상의 변환들이 이미 포함되어 있고, 당신도 역시 당신 스스로의 언어 파일들을 생성할 수 있습니다. 아라비아, 히브리어같은 RTL(right-to-left) 언어들도 완벽하게 지원됩니다. 유니코드에 기초한 토착어 인스톨러 또한 더 많은 언어들을 지원 가능하다.

 

많은 특징들 그리고 대상 시스템에 대한 체크


 스크립트 언어는 대상 시스템에서 사용가능한 명령들을 제공합니다. 폴더생성과 레지스트리 수정과 같은 간단한 특징부터 텍스트/바이너리 파일수정, 환경변수 수정, 시스템 재부팅까지. 제공되는 플러그인들을 사용함으로써 당신은 심지어 Windows API 까지 사용 합니다.


Custom Dialogs 그리고 인터페이스들


당신은 사용자의 입력과 통합된 환경 옵션을 얻기 위해서custom wizard 페이지들을 만들수 있습니다. NSIS는 표준적이고 현대적인 wizard 인터페이스를 포함하고 있지만, 당신이 스스로의 custom interface를 만드는 것 조차도 가능합니다.


플러그인 시스템


 NSIS는 인스톨러와 통신할 수 있는 플러그인들 이용하여 확장 될 수 있습니다. 그것들은 C, C++, 델파이 또는 다른 언어로 만들어 질 수 있고 인스톨 작업을 수행하거나 인스톨 인터페이스를 확장하는데 사용되어질 수 있습니다. 당신은 플러그인을 하나의 라인의 스크립트 코드로 이용할 수 있습니다. 플러그인들은 다른 인스톨 데이터들 처럼 압축되어질 수 있고 제공되는 특정한 기능을 사용 시에 포함되어 질 것입니다.


웹 설치 지원, 파일 패치


 NSIS 배포는 당신이 인터넷에서 파일들을 다운로드 받고, 인터넷 연결을 생성하고, 존재하는 파일들을 패치 할 수 있게하는 하나의 플러그인들의 셋을 포함합니다.


프로젝트 통합, 다른 배포들 그리고 자동화된 빌드


 NSIS 컴파일러는 강력한 preprocessor를 갖추고 있습니다. 이것은 당신어 여러개의 프로젝트를 쉽게 통합하여 하나의 인스톨러로 생성하거나 자동적으로 설치 빌드를 생성합니다. 당신은 또한 최소버전 그리고 풀버전같이 다른 배포판을 생성 할 수 있습니다.


쉽고 사람이 읽기 쉬운 파일 형식


 NSIS 스크립트 포멧 그리고 인터페이스 대화창들 사용하기 위한 포멧은 쉽고, 문서화 되고 사람이 가독할만 하기 때문에 당신은 당신의 파일들을 좋아하는 에디터를 이용해서 편집 할 수 있습니다. 이것들 역시 자동화된 스크립트 생성이 가능하도록 합니다.


1.3  기능 목록

 - 자체 실행가능한 인스톨 파일을 생성한다.

 - ZLIB, BZIP2, LZMA 데이터 압축을 지원한다. (파일들은 개별적으로나 함께 여러파일이 함께 압축 가능하다)

 - 언인스톨러 지원(인스톨러는 언인스톨러를 생성 할 수 있다.)

 - 사용자가 바꿀 수 있는 사용자 인터페이스 ( dialogs, fonts, backgrounds, icons, text, checkmarks, images 그 외. )

 - 표준적이고 현대전인 마법사 인터페이스

 - 언인스톨러 지원(인스톨러는 언인스톨러를 생성 할 수 있다.)

 - 완벽하게 여러 언어를 사용할수 있는, 하나의 인스톨러 안에서 여러가지의 언어들은 지원한다. 60개 언어변환들을 이용 가능하지만 당신은 또한 당신 스스로의 것은 만들 수 있다. 유니코드가 더 많은 언어를 지원하는 것을 도와준다.

 - 페이지 시스템 : 당신은 표준적인 마법사 페이지나 사용자가 수정할 수 있는 페이지를 추가 할 수 있다.

 - 인스톨 컴포넌트들의 사용자 선택, 컴포넌트 선택을 위한 트리

 - 여러 개의 설치 환경(대게는 최소, 일반, 최대 버전 세가지로 나뉨) 그리고 사용자가 변경할 수 있는 환경설정

 - 설치 관리자는 CRC32 체크섬을 사용

 - 압축된 데이터 사이즈를 뛰어넘는 작은 사이즈 (34kb 가 default 옵셥)

 - 일반적인 텍스트나 RTF 포멧에서 라이선스 동의 정보를 보여줄 수 있음

 - 레지스트리 안에 있는 설치 디렉토리를 감지 할 수 있음

 - 플러그 인 시스템을 사용하기 쉬움 ( 많은 사용자가 수정가능한 Dialog의 생성을 위한 플러그, 인터넷 연결, HTTP 다운로드, 파일 패치, WIn32 API 호출 그 외 의것을이 include 가능)

 - 인스톨러는 2GB 만큼의 사이즈를 가질 수 잇음

 - 자동화된 설치를 위한 선택적인 정숙모드 

 - 정의된 symbol들이나, 매크로들, 조건부 컴파일, 표준화된 미리 정의

 - PHP와 어셈블리의 요소와 함께 제공되는 매력적인 코딩 경험 (사용자 변수, 스택, real flow control, 그 외.)

 - 인스톨러들은 그들 스스로의 당신이 코드를 작성하게 하는 VMs을 가지고 있습니다. 당신이 작성한 코드는 다음과 같이 지원 할 수 있습니다.


   -- 파일 추출 ( 변경 가능한 덮어쓰기 파라미터들 )

   -- 파일 / 디렉토리 복사, 이름변경, 삭제, 검색

   -- dll 플러그인 호출

   -- dll / Active X 컨트롤 등록 / 해제

   -- 실행파일 실행 (쉘로 실행하고 옵션을 기다립니다.)

   -- 바로가기 생성

   -- 레지스트리 키 읽기 / 설정 / 나열 / 삭제

   -- INI 파일 읽기 / 쓰기

   -- 일반적인 파일 읽기 / 쓰기

   -- 강력한 문자열 그리고 숫자 처리

   -- 클래스 이름이나 타이틀을 이용하여 윈도우 찾기 

   -- 사용자 인터페이스 처리 (폰트 / 텍스트 설정)

   -- 분기, 비교, 그 외.

   -- 에러 체크

   -- 재부팅 지원, 부팅시 삭제 또는 재명명을 포함

   -- 인스톨러 행동 명령 ( 보여주기 / 감추기 / 기다리기 / 그 외)

   -- 스크립트 속에 사용자 함수

   -- 사용자 행동을 위한 콜백 함수 


 - 어떻게 사용하든 완벽한 공짜입니다. 라이선스 를 보세요.

 - 그 외


1.4  유니코드 인스톨러들

 MakeNSIS v3.0 과 함께 시작하면 당신을 유니코드 속성을 설정함으로써 유니코드 인스톨러를 생성할지를 결정 할 수 있습니다. 이 유니코드 인스톨러는 윈도우 95/98/ME 에서는 동작하지 않을 것 입니다. 그러나 그것들은 당신의 인스톨러가 운영체제에 의해 지원되는 어떠한 유니코드 언어로든 보여줄 수 있게 할 것입니다.


유니코드 인스톨러를 빌드 할때, NSIS 변수들은 유니코드 문자들을 가지고 있을 수 있습니다. 기존에 존재하는 당신의 스크립트를 수정할 필요 없습니다. 당신이 유니코드 파일들을 읽거나 수정하기를 원한다면, 디스크에서 UTF-16LE 문자열을 읽고 쓰기 위해서 구체적인 명령들이 추가되어야 합니다. 


저작자 표시 비영리
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

'메뉴얼 번역 > NSIS' 카테고리의 다른 글

[Chapter1] Introduction to NSIS  (0) 2015.05.12
Posted by 앱등김치맨


  • 윈도우 내에서 다중스레드 프로그램을 이용하기 위해서는 스레드 동기화 방식의 종류에 대해 설명
    • 해결방안
      • Critical Section
      • Mutex
      • Semaphore
      • Event

  • Critical Section
    • 사용범위 : 하나의 프로세스 내에서 두개 이상의 스레드에서 자원 공유 가능
    • 속도 : 매우빠름 (Critical Section 이 일반적으로 Mutex 보다 더 빠른 이유는 시스템 호출(System call)을 하지 않기 때문에 사용자 공간에서만 이루어지기 때문)
    • 사용방식

 

  • Mutex
    • 사용범위 : 두개 이상의 프로세스에서 두개 이상의 스레드에서 자원 공유 가능
    • 속도 : Critical Section 보다 느림 (System Call을 이용하기 때문에 Context Change 이루어짐)
    • 사용방식

 

 

 

  • Shemaphore



 

 

 

저작자 표시 비영리
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by 앱등김치맨

BLOG main image
안녕하세요. 프로그래밍 블로그입니다. 다른것도 조금 있궁 by 앱등김치맨

공지사항

카테고리

분류 전체보기 (49)
프로그래밍 (21)
운영체제 (5)
데이터베이스 (2)
메뉴얼 번역 (1)
툴즈 (8)
IT 기기 (1)
영어 (1)
일기장 (0)
로봇제어 임베디드 (4)
기타정보 (2)
비밀 메모장 (0)
코드아이 기록 (0)

최근에 달린 댓글

최근에 받은 트랙백

Total : 49,644
Today : 2 Yesterday : 53