===== 기본 형식 ===== {{:tool:nsis: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"