아래 내용은 기본적으로 NSIS 2.24 안에 있는 메뉴얼에서 발췌한 내용이다.
NSIS 2 부터 사용자 정의 인터페이스가 가능하게 되었는데, Modern UI는 윈도우즈의 마법사 형태와 비슷한 인터페이스를 제공해 준다.
새로운 인터페이스는 몇개의 새로운 화면을 제공하고, 컴포넌트 페이지에서 설명을 포함시킬 수 있다. Modern UI 매크로를 이용해서 인스톨러를 만드면 손쉽게 인터페이스를 만들 수 있다.
Modern UI 셋팅은 기존의 NSIS 셋팅과 다르기 때문에, LicenseText, Icon, CheckBitmap, InstallColors등과 같은 셋팅을 할 수 없다.
Modern UI는 인터페이스를 조절할 매크로를 제공하기 때문에 손쉽게 사용할 수 있다. Modern UI를 사용하고자 할 때는 아래의 설명과 같이 하면 된다.
Syntax
앞에서 얘기했듯이 매크로로 이미 다 정의되어 있기 때문에 매크로에 값을 대입하거나 혹은 참/거짓 으로 셋팅할 수 있다.
파라메타 셋팅은 다음과 같은 형식으로 셋팅한다
required (option1 | option2) [optional]
정의된 셋팅에 대한 파라메타는 한 개의 문자열로 되어 있어야 한다. 즉 " "로 감싸져야 한다는 뜻이다. 만약에 문자열안에 " 를 포함시켜야 할 경우는 $\" 형태로 사용해야 한다.
몇 개 예제를 보자
첫 번째 줄은 값을 지정하지 않고 셋팅을 하겠다는 내용이다. 두 번째줄은 myUI.exe라는 셋팅 값을 한개 보낼때 이고, 세 번째줄은 두 개의 셋팅 값을 주는 것이다. 실제로 어떤 매크로 인지는 나중에 보도록 하겠다.
1. Header file
MUI.nsh는 NSIS를 인스톨 했을때 생성되는 Include 디렉토리안에 있으므로 include할때 특별히 경로를 지정할 필요는 없다. 이 파일은 무조건 include해야 하는 것이다. 만약 include하지 않으면 MUI 에서 사용하는 매크로를 사용할 수 없다.
2. Interface Configuration
Interface 셋팅의 경우 고전적인1 인터페이스와 교체 가능한 매크로를 제공하고 있다. 여기에 설명하고 있는 Interface Configuration에 쓰이는 모든 셋팅은 이 다음에 나오는 Pages interface 보다 무조건 먼저 나와야 한다.
2.1. Interface Settings
전체적인 Interface에 대한 셋팅을 어떻게 할 건지에 대한 많은 매크로가 있다. 여기서 그 각각을 전부 설명하는 건 무리가 있으므로 나중에 예제 설명시에 필요한 매크로만 설명하도록 하겠다. 대부분의 매크로가 각각의 페이지에 이미지를 어떻것을 넣을건지를 셋팅할 수 있게 되어 있다.
3. Pages
사용하고자 하는 페이지가 있으면 지정된 매크로를 이용해서 어떤 페이지를 사용할 건지 NSIS에게 알려 줘야 한다. 그리고 사용자가 만든 페이지가 있으면 그 역시 매크로로 지정하여 인스톨시에 페이지로 표시할 수 있다.
예를 들어 보면,
1번째줄은 License.rtf 파일을 읽어서 라이센스 페이지를 출력하라는 얘기이다. 2번째줄은 컴포넌트를 보여 주는 페이지를 출력하는 것이고, 3번째줄은 Start Menu Folder 페이지에 대한 page id 를 받아서 STARTMENU_FOLDER 변수에 대입하는 것이다.
위의 예제에서 보는 것 처럼 필요한 매크로를 활용하는 것으로 MUI를 쓰기 위한 작업은 대부분 끝이 난다. 때문에 얼마나 많은 매크로를 자유 자재로 사용하는지가 MUI를 잘 쓰는지 달려있다.
각각의 페이지에 대한 기본적인 매크로는 위와 같다. 직관적으로 어떤 식으로 사용되는지 알 수 있으므로 따로 설명하지는 않겠다. 위에 있는 페이지에 대한 모양을 꾸미는 것은 Interface settings에 있는 매크로를 이용해서 표시되는 이미지를 바꿀 수 있으며, 텍스트에 관련된 부분을 바꾸는 것은 Page Settings에 있는 매크로를 이용해서 바꾸게 된다. Page Settings에 있는 매크로를 사용할 경우 실제 페이지를 삽입하는 매크로, 즉 위에 나와 있는 매크로, 보다는 먼저 설정을 해야 한다.Installer Pages
MUI_PAGE_WELCOME
MUI_PAGE_LICENSE text/rtf_file
MUI_PAGE_COMPONENTS
MUI_PAGE_DIRECTORY
MUI_PAGE_STARTMENU page_id variable
MUI_PAGE_INSTFILES
MUI_PAGE_FINISHUninstaller Pages
MUI_UNPAGE_WELCOME
MUI_UNPAGE_CONFIRM
MUI_UNPAGE_LICENSE text/rtf_file
MUI_UNPAGE_COMPONENTS
MUI_UNPAGE_DIRECTORY
MUI_UNPAGE_INSTFILES
MUI_UNPAGE_FINISH
간단하게 Welcome Page Settings에 있는 매크로를 보면
위 매크로를 보면 Welcome page의 텍스트를 바꾸는 것을 알 수 있다.MUI_WELCOMEPAGE_TITLE title
Title to display on the top of the page.MUI_WELCOMEPAGE_TITLE_3LINES
Extra space for the title area.MUI_WELCOMEPAGE_TEXT text
Text to display on the page. Use \r\n for a newline.
4. Custom functions
사용자가 직접 작성한 함수들을 포함시킬 수도 있다. 이 부분도 나중에 다시 설명하도록 하겠다.
5. Language files
인스톨러에 어떤 언어로 보여 줄건지를 결정할 수 있는 셋팅을 할 수 있게 해주는 매크로이다.
위와 같이 쓰면 언어에 맞는 NLF 파일을 로드해서 인스톨시에 보여 주게 된다.
만약 사용자가 볼려고 하는 언어를 결정하기 위해서는 아래와 같이 .onInit 함수에 MUI_LANGDLL_DISPLAY 매크로를 쓰면 된다.
5.1. Language Selection Dialog Settings
인스톨시에 사용자가 결정한 언어를 레지스트리에 저장하기 위해서 아래와 같은 매크로를 써서 저장했다가 언인스톨시에 MUI_UNGETLANGUAGE 매크로로 자동으로 언어를 결정하도록 할 수 있다.
MUI_LANGDLL_REGISTRY_ROOT root위의 레지스트리는 언인스톨시에 직접 삭제하도록 해야 삭제가 된다. 자동으로 삭제가 안되므로 빼먹지 말도록 하자. 언인스톨시에는 아래와 같이 사용한다.
MUI_LANGDLL_REGISTRY_KEY key
MUI_LANGDLL_REGISTRY_VALUENAME value_name
또한 언어 선택 윈도우의 타이틀등을 수정할 수 있는 매크로도 제공된다.
6. Reserve Files
NSIS는 기본적으로 인스톨러를 만들면 압축을 해서 하나의 파일로 제공하게 된다. 이때 내부적으로 몇가지 압축 알고리즘을 이용해서 압축을 하게 된다. 컴파일러 플래크 중에 /SOLID 라는 플래그를 사용하면 모든 데이타에 대해서도 압축을 하게 된다. 이렇게 하면 파일의 크기는 작아 지지만, 실제 인스톨시에는 이 부분에 대해서도 압축을 푸는 시간이 걸리게 된다. Reserve Files 분류에 있는 매크로는 /SOLID 플래그를 사용했을때 특정한 데이타는 압축을 하지 않도록 공간을 마련하는 매크로들이다. 생각하기에 특별히 사용할 일이 없을듯 한 매크로이다. 지금은 디폴트로 /SOLID 플래그가 셋팅이 되지 않기 때문에 사용자가 직접적으로 /SOLID 플래그를 줘야 효과가 나타나는 매크로들이기 때문이다.
7. Your own sections and functions
사용자 섹션이나 함수들을 포함할 수도 있는데, 이는 여기서 다루기에는 좀 힘들다... 나두 아직 잘모른다는... ㅋㅋㅋ
8. Section Description
고전적인 NSIS의 인터페이스에도 컴포넌트를 선택하는 페이지를 만들 수 있지만, 문제점이 어떤 컴포넌트 위에 마우스를 가져 갔을때 으떤 컴포넌트인지 설명이 안 나오는게 되어 있다. Modern UI 에서는 이 부분을 가능하게 하는 매크로들이 있다. 컴포넌트에서 설명을 보여 주지 않을려면 MUI_COMPONENTSPAGE_NODESC 매크로를 셋팅하면 된다.
컴포넌트에 설명을 적을려면 다음과 같이 하면 된다.
언인스톨시에도 컴포넌트에 설명을 할 필요가 있는 경우 MUI_UNFUNCTION_DESCRIPTION_BEGIN과 MUI_UNFUNCTION_DESCRIPTION_END 매크로를 위와 같이 사용하면 되겠다.
이제 Modern UI를 사용하는데 필요한 기본적인 내용은 다 배웠다. 다음에는 실제 예제를 훑어 보면서 의미를 생각해 보자.
- 기존에 NSIS의 인터페이스 [Back]




댓글을 달아 주세요
음... nsis관한 좋은 정보들 감사하게 보고 있습니다..^^
근데 혹시 url로 바로가기exe파일을 만든뒤 바탕화면에 설치했을때 혹시 아이콘 변경하는 방법이 있을까요.?
정보만얻어가다가 질문까지 올려서 죄송합니다..ㅡ.,ㅜ
오늘 하루 잘 보네세요~~~~~^^