사용자 도구

사이트 도구


tool:nsis:sample

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
tool:nsis:sample [2013/08/29 16:01] – [설치 파일 이름 일부를 읽어서, 동작 변경하도록] kieunstool:nsis:sample [2024/04/23 22:44] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
 +===== 기본 형식 =====
  
 +{{:tool:nsis:default.nsi|}}
 +
 +++++ 코드 펼치기 |
 +
 +<code nsis>
 +# 반복되는 키워드를 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
 +</code>
 +
 +++++ 
 +
 +===== 설치 파일 이름 일부를 읽어서, 동작 변경하도록 =====
 +
 +<code nsis>
 +#뒤의 세문자를 읽어서, 다음 동작을 결정한다.
 +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
 +</code>
 +
 +===== 폴더 선택 대화상자를 출력하는 예 =====
 +
 +<code nsis>
 +# 레지스트리에서 폴더 위치를 읽어와야 하는데 못 읽는 경우, 폴더 선택 화면을 띄운다.
 +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
 +</code>
 +
 +===== 스트링에 줄바꾸기 추가 =====
 +
 +<code>
 +MessageBox MB_OK "1st line $\r$\n 2nd line"
 +</code>