본문으로 건너뛰기
  1. Posts/

NSIS를 사용하여 Windows 설치 프로그램 만들기

·4 분· loading · loading ·
Gryu
Techtopic Installation 설치프로그램
InnoFactory
작성자
InnoFactory
스마트팩토리, 산업자동화, Digital Transformation, 디지털팩토리, PLM, ALM, Digital Manufacturing, Visualization, 3D CAD, Digital Twin, Big Data, IIoT 솔루션 전문업체
작성자
GeonSang Ryu
평범한 대한민국 두 자녀의 아빠

국지전 발생
#

Java 개발자에게 Windows용 설치 프로그램을 만드는 것은 여간 부담스러운 일이 아닐 수 없습니다. Setup.exe 파일 하나를 제작하기 위해 Windows 계열 언어와 개발환경을 처음부터 모두 배우는 것은 배보다 배꼽이 더 큰 일임이 분명합니다.

설치 프로그램 제작과 관련된 기반지식이 전무한 제가 열심히 구글링 해 본 결과 NSIS 라는 라이브러리로 설치 프로그램을 손쉽게 제작할 수 있음을 알게 되었으며 이에 대한 내용을 이 글에 남겨봅니다.

작전 수립
#

이 문제를 해결하기 위해 저는 아래와 같은 작전을 수립했습니다.

  1. 사용자 로컬에 설치한 exe, dll 파일들을 준비한다.
  2. NSIS 라이브러리를 설치한다.
  3. NSIS 스크립트를 처음부터 작성하는 것은 비효율적이므로 NSIS 스크립트 에디터를 설치하고 이를 사용하여 스크립트 초안을 만든다.
  4. NSIS 스크립트 에디터로 만들어진 스크립트 초안에 레지스트리 수정과 같은 추가 스크립트를 삽입한다.
  5. NSIS를 사용하여 스크립트를 컴파일하여 Setup.exe 를 생성한다.

위 작전대로 과연 성공할 것인가? 이제부터 죽 진행해봅시다.

작전 실행
#

작업 디렉토리 생성
#

먼저 작업에 필요한 디렉토리들을 생성해주어야 합니다. 우리는 TestLauncher 의 Installer 를 만들고 있으니 D:\temp\TestLauncherInstaller 디렉토리를 먼저 생성해주고 그 하위에 아래의 하위 디렉토리를 생성해줍니다.

  • installationFiles : 설치에 사용될 exe, dll 파일들을 위치시킬 디렉토리
  • installationScript : NSIS 스크립트 파일을 위치시킬 디렉토리 (Ex. TestLauncherSetup.nsi)
  • license : 라이선스 문구 파일을 위치시킬 디렉토리 (Ex. TestLauncherLicense.txt)

설치에 사용되어질 파일 준비
#

설치되어야할 exe 및 dll 파일을 C++ 개발자에게 받아옵니다. 저는 C++을 할지 몰라서 지원을 부탁했습니다. 이 파일들을 D:\temp\TestLauncherInstaller\installationFiles 디렉토리에 위치시킵니다.

준비되어진 파일들은 NSIS 스크립트 에디터로 스크립트 초안을 만들때 선택되어질 예정입니다.

NSIS 라이브러리 설치
#

NSIS 스크립트를 컴파일하여 최종 결과물인 TestLauncherSetup.exe 파일을 만들어주는 라이브러리 입니다. 꼭 필요하겠죠?

https://nsis.sourceforge.io/Download 에서 다운로드 받을 수 있습니다.

image-20240521153539996

이 글을 작성하는 시점의 버전은 nsis-3.10-setup.exe 입니다. 다운받은 파일을 더블클릭하여 원하는 위치에 설치합니다. 자세한 설치과정은 생략하도록 하겠습니다.

NSIS 스크립트 에디터 설치
#

NSIS 스크립트를 마법사 단계별로 진행하며 스크립트 초안을 만들어주는 소프트웨어 입니다. 텍스트 에디터를 사용하여 처음부터 NSIS 스크립트를 작성하는 것은 매우 비효율적이므로 반드시 이 툴을 사용하시기 바랍니다.

https://hmne.sourceforge.net/index.php#Download 에서 다운로드 받을 수 있습니다.

image-20240521160530910

이 글을 작성하는 시점의 버전은 nisedit2.0.3.exe 입니다. 다운받은 파일을 더블클릭하여 원하는 위치에 설치합니다. 자세한 설치과정은 생략하도록 하겠습니다.

다만, 설치시 언어선택 옵션에서 오류가 발생한다면 “무시"를 선택하고 넘어가시기 바랍니다. 현재 버전에 오류가 있는듯 보여집니다만 대세에 지장은 없습니다. 마지막 업데이트가 2005년임을 가만해야 할 것 같습니다. 지금은 2024년 !

라이선스 문구 파일 생성
#

프로그램 설치를 시작하면 라이선스를 동의하는 부분이 있습니다.

Notepad++ 을 사용하여 사용할 라이선스 문구를 D:\temp\TestLauncherInstaller\license\TestLauncherLicense.txt 디렉토리에 미리 만들어 놓습니다.

[!WARNING]

텍스트 인코딩은 반드시 ANSI 이어야 합니다. 만약 ANSI 가 아닌 경우 Notepad++ 의 “인코딩” > “ANSI로 변환” 메뉴를 사용하여 변환하시기 바랍니다.

NSIS 스크립트 초안 생성
#

NSIS 스크립트 에디터를 사용하여 스크립트 초안을 생성합니다.

C:\Program Files (x86)\HMSoft\NIS Edit\nisedit.exe 를 실행하거나, 아래 아이콘을 찾아서 에디터를 실행하십시요.

image-20240521171332417

간단한 에디터 사용법은 https://build.tistory.com/27 를 참조하시면 됩니다.

일단, 하던 작전을 계속 수행합니다.

“파일” > “스크립트 작성 마법사” 또는 메뉴아이콘을 사용하여 스크립트 작성 마법사를 실행합니다.

image-20240522084702725

프로그램 정보를 입력하고 다음을 클릭합니다.

image-20240604173145593

설치옵션을 입력 후 “다음"을 클릭합니다.

설치파일 : TestLauncherSetup.exe

설치언어 : Korean 체크

다음 단계에서 라이선스 파일을 지정하고 “다음"을 클릭합니다.

image-20240604173624470

D:\temp\TestLauncherInstaller\installationFiles 에 준비된 설치 exe, dll 파일들을 지정 후 다음을 클릭합니다.

image-20240604174008364

프로그램 시작메뉴명에 “TestLauncher"를 입력하고 “다음"을 클릭합니다.

설치 후 실행 단계는 디폴트 값을 사용하고 “다음"을 클릭합니다.

image-20240604174431047

언인스톨러는 디폴트 값을 사용하고 “다음"을 클릭합니다.

마법사 완료 단계에서 “스크립트 저장"을 체크하고 “완료"를 클릭합니다.

스크립트 지정 폴더는 D:\temp\TestLauncherInstaller\installationScript 로 지정합니다.

image-20240522095223993

NSIS 스크립트 수정 (레지스트리 편집 기능 삽입)
#

이제 생성되어진 D:\temp\TestLauncherInstaller\installationScript\TestLauncherSetup.nsi 을 텍스트 에디터로 열어 설치과정에서 레지스트리를 추가 할 수 있는 코드를 삽입할 것입니다. NSIS 스크립트로 레지스트리 추가/삭제 이외에도 다양한 작업을 수행할 수 있으므로 공식메뉴얼을 참조하여 시도해 보시기 바랍니다.

NSIS 사용자 설명서

먼저, 프로그램 설치가 성공된 이후 URL Scheme 과 관련된 레지스트리가 추가되도록 아래 Function 구문을 추가합니다. 아래 구문은 testlauncher:// 형태의 URL이 로컬의 TestLauncher.exe 를 실행 할 수 있도록 해 줍니다.

Function .onInstSuccess
  DeleteRegKey HKLM "SOFTWARE\Classes\testlauncher"
  WriteRegStr HKLM "SOFTWARE\Classes\testlauncher" "URL protocol" ""
  WriteRegStr HKLM "SOFTWARE\Classes\testlauncher\shell\open\command" "" "$INSTDIR\TestLauncher.exe %1"
FunctionEnd

프로그램 제거시에도 추가한 레지스트리가 깔끔히 삭제되도록 아래 구문을 Uninstall 섹션에 추가합니다.

Section Uninstall
  ...
  DeleteRegKey HKLM "SOFTWARE\Classes\testlauncher"
  ...
SectionEnd

NSIS 스크립트 컴파일
#

이제 마지막 단계로 NSIS 스크립트를 컴파일하여 최종 결과물인 Setup.exe 을 생성해 볼 것입니다.

Windows 의 시작메뉴에서 NSIS 를 실행시키고 “Compile NSI scripts” 클릭 후 앞서 작성한 NSIS 스크립트 파일을 지정하기만 하면 컴파일이 완료되고, 스크립트가 존재하는 디렉토리에 Setup.exe 가 생성됩니다.

image-20240521164017941

컴파일 단계가 표시되는 패널의 바탕색이 초록색톤으로 반전되면 컴파일이 성공한 것입니다. 만약 빨간색톤으로 반전이 된다면 스크립트를 디버깅 후 위 단계를 반복합니다.

드디어 원하던 설치파일이 만들어졌습니다. 짝짝짝 !

image-20240604175020882

진짜로 실행되나 궁굼해서 TestLauncherSetup.exe 를 더블클릭해 봅니다.

image-20240604175257829

와.. 됩니다. 되요 !!

설치를 끝까지 완료하고 원하는 exe, dll 파일들이 정확한 위치에 있는지, 레지스트리는 원하는 대로 추가되었는지 반복적으로 디버깅하며 설치파일을 개선하시면 됩니다. 설치삭제 이후 설치되어진 파일들과 추가된 레지스트리도 깔끔하게 정리되는지 테스트 하시기 바랍니다.

마무리
#

지금까지 NSIS 라이브러리를 사용하여 손쉽게 Setup.exe를 만드는 방법에 대해 알아봤습니다. 이번 작전을 진행하면서 세상 참 많이 편해졌구나 하는 생각이 자연스레 들었습니다. 저처럼 C++이 어색한 개발자들이 두려움을 떨쳐버리고 Windows Setup 프로그램 제작에 도전할 수 있는 계기가 되었길 바래봅니다.