NSIS : Nullsoft Scriptable Install System

 검색 창에 NSIS 를 치면 다운받아서 설치파일을 만들 수 있습니다.

인터넷 검색을 통해 기본적인 설치에 필요한 것들을 모아두었습니다.

절대 경로로 입력하거나 현재 .nsi 파일 위치를 기준으로 파일 등이 인식됩니다.

("License.txt" 같은 경우가 .nsi 파일과 함께 있는 경우입니다.)

#!define 명칭은 ${이름} 식으로 사용할 수 있습니다.
#주석은 " ; " , " # " , " /* */ " 입니다.

!define PRODUCT_FILENAME "MyProject"	# ${PRODUCT_FILENAME} 식으로 "MyProject" 문자열 사용이 가능합니다.
!define PRODUCT_NAME "Product"
!define PRODUCT_VERSION "22.08.10.1"
!define PRODUCT_PUBLISHER "MyHome"
!define PRODUCT_WEB_SITE "http://www.~~~.com"

#제어판에 삭제하기 등록하기 위한 레지스트리 경로입니다.
#!define PRODUCT_UNINST_ROOT_KEY "HKLM"

!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_FILENAME}"

!include "MUI.nsh"  	# Modern User Interface GUI 제공을 위해 사용해줍니다.
!include "LogicLib.nsh" 	# if, for 문 등을 사용하기 위해 선언 됩니다.

#!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"            #해당 경로 아이콘 사용 (기본값)
#!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"      #해당 경로 아이콘 사용 (기본값)

#각각의 순서도 중요합니다. 순서에 따라 인스톨 후 설정, 설정 후 인스톨 등이 진행될 수 있습니다.
!insertmacro MUI_PAGE_WELCOME          	         #환영메시지 (없으면 바로 설치 진행)
!insertmacro MUI_PAGE_LICENSE "License.txt" 	 #라이센스 파일이 있다면 등록하여 보여줍니다.

#!insertmacro MUI_PAGE_COMPONENTS 	#각 섹션마다 설치할지 말지 선택할 수 있게 보여줍니다.

!insertmacro MUI_PAGE_DIRECTORY		#파일 설치 위치 지정      $INSTDIR 이 됩니다.
!insertmacro MUI_PAGE_INSTFILES         #설치과정 페이지 (없으면 에러남)
!insertmacro MUI_PAGE_FINISH            #종료메시지 (없으면 설치 후 바로 종료)
!insertmacro MUI_LANGUAGE "korean"     	#언어 (가장 마지막에 써줘야 에러가 안난다고 합니다.)

#제어판에 등록할 이름 (아직 미사용)
Name "${PRODUCT_FILENAME} ${PRODUCT_VERSION}"

#프로그램 설치 파일 이름
OutFile "${PRODUCT_FILENAME}.exe"

#설치할 위치 $INSTDIR 을 통해 접근이 가능합니다.
InstallDir "C:\MyProject"

#설치 기본은 SilentInstall normal 이고 SilentInstall 모드면 백그라운드에서 진행되며
#트로이 목마로 인식된다고 합니다.
SilentInstall normal

#변수 선언 (변수 사용해보기 위해 선언했습니다.)
Var defaultPath

#Section + [옵션] + [섹션 이름] + [섹션 ID]
#https://wonsx.tistory.com/27?category=539749
Section "Install"

 StrCpy $defaultPath "$INSTDIR" #변수 defaultPath = $INSTDIR 로 설정해줍니다.
 
 #execwait 프로그램 실행 후 종료까지 기다립니다.
 #execwait ".\WindowsViewCapture.exe"

 SetOutPath "$defaultPath"   #Install 영역 설치 시 등록 된 파일들은 해당 폴더에 저장됩니다.
 SetOverwrite on               #덮어쓰기 모드

 #폴더 생성 (SetOutPath에 대해선 폴더가 자동으로 생성 됩니다.)
 # CreateDirectory "$defaultPath\Test1"

 #파일 등록  (.은 현재 위치 기준, 생략 해도 현재 위치 기준)
 File ".\Files\Test.exe"         # == "Files\Test.exe"

 #레지스트리 등록
/*
 HKCR or HKEY_CLASSES_ROOT
 HKLM or HKEY_LOCAL_MACHINE
 HKCU or HKEY_CURRENT_USER
 HKU or HKEY_USERS
 HKCC or HKEY_CURRENT_CONFIG
 HKDD or HKEY_DYN_DATA
 HKPD or HKEY_PERFORMANCE_DATA
 SHCTX or SHELL_CONTEXT
*/
 
 #shell open command 에 인자값 1개 받도록 입력 및 url protocol 생성
 WriteRegStr HKCR "${PRODUCT_FILENAME}\shell\open\command" "" "$\"$INSTDIR\Test.exe$\" $\"%1$\""
 WriteRegStr HKCR "${PRODUCT_FILENAME}" "URL Protocol" ""

 #실행 시 경고 메시지 뜨지 않게 설정해줍니다.
 WriteRegDWORD HKCU "Software\Microsoft\Internet Explorer\ProtocolExecute\${PRODUCT_FILENAME}" "WarnOnOpen" 00000000 

/* 파일이 있는 경우 설치 진행 or 취소 등
 
 iffileexists "경로" YES NO
 YES:
  ...
  goto END
 NO:
  ...
 END:
*/

 #제어판에서 삭제가 가능하도록 HKLM Uninstall 레지스트리를 등록해줍니다.
 WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\AppMainExe.exe"
 WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayName" "${PRODUCT_FILENAME}"
 WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
 WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
 WriteRegStr HKLM "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\Uninstall.exe"

 #삭제파일을 만들어줍니다.
 WriteUninstaller "$INSTDIR\Uninstall.exe"

 #완료 시 닫기
 #SetAutoClose true

SectionEnd

Section "ShortCut"
 #바로가기 생성 CreateShortCut "바로가기 만들 위치.lnk" "바로가기 만들 파일"
 CreateShortCut "$DESKTOP\TestShortCut.lnk" "$defaultPath\Test.exe" #파일 이름 변수로 주고 하면 될듯
SectionEnd

Function un.onUninstSuccess
  HideWindow
  MessageBox MB_ICONINFORMATION|MB_OK "${PRODUCT_FILENAME}는(은) 완전히 제거되었습니다."
FunctionEnd

Function un.onInit
  MessageBox MB_ICONQUESTION|MB_YESNO "${PRODUCT_FILENAME}를(을) 제거하시겠습니까?" IDYES pass
   Abort
pass:
FunctionEnd

#언인스톨러는 추가 된 모든 파일들을 직접 입력해서 삭제해주면 됩니다.
Section un.Uninstall

 #파일 삭제해주기 (파일이 추가 된 만큼 혹은 폴더 채로 삭제해줍니다)
 Delete "$INSTDIR\Test.exe"
 Delete "$INSTDIR\Uninstall.exe"
 Delete "$DESKTOP\TestShortCut.lnk"

 #레지스트리 내용 삭제
 #커스텀 URI 등록 삭제
 DeleteRegKey HKCR "${PRODUCT_FILENAME}"
 
 #실행 시 경고 메시지 안뜨게 하는거 삭제
 DeleteRegKey HKCU "Software\Microsoft\Internet Explorer\ProtocolExecute\${PRODUCT_FILENAME}"
 
 #제어판에 보여지는 레지스트리 삭제
 DeleteRegKey HKLM "${PRODUCT_UNINST_KEY}"

 #폴더 삭제 RMDir /r "$INSTDIR" 을 통해 폴더의 모든 파일들을 삭제해줄 수도 있습니다.
 RMDir "$INSTDIR"
 
 #자동으로 종료
 SetAutoClose true

SectionEnd

+ Recent posts