electron-builder: NSIS 설치 프로그램(Installer) 커스터마이징

electron-builder

electron-builder 는 일렉트론 프레임워크로 개발 된 프로젝트를 실행 파일 혹은 설치 파일로 패키징 해주는 도구 이다. 이를 이용하여 이전 포스팅 일렉트론(Electron) 프로젝트 실행 파일로 패키징 하기에서 installer 를 만들 때 Windows OS 환경에서 사용 되는 NSIS 방식의 installer 를 만드는 방법을 다루었다.

만들어진 installer 는 아무런 옵션이 없어 단순하게 설치만 가능한 파일이 되었는데 실제 설치 프로그램은 다양한 옵션을 선택할 수 있게 제공 되어 있고 electron-builder 로 만든 installer 또한 여러가지 커스터마이징 옵션을 사용할 수 있다.

이번 포스팅은 위의 내용에 이어 Windows OS 설치 파일인 NSIS 방식 installer 에 다양한 옵션을 부여해 내가 원하는 형태로 커스터마이징 하는 방법을 좀 더 상세하고 실제 nsh 파일을 작성하는 방법을 다루기 위해 작성하였다.

electron-builder NSIS 패키징 설정

기본적으로 electron-builder 에서 패키징 시 NSIS 방식의 installer 를 생성하기 위해 packge.json 에서 “build > win” 섹션에 다음과 같은 코드를 작성하면 된다. (상세한 내용은 이전 포스트에 정리되어 있다.)

package.json
{
  "name": "your-app-name",
  "version": "1.0.0",
  "description": "Your App Description",
  "main": "index.js",
  "scripts": {
    "start": "electron .",
    "pack": "electron-builder --dir",
    "dist": "electron-builder"
  },
  "build": {
    ...
    "win": {
      "target": [
        "nsis",
        "zip"
      ]
    },
    ...
}

그리고 이를 installer 로 패키징 하기 위해선 scripts 에 사용할 명령어 명과 그 내용을 작성하면 되는데 위의 코드에선 “dist”: “electron-builder” 가 이 역할을 하게 된다. 위의 설정으로 npm run dist 를 실행하면 일렉트론 프로젝트가 하나의 installer 파일로 패키징 된다. (위의 pack 명령어는 installer 없이 exe 파일로만 패키징하게 된다.)

package.json 에 작성 가능한 installer 옵션

위의 pakage.json 에 build 섹션 안 “nsis” 섹션을 통해서 생성 될 installer 에 다양한 옵션을 부여할 수 있다. 옵션은 아래와 같이 작성한다.

package.json
{
  ...
  },
  "build": {
    ...
    "nsis": {
      "oneClick": false,
      "allowToChangeInstallationDirectory": true
    },
    ...
}

위의 예시 코드에서 oneClick 은 앱이 별도의 과정이 없이 설치를 진행할 여부를 묻는 옵션이고 allowToChangeInstallationDirectory 는 설치 중 사용자 지정 경로를 설정 가능하게 만들 지에 대한 옵션이다.

아래에서 자주 사용하는 installer 옵션 들을 좀 더 상세하게 정리했다.

oneClick

oneClick 이 true 인 상태(기본)에선 다음과 같이 installer 를 실행 하면 바로 설치가 시작되고 프로그램이 실행된다.

oneClick true

oneClick 옵션이 false 인 경우 설치를 위한 옵션, 설치 완료 후 실행하기가 활성화 된다. oneClick 외 별도의 옵션이 없다면 프로그램의 사용자를 모든 사용자, 로그인한 사용자를 설치할 수 있는 옵션만 표시 된다.

oneClick false

perMachine

위에 oneClick 캡처와 같이 설치할 사용자를 선택할 수 있게 표시가 되는데, 이 값이 true 라면 모든 사용자 버전으로 설치하게 만든다. (사용자 선택 옵션은 표시되지 않는다.)

만약 oneClick 이 false 라도 아무런 옵션 없이 perMachine 을 true 로 설정할 경우 oneClick 가 false 인 것처럼 바로 설치가 진행된다.

allowToChangeInstallationDirectory

allowToChangeInstallationDirectory 옵션은 true 일 경우 사용자가 중간에 설치를 진행하던 도중 경로를 지정할 수 있게 만들어주는 옵션으로 oneClick 이 false 인 경우에만 표시된다.

allowToChangeInstallationDirectory true

allowElevation

allowElevation true 시 설치 시 관리자 권한 요청을 출력하는 기능이다. 단, perMachine 가 true 여서 모든 사용자에게 설치 하려면 false 여도 무시되고 관리자 권한을 요청한다.

만약 perMachine 이 설정 되어 있지 않고 allowElevation 옵션이 false 라면 일반 설치 시 모든 사용자를 선택 하려면 관리자 권한이 필요하다 표시된다.

NSIS 스크립트 파일

위의 옵션은 electron-builder 가 제공하는 설정으로 installer 파일 생성 시 부여하는 옵션들이다. 만약 위에 옵션들로는 구현할 수 없는 설치 파일의 작성을 하기 원한다면, C 언어, 배치 스크립트와 유사한 형태의 NSIS 스크립트가 지원되어 좀 더 복잡한 형태의 installer 를 구현할 수 있다.

아래의 목록은 이와 관련 된 공식 문서의 링크들이다.

electron-builder NSIS 스크립트 파일 사용 설정

installer.nsh 파일을 생성하고 package.json 내 build > nsis 섹션 에서 include 에 파일 경로를 지정해준다.

packge.json
{
  "build": {
    "nsis": {
      "oneClick": false,
      "allowToChangeInstallationDirectory": true,
      "include": "installer.nsh"
    },
    ...
}

electron-builder NSIS 스크립트 작성

위에서 설정한 installer.nsh 를 통해 내가 원하는 옵션을 구현해 보았다. 먼저 내가 해보고자 했던 기능은 allowToChangeInstallationDirectory 로 표시되는 경로의 기본 경로 설정이다.

allowToChangeInstallationDirectory 기본 경로 설정

ChatGPT 와 여러 커뮤니티 글을 참고해서 코드를 작성해 보았는데 정상적으로 동작하던 기능은 아래 코드 뿐 이였고 정상적으로 동작하는 것을 확인했다.

allowToChangeInstallationDirectory 기본 경로 설정
installer.nsh
!macro preInit
    SetRegView 64
    WriteRegExpandStr HKLM "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\MyApp"
    WriteRegExpandStr HKCU "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\MyApp"
    SetRegView 32
    WriteRegExpandStr HKLM "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\MyApp"
    WriteRegExpandStr HKCU "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\MyApp"
!macroend
  • SetRegView 64: 64비트 레지스트리 뷰 설정.
  • WriteRegExpandStr HKLM: HKLM(로컬 머신) 레지스트리에 설치 경로를 기록.
  • WriteRegExpandStr HKCU: HKCU(현재 사용자) 레지스트리에 설치 경로를 기록.
  • SetRegView 32: 32비트 레지스트리 뷰 설정 후 동일한 작업 수행.

위의 코드는 레지스트리 뷰 설정을 통해 기본 설치 경로를 설정할 수 있게 하는 것이다. 여기서 레지스트리 뷰란 64 비트와 32 비트 응용 프로그램이 각각 별도의 레지스트리를 바라 보게 영역이 나뉜 것이다.

그래서 SetRegView 코드로 뒤에 숫자에 해당하는 레지스트리 뷰 설정 준비를 하고 WriteRegExpandStr 명령어를 통해 레지스트리 키에 문자열을 등록할 수 있다. WriteRegExpandStr의 기본 명령어 형태는 다음과 같다.

WriteRegExpandStr <RootKey> <SubKey> <ValueName> <Value>

이 때, 위의 정리된 설명을 상세히 풀어보면 먼저 HKLM 는 로컬 머신, HKCU 는 현재 사용자에 해당 하는 영역의 레지스트리 키를 지정한다.

그리고 INSTALL_REGISTRY_KEY 라는 설치 프로그램이 설치 경로의 정보를 저장하기 위해 사용되는 레지스트리 키에 값을 설정하는 것이다.

만약 위의 NSIS 스크립트가 없다면, 설치 프로그램은 최초 설치 시 내가 설정한 경로를 기억 했다가 다시 설치 시 설치 했던 경로를 표시한다.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
목차
위로 스크롤