tool:nsis:sample
차이
문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판이전 판 | |||
tool:nsis:sample [2013/08/29 16:01] – [설치 파일 이름 일부를 읽어서, 동작 변경하도록] kieuns | 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" | ||
+ | </ |