Moder User Interface - NSIS

프로그래밍/NSIS | 2007/03/16 14:54 | 게으른 엔지니어
정말 오랜만에 NSIS에 관한 글을 포스팅한다. 가끔 블로그에 누가, 어떤 이유로 오는지 궁금해서 리퍼러 기록을 보면 대부분 NSIS에 관한 글 때문에 오는 걸로 보이는데, 요 근래에는 넘 바빠서(실제로는 마음에 여유가 없었다) NSIS에 관한 글을 포스팅하지 못했다. 예전부터 가지고 있던 네이버 블로그의 내용을 옮겨 오는 작업이 전부 였다. 여기서 NSIS에 대한 글을 자주 포스팅 한다고 적지는 못하겠다. 그냥 내가 시간이되면 내 마음 내키는 데로 글을 올릴 것이다...



아래 내용은 기본적으로 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를 잘 쓰는지 달려있다.

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_FINISH

Uninstaller 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

각각의 페이지에 대한 기본적인 매크로는 위와 같다. 직관적으로 어떤 식으로 사용되는지 알 수 있으므로 따로 설명하지는 않겠다. 위에 있는 페이지에 대한 모양을 꾸미는 것은 Interface settings에 있는 매크로를 이용해서 표시되는 이미지를 바꿀 수 있으며, 텍스트에 관련된 부분을 바꾸는 것은 Page Settings에 있는 매크로를 이용해서 바꾸게 된다. Page Settings에 있는 매크로를 사용할 경우 실제 페이지를 삽입하는 매크로, 즉 위에 나와 있는 매크로, 보다는 먼저 설정을 해야 한다.

간단하게 Welcome Page Settings에 있는 매크로를 보면

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.

위 매크로를 보면 Welcome page의 텍스트를 바꾸는 것을 알 수 있다.


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를 사용하는데 필요한 기본적인 내용은 다 배웠다. 다음에는 실제 예제를 훑어 보면서 의미를 생각해 보자.


크리에이티브 커먼즈 라이센스
Creative Commons License
  1. 기존에 NSIS의 인터페이스 [Back]
이올린에 북마크하기(0) 이올린에 추천하기(0)

트랙백을 보내세요

트랙백 주소 :: http://www.cipher.pe.kr/tt/cipher/trackback/154

댓글을 달아 주세요

  1. 봉사쳥년 2007/04/26 11:04

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

[로그인][오픈아이디란?]
비밀글 (Serect)
댓글 달기 (Submit)