사용자 도구

사이트 도구


tool:nsis:sample

기본 형식

default.nsi

++++ 코드 펼치기 |

# 반복되는 키워드를 DEFINE으로 설정
!define PRODUCT_NAME				"sampleApp"
 
# 언인스톨에서 사용할 DEFINE
!define PRODUCT_UNINST_ROOT_KEY		"HKLM"
!define PRODUCT_UNINST_KEY			"Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_NAME			"${PRODUCT_NAME} Uninstall"
 
# 컴파일 시간 - 파일 이름에 붙이려는 용도
!define /date STR_DATE_NOW			"%Y%m%d"
!define /date STR_TIME_NOW			"%H%M"
 
# 원본 파일 위치
!define SRC_BEGIN_PATH				"."
!define SRC_FOLDER_PATH				"ReleaseFiles"
 
; MUI 1.67 compatible ------
!include "MUI2.nsh"
; MUI Settings
!define MUI_ABORTWARNING
#!define MUI_ICON					"${PRODUCT_NAME}.ico"
!define MUI_UNICON					"${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
#필요하면 되살리기 - 설치 종료후 앱 실행
#!define MUI_FINISHPAGE_RUN		"$INSTDIR\${PRODUCT_NAME}.exe"
 
# 사용할 페이지들
!insertmacro MUI_PAGE_WELCOME
#!insertmacro MUI_PAGE_LICENSE		"SWLicence.txt"
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
# 설치 화면 왼쪽 하단의 nsis 로고 삭제
BrandingText " "
; MUI end ------
 
Name					"${PRODUCT_NAME}"
OutFile					"${PRODUCT_NAME}-setup-(${STR_DATE_NOW}-${STR_TIME_NOW}).exe"
InstallDir				"$PROGRAMFILES\${PRODUCT_NAME}"
# 설치 과정 보여주기
ShowInstDetails			show
ShowUnInstDetails		hide
RequestExecutionLevel	admin    /* RequestExecutionLevel REQUIRED! */
 
#----------------------------------------------------------------------------------------------------------------------
 
#!insertmacro CreateInternetShortcut \
#  "$STARTMENU\NSIS homepage" \
#  "http://www.nsis.sf.net" \
#  "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" "0"
## "${FILENAME}.URL" --> URL extension must be capitalized. (Big arphabet), 
## '${FILENAME}.url' --> not worked, or worked strange.
#
!macro CreateInternetShortcut FILENAME URL ICONFILE ICONINDEX
Delete "${FILENAME}.URL"
WriteINIStr "${FILENAME}.URL" "InternetShortcut" "URL" "${URL}"
WriteINIStr "${FILENAME}.URL" "InternetShortcut" "IconFile" "${ICONFILE}"
WriteINIStr "${FILENAME}.URL" "InternetShortcut" "IconIndex" "${ICONINDEX}"
!macroend
 
#----------------------------------------------------------------------------------------------------------------------
 
# 바탕화면에 아이콘을 만들거나 인터넷 바로가기를 만들거나
Function makeShortcutOrInternetshortcut
 
	# 프로그램 그룹 만들기
	CreateDirectory "$SMPROGRAMS\${PRODUCT_NAME}"
	# 프로그램 그룹에 언인스톨 링크 추가
	CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_UNINST_NAME}.lnk" "$INSTDIR\${PRODUCT_NAME}-uninst.exe"
	# 프로그램 그룹에 내 프로그램 등록
	CreateShortCut "$SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_NAME}.exe"
 
	# 바탕화면에 링크 만들기
	CreateShortCut "$DESKTOP\${PRODUCT_NAME}.lnk" "$INSTDIR\${PRODUCT_NAME}.exe"
	# 인터넷 주소
	#!insertmacro CreateInternetShortcut "$DESKTOP\${STR_HANGAME_WEBURL_TITLE}" "${PRODUCT_HGC_WEB_SITE}" "$INSTDIR\${PRODUCT_ENG_NAME}.ico" "0" 
FunctionEnd
 
#----------------------------------------------------------------------------------------------------------------------
 
# 삭제용 매크로
!macro removeAllFiles
	RMDir /r "$INSTDIR"
	DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
	RMDir /r "$SMPROGRAMS\${PRODUCT_NAME}"
!macroend
 
#----------------------------------------------------------------------------------------------------------------------
 
# 설치할 파일을 어디에 설치할 것인지 알려주는 설치 주 스크립트
Section 
	# 기존 설치 내용 삭제
	!insertmacro removeAllFiles
 
	SetOverwrite try
	SetOutPath "$INSTDIR"
	File /r "${SRC_BEGIN_PATH}\${SRC_FOLDER_PATH}\*.*"
	# 특정 파일을 무시하고 싶으면
	#File /r /x "파일이름" "${SRC_BEGIN_PATH}\${SRC_FOLDER_PATH}\*.*"
 
	Call MakeShortcutOrInternetshortcut		
SectionEnd
 
# 파일 복사가 끝나면 필요한 작업 수행 - 언인스톨 정보 추가하기.
Section .onInstSuccess
	; SAVE UNISNTALL INFORMATION
	WriteUninstaller "$INSTDIR\${PRODUCT_NAME}-uninst.exe"
 
	WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
	WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\${PRODUCT_NAME}-uninst.exe"
	WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\${PRODUCT_NAME}.exe"
	WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${STR_DATE_NOW}"
	WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "http://www.google.com/"
	WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_NAME}"
 
	Call makeShortcutOrInternetshortcut	
SectionEnd
 
;------------------------------------------------------------------------------------------------------------------------------------------
; Uninstall section
 
Function un.onUninstSuccess
	HideWindow
	MessageBox MB_ICONINFORMATION|MB_OK "$(^Name)は削除されました。"
FunctionEnd
 
Function un.onInit
FunctionEnd
 
Section Uninstall
	!insertmacro removeAllFiles
	SetAutoClose true
SectionEnd

++++

설치 파일 이름 일부를 읽어서, 동작 변경하도록

#뒤의 세문자를 읽어서, 다음 동작을 결정한다.
Function MakeShortcutOrInternetshortcut
	# $0 : 저장할 임시 변수
	# $EXEFILE : 설치파일 실행 이름
	# 3 : 복사할 최대 문자수는 3글자
	# -3 : 맨 끝에서부터 -3 글자 위치에서부터 복사 시작
	StrCpy $0 $EXEFILE 3 -3
 
	MessageBox MB_OK "get the : $0"
 
	# $0에 저장된 문자가 ARA면 계속실행, 아니면 nextOne으로 점프
	StrCmp $0 "ARA" 0 nextOne
 
	CreateShortCut "$DESKTOP\${STR_GAME_NAME}.lnk" "$INSTDIR\${LAUNCHER_EXE_NAME}"
	goto done
nextOne:
	# $0에 저장된 문자가 HGC면 계속 실행, 아니면 nextTwo으로 점프
	StrCmp $0 "HGC" 0 nextTwo
	!insertmacro CreateInternetShortcut "$DESKTOP\${STR_GAME_NAME}" "${STR_WEB_SITE}" "$INSTDIR\${STR_GAME_NAME}.ico" "0"
	goto done
nextTwo:
	# for later usage
	MessageBox MB_OK "no choice"
done:
	# done 
FunctionEnd

폴더 선택 대화상자를 출력하는 예

# 레지스트리에서 폴더 위치를 읽어와야 하는데 못 읽는 경우, 폴더 선택 화면을 띄운다.
Var strGamePath		; game path
 
Function getGamePath
	ReadRegStr $strGamePath HKCU "Software\TestApp" "testapppath"
	StrCmp $strGamePath "" InitFailed InitSuccess
	Quit
InitFailed:
	MessageBox MB_OK "APP이 설치된 폴더를 찾을 수 없습니다. 폴더를 선택해주시길."
	# 폴더 선택 대화 상자 열기
	nsDialogs::SelectFolderDialog "ゲームが設置されたフォルダ選択" "$PROGRAMFILES\testapppath"
	# 리턴값을 스택에서 받아오기
	Pop $strGamePath
	# 빈 문자열이면 에러 처리
	StrCmp $strGamePath "" 0 InitSuccess
	MessageBox MB_OK "quit Install"
	Quit	
InitSuccess:	
	; MessageBox MB_OK "$strGamePath" ; (dbg msg)
	WriteRegStr HKCU "Software\TestApp" "testapppath" $strGamePath
	; go installation
FunctionEnd

스트링에 줄바꾸기 추가

MessageBox MB_OK "1st line $\r$\n 2nd line"
tool/nsis/sample.txt · 마지막으로 수정됨: 2024/04/23 22:44 저자 127.0.0.1