삽질도 두드려 보고,

DESIGN YOUR EXPERIENCE

2.2 스크립트 파일

토픽 삽질도 두드려 보고, > 클라이언트 프로그래밍 > NSIS

 NSIS 인스톨러를 생성하기 위해서는 NSIS 스크립트를 먼저 작성해야 합니다. NSIS 스크립트는 특수한 문법을 적용한 단순한 텍스트 파일입니다. 어떠한 텍스트 편집기로도 이 스크립트를 편집할 수 있습니다. NSIS는 스크립트 오류가 발생했을 때, 줄번호를 통해 오류의 위치를 알려주므로 줄 번호를 보여주는 텍스트 편집기를 사용할 것을 권장합니다. 문법 강조를 지원하는 에디터 또한 권장합니다. NSIS Wiki에서 NSIS를 위해 만들어진 에디터와 문법 강조 파일을 다운로드 할 수 있습니다.

 먼저 NSIS 공식 홈페이지에서 NSIS를 다운로드 받아 설치합니다. 이 문서에서는 NSIS 3.03 버전을 기준으로 진행합니다.

 2019년 3월경부터 동년 5월까지 NSIS 홈페이지 및 파일 호스팅을 담당하는 Source Forge 사이트가 한국의 특정 ISP에서 회선 문제로 인해 접속이 차단되었습니다. NSIS 설치 파일 등 중요한 파일에 대해서는 보조 파일서버의 링크를 추가로 연결해 두었습니다.
 NSIS 3.03 임시 파일 다운로드: https://cloud.amilab.dev/s/QzaZDoZK58nLn6W

 제가 추천하는 NSIS 개발 환경은 Visual Studio Code 또는 Atom입니다. 저는 Visual Studio Code를 사용하겠습니다. VSCode 실행 후 왼쪽 확장을 클릭하여 NSIS를 검색한 후, 관련된 확장 프로그램을 설치합니다.

 설치 후 작업폴더를 열고 *.nsi 확장자를 가진 새 파일을 생성합니다. 컴파일 테스트를 위해 아래와 같이 소스코드를 입력하여 아무런 작업도 하지 않는 가장 간단한 인스톨러를 생성합니다. 방금 설치한 NSIS 확장이 코드 자동 완성 기능을 제공하므로 3초 안에 작성할 수 있습니다.

OutFile "file_name.exe"
Section "section_name" section_index_output
  # your code here
SectionEnd

 VSCode 오른쪽 상단에 빌드와 관련된 옵션들이 있습니다. 두번째 버튼(Ctrl Shift B)을 눌러 컴파일을 시도합니다.

 PATH 환경변수 문제로 인해 컴파일 시 makensis를 찾을 수 없다는 오류가 나타나면 Windows 환경변수 중 path 변수에 makensis 컴파일러의 경로를 추가합니다. 사용자 변수와 시스템 변수 간의 차이와 그 영향을 모른다면, 시스템 변수 영역의 path 변수에 추가하십시오. 그리고 VSCode를 다시 시작합니다.

 한글 등 비 ASCII 문자가 스크립트 파일 내에 있으면 컴파일 도중 Bad text encoding 오류가 나타날 수 있습니다. 텍스트 인코딩을 UTF-8에서 EUC-KR로 변경합니다. VSCode 오른쪽 하단에 인코딩을 변경할 수 있는 옵션이 있습니다.

 컴파일에 성공했다면 Run(실행) 및 Reveal(폴더 열기) 버튼이 보이는 컴파일 성공 메시지가 나타납니다. VSCode를 관리자 권한으로 실행하지 않았다면 Run은 아무런 반응이 없을 것입니다. 폴더에서 직접 실행하거나, VSCode를 관리자 권한으로 실행시켜야 합니다. NSIS 인스톨러는 실행 시 기본값으로 관리자 권한을 요구합니다. 생성된 인스톨러 파일의 크기는 파일의 아이콘 등 기본 리소스 크기를 감안하여 대략 35.8 KB를 차지하게 됩니다.

 아무런 작업을 지시하지 않았으므로 실행과 동시에 설치가 완료되었다고 나타납니다.

 이제 예제를 복사하여 직접 컴파일 해보면서 다른 절차 지향 프로그래밍 언어와의 차이를 인지하십시오. 가끔 예제 소스코드에서 설명되지 않는 부분이 있을 수 있으나 본 장은 튜토리얼 중심으로 설명하므로 깊은 문법은 뒷 장에서 설명합니다.

 NSIS 스크립트에서 한 줄은 한 명령로 취급합니다. 만약 명령이 너무 길때에는 역슬래쉬(\)를 이어 명령을 연장할 수 있습니다. 그러면 컴파일러는 새 줄을 새 명령이 아닌 이전 줄의 연장된 줄로 인식합니다.

OutFile "file_name.exe"
Section "section_name" section_index_output
  Messagebox MB_OK|MB_ICONINFORMATION \
"This is a sample that shows how to use line breaks for larger commands in NSIS scripts"
SectionEnd

 문자열에서 큰 따옴표를 사용할 때 $\”를 사용하여 큰 따옴표를 이스케이프하거나 ` 또는 ‘과 같이 다른 유형의 따옴표로 문자열을 인용할 수 있습니다. 포맷에 대한 좀 더 자세한 정보는 스크립트 파일 포맷을 참조하십시오.

 스크립트 파일의 기본 확장자는 .nsi 입니다. 헤더 파일은 .nsh 확장자를 갖습니다. 헤더 파일은 코드를 하나 이상의 블럭으로 분리하여 스크립트의 모듈화를 구현합니다. 함수나 매크로를 헤더에 작성한 후 스크립트에 포함시키면 유지 보수를 쉽게 하고 스크립트 가독성을 올려줍니다. 스크립트에 헤더 파일을 포함시키기 위해서 !include 명령을 사용합니다. NSIS 설치 디렉터리의 Include 폴더 안에 있는 헤더 파일들은 경로를 따로 작성할 필요 없이 파일명만으로도 포함될 수 있습니다.

!include Sections.nsh

댓글

댓글 본문
  1. LIM HYUN SEOK
    소스포지 사이트 접속이 아직 안되는 통신사가 있나보네요.
    마침 한국어 블로그가 있네요.
    http://blog.naver.com......iew
    대화보기
    • 하핳핫
      레퍼런스가 안보입니다.

      웹 사이트에서 페이지를 표시할 수 없습니다. 라고 표시가 됩니다.
      대화보기
      • LIM HYUN SEOK
        예제: RegDLL "$WINDIR\OCX\vbalGrid6.ocx"
        레퍼런스: https://nsis.sourceforge.io......DLL
        이렇게 해보시겠어요?
        대화보기
        • 하하핫
          OCX를 관리자 권한으로 등록을 하려 합니다.
          방법이 읶는지요?
        • CraXicS
          Windows 방화벽 제어는 netsh advfirewall 명령줄 옵션을 NSIS에서 직접 실행하거나 http://nsis.sourceforge.net......-in 등의 플러그인을 사용하는 방법이 있습니다. http://ospace.tistory.com/174 이곳에서 해당 플러그인이 간략하게 설명되어 있습니다. 서비스 또한 sc 명령줄 옵션을 실행하거나 http://nsis.sourceforge.net......gin 플러그인을 사용하면 됩니다.
          대화보기
          • 방문객
            nsis 기능중에 방화벽차단, 서비스 등록 같은 기능에 대해 설명한 페이지가 있나요 ?? 아님 혹시 자료가 있으면 부탁좀드립니다.
            대화보기
            • CraXicS
              NSIS를 설치한 후 Visual Studio Code를 설치하셨나요?
              컴파일 시 번개 문양 또는 단축키를 사용하셨나요?
              종합적인 문제 해결을 위해 아래의 절차를 따라해 보세요.

              1. NSIS도 설치해야 합니다.
              -NSIS 컴파일러가 설치된 상태에서 컴파일해야 하기 때문에 공식 홈페이지(http://nsis.sourceforge.net/Download)에서 다운로드 받아 설치해주세요.
              2. (설치 순서와 관계없이) 설치된 상태라면 makensis.exe를 환경변수에 등록해주세요.
              -자세한 절차는 위 문서에 작성되어 있습니다.
              3. Visual Studio Code에서 작업 폴더를 열 때 한글이 있는 디렉터리를 피해주세요.
              -특히 한글로 된 계정 이름이 있는 디렉터리 안에서 컴파일하거나 소스 폴더 및 파일 이름이 한글이면 오류가 날 수 있습니다. (파일->폴더 열기)
              4. Visual Studio Code를 종료한 후 관리자 권한으로 실행하여 컴파일해보세요.
              -관리자 권한으로 실행 시 Visual Studio Code 제목 표시줄에 [관리자] 접미사가 붙습니다.
              5. 컴파일 시 작업->빌드 작업 실행이 아닌 Ctrl+Shift+B 키 또는 번개 문양 버튼을 클릭해 컴파일하세요.
              6. 컴파일 후 바로 인스톨러를 실행하고나서 다시 소스파일의 수정사항 없이 짧은 시간에 여러번 컴파일을 하면 "Compilation failed, see output for details" 오류 메시지가 나타날 수 있습니다.
              -실행 중인 인스톨러를 모두 종료하고 몇 십초 기다렸다가 다시 시도하거나 작업 폴더에서 생성된 인스톨러 파일을 삭제한 후 시도하세요.

              그래도 문제가 해결되지 않으면 댓글 달아주세요.
              대화보기
              • 구독자
                안녕하세요

                visual studio code를 다운받아서 따라해보려는데

                빌드작업실행 하면

                상단에

                "실행할 빌드 작업을 찾을 수 없습니다."

                라는 메시지가 나오고 빌드가 안되는데

                도움좀 구할 수 있을까요?

                구글링 해 봐도 답을 찾을 수가 없네요..