관리 메뉴

ㄴrㅎnㅂrㄹrㄱi

애드온모음집 배포용 NSIS스크립트 본문

프로그래밍/NSIS

애드온모음집 배포용 NSIS스크립트

님투 2007. 12. 2. 20:50
반응형
  1. 애드온모음집 배포용 NSIS스크립트
  2.  
  3.  
  4.  
  5. # WOW Installer Script BooDoo v2.0 (WISB)
  6. # script by 부서진두개골
  7. # 2006.08.18
  8. # 불필요한 코드가 있거나 잘못된 코드가 있어도 이해하시길 바랍니다. 코딩은 처음이라..;;
  9. # 설명도 틀렸을지 모른답니다. ㅠㅠ
  10.  
  11. # 설치프로그램의 정보 설정 ------------------------------------------------------------
  12. ; 개인에 맞게 수정할 부분 !!!
  13. ; 밑으로 쭉 가시다 보면 "바로가기와 레지스트리 생성 섹션" 부분과 "제거 섹션" 부분도 수정하셔야 합니다.
  14. ; "기본 섹션"에 위치한 "파일 복사" 부분도 수정해야합니다. (기본 섹션)
  15. ; 현재는 기본 섹션만 있으니 추가 섹션은 "HM NIS Edit"의 스크립트 작성 마법사를 이용해보고 개인에 맞게 수정하시길 바랍니다.
  16. ; 나머지 궁금하신 점 있으시면 도움말을 참고 하시고 그래도 궁금하시다 하는 부분은 게시판에 글을 남겨 주시길 바랍니다.
  17.  
  18. ## 배포할 프로그램의 정보
  19. !define PRODUCT_NAME "부두UI" ;프로그램의 이름
  20. !define PRODUCT_VERSION "2.3 빌드0815" ;프로그램의 버전
  21. !define PRODUCT_PUBLISHER "부서진두개골" ;프로그램을 배포하는 사람
  22. !define PRODUCT_DIR_ROOT_REGKEY "HKLM" ;프로그램의 설치 정보를 넣을 레지스트리의 최상위 경로
  23. !define PRODUCT_DIR_REGKEY "Software\BooDooUI" ;프로그램의 설치 정보를 넣을 레지스트리의 하위 경로
  24. !define PRODUCT_UNINST_ROOT_KEY "HKLM" ;프로그램의 제거 정보를 넣을 레지스트리의 최상위 경로
  25. !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\BooDooUI" ;프로그램의 제거 정보를 넣을 레지스트리의 하위 경로
  26. ## 설치 프로그램의 아이콘과 배경 삽입
  27. !define MUI_ICON "wow.ico" ;설치 프로그램의 아이콘
  28. !define MUI_UNICON "wow_uninst.ico" ;제거 프로그램의 아이콘
  29. !define MUI_WELCOMEFINISHPAGE_BITMAP "wow_welcome.bmp" ;환영 페이지의 배경
  30. !define MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH ;환영 페이지의 배경을 늘리지 않음
  31. ## 설치 프로그램의 정보 설정
  32. OutFile "BooDooUI_2_3_0815_install.exe" ;설치 프로그램의 이름
  33. InstallDirRegKey HKLM "SOFTWARE\Blizzard Entertainment\World of Warcraft" "InstallPath" ;프로그램을 설치할 경로를 와우의 레지스트리에서 가져오기
  34. InstallDir $INSTDIR ;프로그램을 설치할 경로 설정
  35. Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" ;설치 프로그램의 상위에 주로 나올 제목
  36. BrandingText /TRIMRIGHT "${PRODUCT_NAME}" ;설치 프로그램의 하부에 가로줄과 함께 나올 텍스트
  37. ShowInstDetails show ;설치 페이지에서 설치 과정 보이기
  38. ShowUnInstDetails show ;제거 페이지에서 제거 과정 보이기
  39.  
  40.  
  41. # MUI 1.67 compatible : 매크로 삽입 ------------------------------------------------------------
  42. !include "MUI.nsh"
  43. !include "WordFunc.nsh"
  44. !insertmacro StrFilter
  45. !insertmacro WordFind
  46. !include "FileFunc.nsh"
  47. !insertmacro Locate
  48. !insertmacro un.Locate
  49. !insertmacro DirState
  50. !insertmacro un.DirState
  51.  
  52.  
  53. # Reserve Files : 사용자페이지의 정보파일 삽입 ------------------------------------------------------------
  54. ; These files should be inserted before other files in the data block
  55. ; Keep these lines before any File command
  56. ; Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA)
  57. ReserveFile "AccountInf.ini"
  58. !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
  59.  
  60.  
  61. # 전역 변수 선언 ------------------------------------------------------------
  62. Var VER
  63. Var INI_ACCOUNT
  64. Var INI_SERVER
  65. Var INI_CHARACTER
  66. Var INI_CLASS
  67. Var RE_ACCOUNT_TOTAL
  68. Var RE_ACCOUNT_NUM
  69.  
  70.  
  71. # 설치 프로그램이 나타나기 전에 수행할 함수 ------------------------------------------------------------
  72. Function .onInit
  73. ## 처음 스플래쉬 화면
  74.   ; the plugins dir is automatically deleted when the installer exits
  75.   ;InitPluginsDir
  76.   ;File /oname=$PLUGINSDIR\splash.bmp "logo.bmp"
  77.   ;File /oname=$PLUGINSDIR\splash.wav "C:\myprog\sound.wav"
  78.   ;advsplash::show 1000 600 400 0x04025C $PLUGINSDIR\splash
  79.   ;Pop $0 ;$0 has '1' if the user closed the splash screen early,
  80.           ;'0' if everything closed normally, and '-1' if some error occurred.
  81.   ;Delete $PLUGINSDIR\splash.bmp
  82.   ## Extract InstallOptions INI files
  83.   !insertmacro MUI_INSTALLOPTIONS_EXTRACT "AccountInf.ini" ;사용자 페이지 정보 파일 풀어놓기
  84.   Pop $VER
  85.   Pop $5
  86. ## 기존 버전이 있는지 확인
  87.   ReadRegStr "$5" "${PRODUCT_UNINST_ROOT_KEY}" "${PRODUCT_UNINST_KEY}" "DisplayVersion"
  88.   StrCmp "$5" "${PRODUCT_VERSION}" initA
  89.   StrCmp "$5" "" "0" initB
  90.   StrCpy "$VER" "0"
  91.   Goto end
  92. initA:
  93.   MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON1 "$(^Name) 가(이) 이미 설치되었습니다.$\n$\n다른 케릭터에 대한 설치를 진행하시겠습니까?" IDYES +2
  94.   Abort
  95. StrCpy "$VER" "1"
  96.   Goto end
  97. initB:
  98.   MessageBox MB_ICONEXCLAMATION|MB_YESNO|MB_DEFBUTTON1 "설치된 $(^Name) 의 버전이 설치할 것과 다릅니다.$\n$\n완전히 삭제하고 다시 설치하시겠습니까?$\n\n※구 버전은 BooDooUI_Old_(버전) 폴더에 백업합니다." IDYES +2
  99.   Abort
  100. StrCpy "$VER" "2"
  101. end:
  102.   Push $5
  103.   Push $VER
  104. FunctionEnd
  105.  
  106.  
  107. # 페이지 삽입 ------------------------------------------------------------
  108. ;!define MUI_ABORTWARNING ;설치/제거 도중 취소하면 경고
  109.  
  110. !insertmacro MUI_PAGE_WELCOME ;환영 페이지
  111. !insertmacro MUI_PAGE_LICENSE "License.txt" ;라이센스 페이지
  112.  
  113. Page custom AccountInfPage AccountInf ;사용자 정보 입력페이지
  114.  
  115.   Function AccountInfPage ;사용자 정보 입력페이지 보여주기
  116.     !insertmacro MUI_HEADER_TEXT "$(TEXT_IO_TITLE)" "$(TEXT_IO_SUBTITLE)"
  117.     !insertmacro MUI_INSTALLOPTIONS_DISPLAY "AccountInf.ini"
  118.   FunctionEnd
  119.  
  120.   Function AccountInf ;사용자 정보 입력페이지에 삽입될 함수
  121.   ### 입력된 사용자 정보 읽어와서 변수에 저장
  122.     !insertmacro MUI_INSTALLOPTIONS_READ $INI_ACCOUNT "AccountInf.ini" "Field 3" "State"
  123.     !insertmacro MUI_INSTALLOPTIONS_READ $INI_SERVER "AccountInf.ini" "Field 5" "State"
  124.     !insertmacro MUI_INSTALLOPTIONS_READ $INI_CHARACTER "AccountInf.ini" "Field 7" "State"
  125.     !insertmacro MUI_INSTALLOPTIONS_READ $INI_CLASS "AccountInf.ini" "Field 9" "State"
  126.  
  127.   ### 변수에 저장된 계정명 대문자로 변환
  128.     ${StrFilter} "$INI_ACCOUNT" "+" "" "" $INI_ACCOUNT
  129.  
  130.   ### 레지스트리 경로에 필요한 변수 저장
  131.     StrCpy $1 "${PRODUCT_DIR_REGKEY}\$INI_ACCOUNT\$INI_SERVER\$INI_CHARACTER"
  132.     StrCpy $2 "${PRODUCT_DIR_REGKEY}\$INI_ACCOUNT\$INI_SERVER"
  133.     StrCpy $3 "${PRODUCT_DIR_REGKEY}\$INI_ACCOUNT"
  134.  
  135.   ### 레지스트리에서 입력한 케릭터와 동일한 케릭터가 있을 경우 재설치 여부
  136.     ReadRegStr "$0" "${PRODUCT_DIR_ROOT_REGKEY}" "$1" "설치여부"
  137.     StrCmp $0 "" toReg
  138.     StrCmp $0 "no" 0 seekRe
  139.     MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "해당 케릭터는 이미 설치 예정입니다.$\n$\n예정을 취소하시겠습니까?" IDYES +2
  140.     abort
  141.     DeleteRegKey "${PRODUCT_DIR_ROOT_REGKEY}" "$1"
  142.     EnumRegKey "$9" "${PRODUCT_DIR_ROOT_REGKEY}" "$2" 0
  143.     StrCmp "$9" "" 0 clear
  144.     DeleteRegKey "${PRODUCT_DIR_ROOT_REGKEY}" "$2"
  145.     EnumRegKey "$9" "${PRODUCT_DIR_ROOT_REGKEY}" "$3" 0
  146.     StrCmp "$9" "" 0 clear
  147.     DeleteRegKey "${PRODUCT_DIR_ROOT_REGKEY}" "$3"
  148.     EnumRegKey "$9" "${PRODUCT_DIR_ROOT_REGKEY}" "${PRODUCT_DIR_REGKEY}" 0
  149.     StrCmp "$9" "" 0 clear
  150.     DeleteRegKey "${PRODUCT_DIR_ROOT_REGKEY}" "${PRODUCT_DIR_REGKEY}"
  151.     Goto clear
  152.   seekRe:
  153.     StrCmp $0 "re" +2
  154.     MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "해당 케릭터는 이미 설치 되었습니다.$\n$\n같은 케릭터를 재설치 하시게습니까?" IDNO +3
  155.     WriteRegExpandStr "${PRODUCT_DIR_ROOT_REGKEY}" "$1" "설치여부" "re"
  156.     Goto reReg
  157.     abort
  158.   ### 입력된 사용자 정보를 레지스트리로 만들기
  159.   toReg:
  160.     WriteRegExpandStr "${PRODUCT_DIR_ROOT_REGKEY}" "$1" "설치여부" "no"
  161.   reReg:
  162.     WriteRegExpandStr "${PRODUCT_DIR_ROOT_REGKEY}" "$1" "직업" "$INI_CLASS"
  163.   ### "설치할 케릭이 더 있는습니까"를 확인하고 있을 경우 기존 케릭 정보 삭제하고 페이지에 머무르기
  164.     MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "설치할 케릭이 더 있습니까?" IDNO end
  165.   clear:
  166.     !insertmacro MUI_INSTALLOPTIONS_READ $INI_CHARACTER "AccountInf.ini" "Field 7" "HWND"
  167.     !insertmacro MUI_INSTALLOPTIONS_READ $INI_CLASS "AccountInf.ini" "Field 9" "HWND"
  168.     SendMessage $INI_CHARACTER ${WM_SETTEXT} 0 "STR:"
  169.     SendMessage $INI_CLASS ${WM_SETTEXT} 0 "STR:"
  170.     abort
  171.  
  172.   end:
  173.   FunctionEnd
  174.  
  175. !insertmacro MUI_PAGE_COMPONENTS ;설치 항목 선택 페이지
  176. !insertmacro MUI_PAGE_DIRECTORY ;설치할 경로 선택 페이지
  177. !insertmacro MUI_PAGE_INSTFILES ;설치 페이지
  178. ;!define MUI_FINISHPAGE_NOAUTOCLOSE ;인스톨후 마지막페이지로 바로 넘어가지 않음
  179. !define MUI_FINISHPAGE_RUN "$INSTDIR\Launcher.exe" ;마지막페이지에서 실행할 프로그램
  180. !define MUI_FINISHPAGE_RUN_TEXT "월드오브워크래프트 실행하기" ;마지막페이지에서 실행할 프로그램의 설명
  181. !insertmacro MUI_PAGE_FINISH ;마지막 페이지
  182.  
  183. !insertmacro MUI_UNPAGE_INSTFILES ;제거 페이지
  184.  
  185.  
  186. # 언어 파일 설정 ------------------------------------------------------------
  187. ; 본 항목은 반드시 페이지 삽입 보다 뒤에 와야 합니다.
  188. ;!insertmacro MUI_LANGUAGE "English"
  189. !insertmacro MUI_LANGUAGE "Korean"
  190.  
  191.  
  192. # 사용자 정보 입력 페이지의 제목 ------------------------------------------------------------
  193. ; 본 항목은 반드시 언어 파일 설정 보다 뒤에 와야 합니다.
  194. LangString TEXT_IO_TITLE ${LANG_KOREAN} "사용자 정보 입력"
  195. LangString TEXT_IO_SUBTITLE ${LANG_KOREAN} "올바른 설치를 위해 사용자 정보를 입력하십시요."
  196.  
  197.  
  198. # 섹션 삽입 함수 ------------------------------------------------------------
  199.  
  200. Function WTFyn ;설치된 것과 중복되는 계정명이 있는지 검사
  201. Pop "$RE_ACCOUNT_TOTAL"
  202. StrCpy $1 0
  203. account:
  204.   EnumRegKey "$3" "${PRODUCT_DIR_ROOT_REGKEY}" "${PRODUCT_DIR_REGKEY}" $1
  205.   StrCmp "$3" "" end
  206.   IntOp $1 $1 + 1
  207.   StrCpy "$INI_ACCOUNT" "$3"
  208. StrCpy $4 0
  209. server:
  210.   StrCpy "$5" "${PRODUCT_DIR_REGKEY}\$INI_ACCOUNT"
  211.   EnumRegKey "$6" "${PRODUCT_DIR_ROOT_REGKEY}" "$5" $4
  212.   StrCmp "$6" "" account
  213.   IntOp $4 $4 + 1
  214.   StrCpy "$INI_SERVER" "$6"
  215. StrCpy $7 0
  216. character:
  217.   StrCpy "$8" "$5\$INI_SERVER"
  218.   EnumRegKey "$9" "${PRODUCT_DIR_ROOT_REGKEY}" "$8" $7
  219.   StrCmp "$9" "" server
  220.   IntOp $7 $7 + 1
  221.   StrCpy "$INI_CHARACTER" "$9"
  222.   StrCpy "$2" "$8\$INI_CHARACTER"
  223.   ReadRegStr "$0" "${PRODUCT_DIR_ROOT_REGKEY}" "$2" "설치여부"
  224.   StrCmp "$0" "yes" 0 +2
  225.   StrCpy "$RE_ACCOUNT_TOTAL" "$RE_ACCOUNT_TOTAL$\n$INI_ACCOUNT"
  226. ;  MessageBox MB_YESNO|MB_ICONQUESTION "RE_ACCOUNT_TOTAL 내용$\n$\n$RE_ACCOUNT_TOTAL$\n$\nMore?" IDNO end
  227.   Goto character
  228. end:
  229.   Push "$RE_ACCOUNT_TOTAL"
  230. FunctionEnd
  231.  
  232. Function OldUI ;data폴더에 patch-2.mpq를 제외한 다른 patch-?.mpq파일이 있는지 검사
  233.   StrCmp $R7 "patch-2.mpq" +3
  234.   StrCpy $R1 1
  235.   Goto +2
  236.   StrCpy $R1 -1
  237.   Push $R1
  238. FunctionEnd
  239.  
  240. Function PatchRename ;patch-?.mpq 중 patch-2.mpq 이 아닌 파일을 골라내어 백업하는 함수
  241.   Pop $6
  242.   StrCmp $R7 "patch-2.mpq" end
  243.   StrCmp $6 0 A
  244.   StrCmp $6 2 B
  245.   A:
  246.   Rename "$INSTDIR\Data\$R7" "$INSTDIR\Old\Data\$R7"
  247.   Goto end
  248.   B:
  249.   Rename "$INSTDIR\Data\$R7" "$INSTDIR\BooDooUI_Old_$5\Data\$R7"
  250.   Goto end
  251.   end:
  252.   Push $6
  253.   Push $0
  254. FunctionEnd
  255.  
  256. Function WTFLoop ;레지스트리에 생성된 사용자 정보에 따라 WTF폴더내 내용의 생성과 복사
  257. Pop "$RE_ACCOUNT_TOTAL"
  258. StrCpy $1 0
  259. account:
  260.   EnumRegKey "$3" "${PRODUCT_DIR_ROOT_REGKEY}" "${PRODUCT_DIR_REGKEY}" $1
  261.   StrCmp "$3" "" end
  262.   IntOp $1 $1 + 1
  263.   StrCpy "$INI_ACCOUNT" "$3"
  264. ;  MessageBox MB_YESNO|MB_ICONQUESTION "$INI_ACCOUNT$\n$\nMore?" IDNO end
  265. StrCpy $4 0
  266. server:
  267.   StrCpy "$5" "${PRODUCT_DIR_REGKEY}\$INI_ACCOUNT"
  268.   EnumRegKey "$6" "${PRODUCT_DIR_ROOT_REGKEY}" "$5" $4
  269.   StrCmp "$6" "" account
  270.   IntOp $4 $4 + 1
  271.   StrCpy "$INI_SERVER" "$6"
  272. ;  MessageBox MB_YESNO|MB_ICONQUESTION "$INI_ACCOUNT, $INI_SERVER$\n$\nMore?" IDNO end
  273. StrCpy $7 0
  274. character:
  275.   ClearErrors
  276.   StrCpy "$8" "$5\$INI_SERVER"
  277.   EnumRegKey "$9" "${PRODUCT_DIR_ROOT_REGKEY}" "$8" $7
  278.   StrCmp "$9" "" server
  279.   IntOp $7 $7 + 1
  280.   StrCpy "$INI_CHARACTER" "$9"
  281.   StrCpy "$2" "$8\$INI_CHARACTER"
  282.   ReadRegStr "$INI_CLASS" "${PRODUCT_DIR_ROOT_REGKEY}" "$2" "직업"
  283.   ReadRegStr "$0" "${PRODUCT_DIR_ROOT_REGKEY}" "$2" "설치여부"
  284.   StrCmp "$0" "yes" character install
  285. install:
  286. ;  MessageBox MB_YESNO|MB_ICONQUESTION "$INI_ACCOUNT, $INI_SERVER, $INI_CHARACTER, $INI_CLASS$\n$\nMore?" IDNO end
  287.   StrCmp "$0" "re" installAccount
  288.   ${WordFind} "$RE_ACCOUNT_TOTAL" "$INI_ACCOUNT" "#" $RE_ACCOUNT_NUM
  289. ;  MessageBox MB_YESNO|MB_ICONQUESTION "INI_ACCOUNT 가 RE_ACCOUNT_TOTAL 내용과 같은 개수$\n$\n$RE_ACCOUNT_NUM$\n$\nMore?" IDNO end
  290.   StrCmp $RE_ACCOUNT_NUM "no" installAccount installServer
  291. installAccount:
  292.   CreateDirectory "$INSTDIR\WTF\Account\$INI_ACCOUNT"
  293.   CopyFiles /FILESONLY "$INSTDIR\WTF\Account\계정명\*.*" "$INSTDIR\WTF\Account\$INI_ACCOUNT"
  294.   CopyFiles "$INSTDIR\WTF\Account\계정명\SavedVariables" "$INSTDIR\WTF\Account\$INI_ACCOUNT\SavedVariables"
  295. installServer:
  296.   CreateDirectory "$INSTDIR\WTF\Account\$INI_ACCOUNT\$INI_SERVER"
  297.   CopyFiles "$INSTDIR\WTF\Account\계정명\서버명\케릭명" "$INSTDIR\WTF\Account\$INI_ACCOUNT\$INI_SERVER\$INI_CHARACTER"
  298.   WriteRegExpandStr "${PRODUCT_DIR_ROOT_REGKEY}" "$2" "설치여부" "yes"
  299.   Goto character
  300. end:
  301.   Push "$RE_ACCOUNT_TOTAL"
  302. FunctionEnd
  303.  
  304.  
  305. # 기본 섹션 ------------------------------------------------------------
  306. Section "!필수 항목" Basic_SEC
  307.   SectionIn RO
  308.   SetOverwrite on
  309.   SetOutPath "$INSTDIR"
  310.   SetOverwrite on
  311.  
  312.   Call WTFyn
  313.  
  314. ;  MessageBox MB_OK|MB_ICONINFORMATION "변수VER$\n$\n$VER$\n$\nMore?"
  315.   StrCmp $VER 0 selA
  316.   StrCmp $VER 2 selB
  317.   StrCmp $VER 1 copy
  318.  
  319.   ## 기존에 있는 타 UI가 있는지 검사
  320.   selA:
  321.   Call OldUI
  322.   StrCpy $R1 -1
  323.   ${DirState} "$INSTDIR\Interface" $R1
  324. StrCmp $R1 1 backup
  325.   ${DirState} "$INSTDIR\WTF" $R1
  326. StrCmp $R1 1 backup
  327.   ${DirState} "$INSTDIR\Data\Fonts" $R1
  328. StrCmp $R1 1 backup
  329.   ${Locate} "$INSTDIR\Data" "/M=patch-?.mpq /G=0" "OldUI"
  330.   StrCmp $R1 -1 copy
  331.   StrCmp $R1 0 copy
  332.  
  333.   ## 기존에 있는 타 UI 백업 (Old 폴더에)
  334.   backup:
  335.   Call PatchRename
  336.   RMDir /r "$INSTDIR\Old"
  337.   CreateDirectory "$INSTDIR\Old"
  338.   CreateDirectory "$INSTDIR\Old\Data"
  339.   Rename "$INSTDIR\Interface" "$INSTDIR\Old\Interface"
  340.   Rename "$INSTDIR\WTF" "$INSTDIR\Old\WTF"
  341.   Rename "$INSTDIR\Data\Fonts" "$INSTDIR\Old\Data\Fonts"
  342.   ${Locate} "$INSTDIR\Data" "/M=patch-?.mpq /G=0" "PatchRename"
  343.   Goto copy
  344.  
  345.   ## 이전 버전 백업 (Old_버전 폴더에)
  346.   selB:
  347.   RMDir /r "$INSTDIR\${PRODUCT_NAME}_Old_$5"
  348.   CreateDirectory "$INSTDIR\${PRODUCT_NAME}_Old_$5"
  349.   CreateDirectory "$INSTDIR\${PRODUCT_NAME}_Old_$5\Data"
  350.   Rename "$INSTDIR\Interface" "$INSTDIR\${PRODUCT_NAME}_Old_$5\Interface"
  351.   Rename "$INSTDIR\WTF" "$INSTDIR\${PRODUCT_NAME}_Old_$5\WTF"
  352.   Rename "$INSTDIR\Data\Fonts" "$INSTDIR\${PRODUCT_NAME}_Old_$5\Data\Fonts"
  353.   ${Locate} "$INSTDIR\Data" "/M=patch-?.mpq /G=0" "PatchRename"
  354.  
  355.   copy:
  356.   ## 파일 복사
  357.   File /a /r "J:\wow\ui\NSIS\Basic\" ;필수 항목으로 집어넣을 파일이 위치한 경로입니다. 개인에 맞게 수정 !! (기본 섹션)
  358.  
  359.   ## 여러 케릭의 WTF폴더 설치 함수
  360.   Call WTFLoop
  361.  
  362.   ## 복사 원본 폴더 삭제
  363.   RMDir /r $INSTDIR\WTF\Account\계정명
  364. SectionEnd
  365.  
  366.  
  367. # 섹션에 대한 설명 ------------------------------------------------------------
  368. ; 개인에 맞게 수정해야 하는 부분 !!
  369. !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
  370.   !insertmacro MUI_DESCRIPTION_TEXT ${Basic_SEC} "글꼴, 텍스쳐, 액션바, 유닛프레임 등을 포함합니다."
  371. !insertmacro MUI_FUNCTION_DESCRIPTION_END
  372.  
  373.  
  374. # 바로가기와 레지스트리 생성 섹션 ------------------------------------------------------------
  375. ; 개인에 맞게 수정해야 하는 부분 !!
  376. Section -AdditionalIcons
  377.   CreateDirectory "$SMPROGRAMS\부두UI"
  378.   CreateShortCut "$SMPROGRAMS\부두UI\부두UI제거.lnk" "$INSTDIR\BooDooUI_uninst.exe"
  379.   CreateShortCut "$DESKTOP\부두UI제거.lnk" "$INSTDIR\BooDooUI_uninst.exe"
  380. SectionEnd
  381. Section -Post
  382.   WriteUninstaller "$INSTDIR\BooDooUI_uninst.exe"
  383.   WriteRegStr ${PRODUCT_DIR_ROOT_REGKEY} "${PRODUCT_DIR_REGKEY}" "Install_Dir" "$INSTDIR"
  384.   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
  385.   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\BooDooUI_uninst.exe"
  386.   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\BooDooUI_uninst.exe"
  387.   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
  388.   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
  389. WriteRegDWORD ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "NoModify" 1
  390. WriteRegDWORD ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "NoRepair" 1
  391. SectionEnd
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411. # 제거 함수 ------------------------------------------------------------
  412. Function un.onInit
  413.   MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(^Name) 을(를) 제거하시겠습니까?" IDYES +2
  414.   Abort
  415.   ${un.DirState} "$INSTDIR\Old" $R4
  416. StrCmp $R4 1 ynoldback
  417.   StrCpy $R4 0
  418.   Goto end
  419. ynoldback:
  420.   MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON1 "와우의 UI를 $(^Name) 설치 전으로 돌리시겠습니까?$\n$\n(피씨방 알바를 배려하기 위한 선택)" IDYES +2
  421.   StrCpy $R4 0
  422. end:
  423.   Push $R4
  424. FunctionEnd
  425.  
  426. Function un.PatchDelete
  427. ## patch-?.mpq 파일 삭제 시 patch-2.mpq 파일 삭제 방지를 위해 골라내는 함수
  428.   StrCmp $R7 "patch-2.mpq" +2
  429.   Delete "$R9"
  430.   Push $0
  431. FunctionEnd
  432.  
  433. Function un.PatchRenameInvert
  434. ## patch-?.mpq 파일 복구 시 patch-2.mpq 파일 복구 방지를 위해 골라내는 함수
  435.   StrCmp $R7 "patch-2.mpq" +2
  436.   Rename "$INSTDIR\Old\Data\$R7" "$INSTDIR\Data\$R7"
  437.   Push $0
  438. FunctionEnd
  439.  
  440. Function un.onUninstSuccess
  441.   HideWindow
  442.   MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 는(은) 완전히 제거되었습니다."
  443. FunctionEnd
  444.  
  445.  
  446. # 제거 섹션 ------------------------------------------------------------
  447. Section Uninstall
  448. ## 파일 삭제
  449.   RMDir /r "$INSTDIR\Interface"
  450.   RMDir /r "$INSTDIR\WTF"
  451.   RMDir /r "$INSTDIR\Data\Fonts"
  452.  
  453.   ${un.Locate} "$INSTDIR\Data" "/M=patch-?.mpq /G=0" "un.PatchDelete"
  454.  
  455. StrCmp $R4 1 0 nextU
  456.  
  457. ## 원래 설정으로
  458.   Rename "$INSTDIR\Old\Interface" "$INSTDIR\Interface"
  459.   Rename "$INSTDIR\Old\WTF" "$INSTDIR\WTF"
  460.   Rename "$INSTDIR\Old\Data\Fonts" "$INSTDIR\Data\Fonts"
  461.  
  462.   ${un.Locate} "$INSTDIR\Old\Data" "/M=patch-?.mpq /G=0" "un.PatchRenameInvert"
  463.   RMDir /r "$INSTDIR\Old"
  464.  
  465. nextU:
  466. ## 바로가기, 레지스트리 삭제
  467. ; 개인에 맞게 수정해야 하는 부분 !!
  468.   Delete "$DESKTOP\부두UI제거.lnk"
  469.   RMDir /r "$SMPROGRAMS\부두UI"
  470.  
  471.   Delete "$INSTDIR\BooDooUI_uninst.exe"
  472.   DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
  473.   DeleteRegKey ${PRODUCT_DIR_ROOT_REGKEY} "${PRODUCT_DIR_REGKEY}"
  474.  
  475.   SetAutoClose true
  476. SectionEnd
  477.  
  478.  
  479. 허낭군(bestsam)  
  •  
  • 반응형
    Comments