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
'기타 > 유용한 것' 카테고리의 다른 글
[cmd] 명령어 정리하기 (0) | 2024.04.20 |
---|---|
[msbuild] cmd 혹은 bat (배치파일) 로 visual studio 빌드하기 (0) | 2024.03.26 |
SFTP 구축 및 연결 (freeFTPd, WinSCP/FileZilla) (0) | 2023.04.09 |