tool:nsis:sample
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 다음 판 | 이전 판 | ||
| tool:nsis:sample [2012/10/02 15:40] – 바깥 편집기 127.0.0.1 | tool:nsis:sample [2024/04/23 22:44] (현재) – 바깥 편집 127.0.0.1 | ||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| + | ===== 기본 형식 ===== | ||
| + | {{: | ||
| + | |||
| + | ++++ 코드 펼치기 | | ||
| + | |||
| + | <code nsis> | ||
| + | # 반복되는 키워드를 DEFINE으로 설정 | ||
| + | !define PRODUCT_NAME " | ||
| + | |||
| + | # 언인스톨에서 사용할 DEFINE | ||
| + | !define PRODUCT_UNINST_ROOT_KEY " | ||
| + | !define PRODUCT_UNINST_KEY " | ||
| + | !define PRODUCT_UNINST_NAME " | ||
| + | |||
| + | # 컴파일 시간 - 파일 이름에 붙이려는 용도 | ||
| + | !define /date STR_DATE_NOW " | ||
| + | !define /date STR_TIME_NOW " | ||
| + | |||
| + | # 원본 파일 위치 | ||
| + | !define SRC_BEGIN_PATH " | ||
| + | !define SRC_FOLDER_PATH " | ||
| + | |||
| + | ; MUI 1.67 compatible ------ | ||
| + | !include " | ||
| + | ; MUI Settings | ||
| + | !define MUI_ABORTWARNING | ||
| + | #!define MUI_ICON " | ||
| + | !define MUI_UNICON " | ||
| + | # | ||
| + | #!define MUI_FINISHPAGE_RUN " | ||
| + | |||
| + | # 사용할 페이지들 | ||
| + | !insertmacro MUI_PAGE_WELCOME | ||
| + | # | ||
| + | !insertmacro MUI_PAGE_DIRECTORY | ||
| + | !insertmacro MUI_PAGE_INSTFILES | ||
| + | !insertmacro MUI_PAGE_FINISH | ||
| + | !insertmacro MUI_UNPAGE_INSTFILES | ||
| + | !insertmacro MUI_LANGUAGE " | ||
| + | # 설치 화면 왼쪽 하단의 nsis 로고 삭제 | ||
| + | BrandingText " " | ||
| + | ; MUI end ------ | ||
| + | |||
| + | Name " | ||
| + | OutFile " | ||
| + | InstallDir " | ||
| + | # 설치 과정 보여주기 | ||
| + | ShowInstDetails show | ||
| + | ShowUnInstDetails hide | ||
| + | RequestExecutionLevel admin | ||
| + | |||
| + | # | ||
| + | |||
| + | # | ||
| + | # " | ||
| + | # " | ||
| + | # " | ||
| + | ## " | ||
| + | ## ' | ||
| + | # | ||
| + | !macro CreateInternetShortcut FILENAME URL ICONFILE ICONINDEX | ||
| + | Delete " | ||
| + | WriteINIStr " | ||
| + | WriteINIStr " | ||
| + | WriteINIStr " | ||
| + | !macroend | ||
| + | |||
| + | # | ||
| + | |||
| + | # 바탕화면에 아이콘을 만들거나 인터넷 바로가기를 만들거나 | ||
| + | Function makeShortcutOrInternetshortcut | ||
| + | |||
| + | # 프로그램 그룹 만들기 | ||
| + | CreateDirectory " | ||
| + | # 프로그램 그룹에 언인스톨 링크 추가 | ||
| + | CreateShortCut " | ||
| + | # 프로그램 그룹에 내 프로그램 등록 | ||
| + | CreateShortCut " | ||
| + | |||
| + | # 바탕화면에 링크 만들기 | ||
| + | CreateShortCut " | ||
| + | # 인터넷 주소 | ||
| + | # | ||
| + | FunctionEnd | ||
| + | |||
| + | # | ||
| + | |||
| + | # 삭제용 매크로 | ||
| + | !macro removeAllFiles | ||
| + | RMDir /r " | ||
| + | DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} " | ||
| + | RMDir /r " | ||
| + | !macroend | ||
| + | |||
| + | # | ||
| + | |||
| + | # 설치할 파일을 어디에 설치할 것인지 알려주는 설치 주 스크립트 | ||
| + | Section | ||
| + | # 기존 설치 내용 삭제 | ||
| + | !insertmacro removeAllFiles | ||
| + | |||
| + | SetOverwrite try | ||
| + | SetOutPath " | ||
| + | File /r " | ||
| + | # 특정 파일을 무시하고 싶으면 | ||
| + | #File /r /x " | ||
| + | | ||
| + | Call MakeShortcutOrInternetshortcut | ||
| + | SectionEnd | ||
| + | |||
| + | # 파일 복사가 끝나면 필요한 작업 수행 - 언인스톨 정보 추가하기. | ||
| + | Section .onInstSuccess | ||
| + | ; SAVE UNISNTALL INFORMATION | ||
| + | WriteUninstaller " | ||
| + | |||
| + | WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} " | ||
| + | WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} " | ||
| + | WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} " | ||
| + | WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} " | ||
| + | WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} " | ||
| + | WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} " | ||
| + | |||
| + | Call makeShortcutOrInternetshortcut | ||
| + | SectionEnd | ||
| + | |||
| + | ; | ||
| + | ; Uninstall section | ||
| + | |||
| + | Function un.onUninstSuccess | ||
| + | HideWindow | ||
| + | MessageBox MB_ICONINFORMATION|MB_OK " | ||
| + | FunctionEnd | ||
| + | |||
| + | Function un.onInit | ||
| + | FunctionEnd | ||
| + | |||
| + | Section Uninstall | ||
| + | !insertmacro removeAllFiles | ||
| + | SetAutoClose true | ||
| + | SectionEnd | ||
| + | </ | ||
| + | |||
| + | ++++ | ||
| + | |||
| + | ===== 설치 파일 이름 일부를 읽어서, 동작 변경하도록 ===== | ||
| + | |||
| + | <code nsis> | ||
| + | #뒤의 세문자를 읽어서, 다음 동작을 결정한다. | ||
| + | Function MakeShortcutOrInternetshortcut | ||
| + | # $0 : 저장할 임시 변수 | ||
| + | # $EXEFILE : 설치파일 실행 이름 | ||
| + | # 3 : 복사할 최대 문자수는 3글자 | ||
| + | # -3 : 맨 끝에서부터 -3 글자 위치에서부터 복사 시작 | ||
| + | StrCpy $0 $EXEFILE 3 -3 | ||
| + | |||
| + | MessageBox MB_OK "get the : $0" | ||
| + | |||
| + | # $0에 저장된 문자가 ARA면 계속실행, | ||
| + | StrCmp $0 " | ||
| + | |||
| + | CreateShortCut " | ||
| + | goto done | ||
| + | nextOne: | ||
| + | # $0에 저장된 문자가 HGC면 계속 실행, 아니면 nextTwo으로 점프 | ||
| + | StrCmp $0 " | ||
| + | !insertmacro CreateInternetShortcut " | ||
| + | goto done | ||
| + | nextTwo: | ||
| + | # for later usage | ||
| + | MessageBox MB_OK "no choice" | ||
| + | done: | ||
| + | # done | ||
| + | FunctionEnd | ||
| + | </ | ||
| + | |||
| + | ===== 폴더 선택 대화상자를 출력하는 예 ===== | ||
| + | |||
| + | <code nsis> | ||
| + | # 레지스트리에서 폴더 위치를 읽어와야 하는데 못 읽는 경우, 폴더 선택 화면을 띄운다. | ||
| + | Var strGamePath ; | ||
| + | |||
| + | Function getGamePath | ||
| + | ReadRegStr $strGamePath HKCU " | ||
| + | StrCmp $strGamePath "" | ||
| + | Quit | ||
| + | InitFailed: | ||
| + | MessageBox MB_OK " | ||
| + | # 폴더 선택 대화 상자 열기 | ||
| + | nsDialogs:: | ||
| + | # 리턴값을 스택에서 받아오기 | ||
| + | Pop $strGamePath | ||
| + | # 빈 문자열이면 에러 처리 | ||
| + | StrCmp $strGamePath "" | ||
| + | MessageBox MB_OK "quit Install" | ||
| + | Quit | ||
| + | InitSuccess: | ||
| + | ; MessageBox MB_OK " | ||
| + | WriteRegStr HKCU " | ||
| + | ; go installation | ||
| + | FunctionEnd | ||
| + | </ | ||
| + | |||
| + | ===== 스트링에 줄바꾸기 추가 ===== | ||
| + | |||
| + | < | ||
| + | MessageBox MB_OK "1st line $\r$\n 2nd line" | ||
| + | </ | ||