각 사이트에 포함된 부분들에 대한 설명입니다.
아래의 내용은 목록 설명에 대한 예제 이며, 실핼 파일 예제가 있어 애드온을 만들때 활용을 할 수 있습니다.
ico 파일과 bmp에 대한 부분은 개인에 맞게 조정 변경하면 됩니다.
설치 화면에 대한 예제이며, 애드온을 만들었을때 진행을 설명하는 화면 입니다.
설치 애드온 만들기에 필요한 프로그램이며 nsis는 파일의 실행과 HM NIS Edit는 프로그램의 에디트를 돕습니다.
직접 해당 관련 사이트에서 다운로드 하여 사용하는것도 좋습니다.
nsi 파일에 대한 컴파일을 할 수 있는 설명 입니다.
WTF 애드온 폴더는 아래와 같이 하는것이 좋습니다.
save 폴더에 포함된 bak(백업) 파일은 삭제를 하여 무게를 줄이는 것도 좋습니다.
복사 원본 폴더를 삭제 할 경우 설명 입니다.
nsi로 만들어진 데이터에 대한 부분을 나열한 부분이며 어떻게 만들어지는지 보여지는 설명입니다.
스크립트 예제에 대한 설명입니다.
## 배포할 프로그램의 정보
!define PRODUCT_NAME "Character addition" ;프로그램의 이름
!define PRODUCT_VERSION "1.0" ;프로그램의 버전
!define PRODUCT_PUBLISHER "테스터" ;프로그램을 배포하는 사람
!define PRODUCT_DIR_ROOT_REGKEY "HKLM" ;프로그램의 설치 정보를 넣을 레지스트리의 최상위 경로
!define PRODUCT_DIR_REGKEY "Software${PRODUCT_NAME}" ;프로그램의 설치 정보를 넣을 레지스트리의 하위 경로
## 설치 프로그램의 아이콘과 배경 삽입
!define MUI_ICON "wow.ico" ;설치 프로그램의 아이콘 (사이즈 48 X 48)
!define MUI_HEADERIMAGE ; 설치 페이지의 오른쪽 상단 이미지 배경
!define MUI_HEADERIMAGE_BITMAP "RIGHT Head.BMP" ; 오른쪽 상단 이미지 배경 (167 X 47)
!define MUI_HEADERIMAGE_RIGHT
!define MUI_WELCOMEFINISHPAGE_BITMAP "wow_welcome.bmp" ;환영 페이지의 배경 (200 X 300)
!define MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH ;환영 페이지의 배경을 늘리지 않음
!define MUI_LICENSEPAGE_BGCOLOR /gray ; 라이센스의 화면색
## 설치 프로그램의 정보 설정
OutFile "${PRODUCT_NAME} ${PRODUCT_VERSION}.exe" ;설치 프로그램의 이름
InstallDirRegKey HKLM "SOFTWAREBlizzard EntertainmentWorld of Warcraft" "InstallPath" ;프로그램을 설치할 경로를 와우의 레지스트리에서 가져오기
InstallDir $INSTDIR ;프로그램을 설치할 경로 설정
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" ;설치 프로그램의 상위에 주로 나올 제목
BrandingText /TRIMRIGHT "${PRODUCT_NAME}" ;설치 프로그램의 하부에 가로줄과 함께 나올 텍스트
ShowInstDetails show ;설치 페이지에서 설치 과정 보이기
# MUI 1.67 compatible : 매크로 삽입 ------------------------------------------------------------
!include "MUI.nsh"
!include "WordFunc.nsh"
!include "Sections.nsh"
!insertmacro StrFilter
!insertmacro WordFind
!include "FileFunc.nsh"
ReserveFile "AccountInf.ini"
# Reserve Files : 사용자페이지의 정보파일 삽입 ------------------------------------------------------------
ReserveFile "AccountInf.ini"
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
# 전역 변수 선언 ------------------------------------------------------------
Var VER
Var INI_ACCOUNT
Var INI_SERVER
Var INI_CHARACTER
Var RE_ACCOUNT_TOTAL
Var RE_ACCOUNT_NUM
# 설치 프로그램이 나타나기 전에 수행할 함수 ------------------------------------------------------------
Function .onInit
## Extract InstallOptions INI files
!insertmacro MUI_INSTALLOPTIONS_EXTRACT "AccountInf.ini" ;사용자 페이지 정보 파일 풀어놓기
Pop $VER
Pop $5
## 기존 버전이 있는지 확인
StrCmp "$5" "${PRODUCT_VERSION}" initA
StrCpy "$VER" "0"
Goto end
initA:
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON1 "$(^Name) 가(이) 이미 설치되었습니다.$n$n다른 케릭터에 대한 설치를 진행하시겠습니까?" IDYES +2
Abort
StrCpy "$VER" "1"
Goto end
end:
Push $5
Push $VER
FunctionEnd
# 페이지 삽입 ------------------------------------------------------------
!insertmacro MUI_PAGE_WELCOME ;환영 페이지
!insertmacro MUI_PAGE_LICENSE "License.txt" ;라이센스 페이지
Page custom AccountInfPage AccountInf
Function AccountInfPage
!insertmacro MUI_HEADER_TEXT "$(TEXT_IO_TITLE)" "$(TEXT_IO_SUBTITLE)"
!insertmacro MUI_INSTALLOPTIONS_EXTRACT "AccountInf.ini"
!insertmacro MUI_INSTALLOPTIONS_DISPLAY "AccountInf.ini"
FunctionEnd
Function AccountInf
## 입력된 사용자 정보 읽어와서 변수에 저장
!insertmacro MUI_INSTALLOPTIONS_READ $INI_ACCOUNT "AccountInf.ini" "Field 3" "State"
!insertmacro MUI_INSTALLOPTIONS_READ $INI_SERVER "AccountInf.ini" "Field 5" "State"
!insertmacro MUI_INSTALLOPTIONS_READ $INI_CHARACTER "AccountInf.ini" "Field 7" "State"
## 변수에 저장된 계정명 대문자로 변환
${StrFilter} "$INI_ACCOUNT" "+" "" "" $INI_ACCOUNT
## 레지스트리 경로에 필요한 변수 저장
StrCpy $1 "${PRODUCT_DIR_REGKEY}$INI_ACCOUNT$INI_SERVER$INI_CHARACTER"
StrCpy $2 "${PRODUCT_DIR_REGKEY}$INI_ACCOUNT$INI_SERVER"
StrCpy $3 "${PRODUCT_DIR_REGKEY}$INI_ACCOUNT"
## 레지스트리에서 입력한 케릭터와 동일한 케릭터가 있을 경우 재설치 여부
ReadRegStr "$0" "${PRODUCT_DIR_ROOT_REGKEY}" "$1" "설치여부"
StrCmp $0 "" toReg
StrCmp $0 "no" 0 seekRe
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "해당 케릭터는 이미 설치 예정입니다.$n$n예정을 취소하시겠습니까?" IDYES +2
abort
DeleteRegKey "${PRODUCT_DIR_ROOT_REGKEY}" "$1"
EnumRegKey "$9" "${PRODUCT_DIR_ROOT_REGKEY}" "$2" 0
StrCmp "$9" "" 0 clear
DeleteRegKey "${PRODUCT_DIR_ROOT_REGKEY}" "$2"
EnumRegKey "$9" "${PRODUCT_DIR_ROOT_REGKEY}" "$3" 0
StrCmp "$9" "" 0 clear
DeleteRegKey "${PRODUCT_DIR_ROOT_REGKEY}" "$3"
EnumRegKey "$9" "${PRODUCT_DIR_ROOT_REGKEY}" "${PRODUCT_DIR_REGKEY}" 0
StrCmp "$9" "" 0 clear
DeleteRegKey "${PRODUCT_DIR_ROOT_REGKEY}" "${PRODUCT_DIR_REGKEY}"
Goto clear
seekRe:
StrCmp $0 "re" +2
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "해당 케릭터는 이미 설치 되었습니다.$n$n같은 케릭터를 재설치 하시게습니까?" IDNO +3
WriteRegExpandStr "${PRODUCT_DIR_ROOT_REGKEY}" "$1" "설치여부" "re"
Goto reReg
abort
## 입력된 사용자 정보를 레지스트리로 만들기
toReg:
WriteRegExpandStr "${PRODUCT_DIR_ROOT_REGKEY}" "$1" "설치여부" "no"
reReg:
WriteRegExpandStr "${PRODUCT_DIR_ROOT_REGKEY}" "$1" "직업" "$INI_CHARACTER"
## "설치할 케릭이 더 있는습니까"를 확인하고 있을 경우 기존 케릭 정보 삭제하고 페이지에 머무르기
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "설치할 케릭이 더 있습니까?" IDNO end
clear:
!insertmacro MUI_INSTALLOPTIONS_READ $INI_CHARACTER "AccountInf.ini" "Field 7" "HWND"
SendMessage $INI_CHARACTER ${WM_SETTEXT} 0 "STR:"
abort
end:
FunctionEnd
# 페이지 설정 -------------------------------------------------------------------------------
!insertmacro MUI_PAGE_COMPONENTS ;설치 항목 선택 페이지
!insertmacro MUI_PAGE_DIRECTORY ;설치할 경로 선택 페이지
!insertmacro MUI_PAGE_INSTFILES ;설치 페이지
!define MUI_FINISHPAGE_RUN "$INSTDIRWorld of Warcraft Launcher.exe" ;마지막페이지에서 실행할 프로그램
!define MUI_FINISHPAGE_RUN_TEXT "월드오브워크래프트 실행하기" ;마지막페이지에서 실행할 프로그램의 설명
!insertmacro MUI_PAGE_FINISH ;마지막 페이지
!insertmacro MUI_LANGUAGE "Korean" ; 언어 파일 국가
# 사용자 정보 입력 페이지의 제목 ------------------------------------------------------------
LangString TEXT_IO_TITLE ${LANG_KOREAN} "사용자 정보 입력"
LangString TEXT_IO_SUBTITLE ${LANG_KOREAN} "올바른 설치를 위해 사용자 정보를 입력하십시요."
# 섹션 삽입 함수 ------------------------------------------------------------
## 섹션 삽입 함수
Function WTFyn
Pop "$RE_ACCOUNT_TOTAL"
StrCpy $1 0
account:
EnumRegKey "$3" "${PRODUCT_DIR_ROOT_REGKEY}" "${PRODUCT_DIR_REGKEY}" $1
StrCmp "$3" "" end
IntOp $1 $1 + 1
StrCpy "$INI_ACCOUNT" "$3"
StrCpy $4 0
server:
StrCpy "$5" "${PRODUCT_DIR_REGKEY}$INI_ACCOUNT"
EnumRegKey "$6" "${PRODUCT_DIR_ROOT_REGKEY}" "$5" $4
StrCmp "$6" "" account
IntOp $4 $4 + 1
StrCpy "$INI_SERVER" "$6"
StrCpy $7 0
character:
StrCpy "$8" "$5$INI_SERVER"
EnumRegKey "$9" "${PRODUCT_DIR_ROOT_REGKEY}" "$8" $7
StrCmp "$9" "" server
IntOp $7 $7 + 1
StrCpy "$INI_CHARACTER" "$9"
StrCpy "$2" "$8$INI_CHARACTER"
ReadRegStr "$0" "${PRODUCT_DIR_ROOT_REGKEY}" "$2" "설치여부"
StrCmp "$0" "yes" 0 +2
StrCpy "$RE_ACCOUNT_TOTAL" "$RE_ACCOUNT_TOTAL$n$INI_ACCOUNT"
Goto character
end:
Push "$RE_ACCOUNT_TOTAL"
FunctionEnd
Function WTFLoop ;레지스트리에 생성된 사용자 정보에 따라 WTF폴더내 내용의 생성과 복사
Pop "$RE_ACCOUNT_TOTAL"
StrCpy $1 0
account:
EnumRegKey "$3" "${PRODUCT_DIR_ROOT_REGKEY}" "${PRODUCT_DIR_REGKEY}" $1
StrCmp "$3" "" end
IntOp $1 $1 + 1
StrCpy "$INI_ACCOUNT" "$3"
StrCpy $4 0
server:
StrCpy "$5" "${PRODUCT_DIR_REGKEY}$INI_ACCOUNT"
EnumRegKey "$6" "${PRODUCT_DIR_ROOT_REGKEY}" "$5" $4
StrCmp "$6" "" account
IntOp $4 $4 + 1
StrCpy "$INI_SERVER" "$6"
StrCpy $7 0
character:
ClearErrors
StrCpy "$8" "$5$INI_SERVER"
EnumRegKey "$9" "${PRODUCT_DIR_ROOT_REGKEY}" "$8" $7
StrCmp "$9" "" server
IntOp $7 $7 + 1
StrCpy "$INI_CHARACTER" "$9"
StrCpy "$2" "$8$INI_CHARACTER"
ReadRegStr "$0" "${PRODUCT_DIR_ROOT_REGKEY}" "$2" "설치여부"
StrCmp "$0" "yes" character install
install:
StrCmp "$0" "re" installAccount
${WordFind} "$RE_ACCOUNT_TOTAL" "$INI_ACCOUNT" "#" $RE_ACCOUNT_NUM
StrCmp $RE_ACCOUNT_NUM "no" installAccount
installAccount:
CreateDirectory "$INSTDIRWTFAccount$INI_ACCOUNT"
CreateDirectory "$INSTDIRWTFAccount$INI_ACCOUNTSavedVariables"
CopyFiles /FILESONLY "$INSTDIRWTFAccount계정명*.*" "$INSTDIRWTFAccount$INI_ACCOUNT"
CopyFiles /FILESONLY "$INSTDIRWTFAccount계정명SavedVariables*.*" "$INSTDIRWTFAccount$INI_ACCOUNTSavedVariables"
# CopyFiles /FILESONLY "$INSTDIROldWTFAccount$INI_ACCOUNTSavedVariablesBlinkCallMe.lua" "$INSTDIRWTFAccount$INI_ACCOUNTSavedVariablesBlinkCallMe.lua"
# CopyFiles /FILESONLY "$INSTDIROldWTFAccount$INI_ACCOUNTSavedVariablesClick2Cast.lua" "$INSTDIRWTFAccount$INI_ACCOUNTSavedVariablesClick2Cast.lua"
# CopyFiles /FILESONLY "$INSTDIROldWTFAccount$INI_ACCOUNTSavedVariablesTalented.lua" "$INSTDIRWTFAccount$INI_ACCOUNTSavedVariablesTalented.lua"
## 단축키,매크로 설정 복사
# CopyFiles /FILESONLY "$INSTDIROldWTFAccount$INI_ACCOUNTbindings-cache.wtf" "$INSTDIRWTFAccount$INI_ACCOUNTbindings-cache.wtf"
# CopyFiles /FILESONLY "$INSTDIROldWTFAccount$INI_ACCOUNTmacros-cache.txt" "$INSTDIRWTFAccount$INI_ACCOUNTmacros-cache.txt"
goto installserver
installServer:
CreateDirectory "$INSTDIRWTFAccount$INI_ACCOUNT$INI_SERVER"
CopyFiles "$INSTDIRWTFAccount계정명서버명케릭명" "$INSTDIRWTFAccount$INI_ACCOUNT$INI_SERVER$INI_CHARACTER"
## 개인매크로,단축키 설정 복사
# CopyFiles /FILESONLY "$INSTDIROldWTFAccount$INI_ACCOUNT$INI_SERVER$INI_CHARACTERmacros-cache.txt" "$INSTDIRWTFAccount$INI_ACCOUNT$INI_SERVER$INI_CHARACTERmacros-cache.txt"
# CopyFiles /FILESONLY "$INSTDIROldWTFAccount$INI_ACCOUNT$INI_SERVER$INI_CHARACTERbindings-cache.wtf" "$INSTDIRWTFAccount$INI_ACCOUNT$INI_SERVER$INI_CHARACTERbindings-cache.wtf"
# CopyFiles /FILESONLY "$INSTDIROldWTFAccount$INI_ACCOUNT$INI_SERVER$INI_CHARACTERchat-cache.txt" "$INSTDIRWTFAccount$INI_ACCOUNT$INI_SERVER$INI_CHARACTERchat-cache.txt"
CreateDirectory "$INSTDIRWTFAccount$INI_ACCOUNT$INI_SERVER$INI_CHARACTERSavedVariables"
# CopyFiles /FILESONLY "$INSTDIROldWTFAccount$INI_ACCOUNT$INI_SERVER$INI_CHARACTERSavedVariablesBlinkChatHead.lua" "$INSTDIRWTFAccount$INI_ACCOUNT$INI_SERVER$INI_CHARACTERSavedVariablesBlinkChatHead.lua"
WriteRegExpandStr "${PRODUCT_DIR_ROOT_REGKEY}" "$2" "설치여부" "yes"
goto character
end:
Push "$RE_ACCOUNT_TOTAL"
FunctionEnd
# 기본 섹션 ------------------------------------------------------------
Section "!캐릭터 추가" Basic_SEC
SectionIn RO
SetOverwrite on
SetOutPath "$INSTDIR"
SetOverwrite on
Call WTFyn
StrCmp $VER 1 copy
copy:
## 파일 복사
File /a /r "D:TestUITestUI" ;필수 항목으로 집어넣을 파일이 위치한 경로입니다. 개인에 맞게 수정 !! (기본 섹션)
## 여러 케릭의 WTF폴더 설치 함수
Call WTFLoop
SectionEnd
# 섹션에 대한 설명 ------------------------------------------------------------
; 개인에 맞게 수정해야 하는 부분 !!
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${Basic_SEC} "캐릭터에 대한 추가 설치"
!insertmacro MUI_FUNCTION_DESCRIPTION_END