티스토리 뷰

Electron Windows Installer 실행 레지스트리 추가 하는 방법

Windows Installer로 설치를 실행할 때 레지스트리를 추가해야하는 경우가 있습니다.

저의 경우는 Electron으로 채팅앱을 만들면서, 웹소스들을 그대로 Android와 IOS로 들고와 앱으로 감싸는 시도를 하였습니다. Android와 IOS의 공통적인 앱과 통신 하는 방법으로 아래와 같은 코드로 커스텀 스킴을 사용하는 방법을 적용하게 되었습니다.

location.href='togethersTalk://setAlarm';


위와 같이 커스텀 스킴을 사용하여 코드를 작성하고 빌드를 하게되면 Mac에서는 문제가 발생하지 않는데.. Windows에서 프로그램을 설치하고 나면 아래와 같은 팝업이 똬 하고 떠버립니다...



이러한 현상 때문에 인스톨 시에 레지스트리를 추가하는 방법을 고민해야했습니다.

electron-builder를 이용하여 아래와 같은 옵션과 스크립트를 추가하면 해결을 할 수 있습니다.


electron-builder설명은 아래 포스트를 보시면 됩니다.
03.Electron 실행파일 만들기


1. package.json 에 옵션 추가

package.json파일에서 electron-builder옵션을 작성하는 build 옵션 하위에 아래의 내용을 추가합니다.

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

레지스트리를 추가하는 핵심 부분은 include 부분 입니다. "oneClick" 옵션은 실행하자마자 자동 설치 관련 옵션이고, "allowToChangeInstallationDirectory" 옵션은 oneClick 옵션을 false로 하고 디렉토리 변경을 허용하겠냐는 옵션입니다.


레지스트리를 추가하는 빌드 스크립트 경로를 include에서 지정하게 되는데요, nsis 하위 옵션에 script라는 옵션 또한 빌드 스크립트를 지정할 수 있는데 script 는 모든 인스톨러과정의 모든 스크립트 전체를 작성해야하는 듯 하였습니다. include 는 필요한 부분만 추가 가능하였습니다.


NSIS 스크립트도 검색해보면 너무 방대해서.. include옵션에 필요한 내용만 추가하는 방법을 선택하였습니다.


NSIS 관련 위키 내용



2. NSIS 빌드스크립트 작성

위에서 설명한 nsis옵션 하위 include 옵션에서 작성한 경로위치에 installer.nsh파일을 만들고 아래의 코드를 작성합니다.

!macro customInstall
    DetailPrint "Register togetherstalk URI Handler"
    DeleteRegKey HKCR "togetherstalk"
    WriteRegStr HKCR "togetherstalk" "" "URL:togetherstalk"
    WriteRegStr HKCR "togetherstalk" "URL Protocol" ""
    WriteRegStr HKCR "togetherstalk\DefaultIcon" "" "$INSTDIR\${APP_EXECUTABLE_FILENAME}"
    WriteRegStr HKCR "togetherstalk\shell" "" ""
    WriteRegStr HKCR "togetherstalk\shell\Open" "" ""
    WriteRegStr HKCR "togetherstalk\shell\Open\command" "" "$INSTDIR\${APP_EXECUTABLE_FILENAME} %1"
!macroend

저도 자세한 NSIS 스크립트에 관련하여 설명 드릴수는 없는데요 ㅜ 음 대략적으로 인스톨시에 레지스트리가 있다면 지우고 다시 등록하는 과정입니다. DeleteRegeKey가 레지스트리를 지우는 부분, WriteRegStr이 작성 부분,  Write첫번째 줄이 url 스킴을 등록하는 부분입니다. 사실 첫번째 작성 부분 빼고는 특별히 필요하지 않지만..여기 스크립트에서 원하는 부분에 레지스트리를 추가하시면 되겠습니다.


좋은 하루 보내세요~





댓글
댓글쓰기 폼