## 배포할 프로그램의 정보
!define PRODUCT_NAME "HGG UI"
!define PRODUCT_VERSION "V2600"
!define PRODUCT_PUBLISHER "히구궁"
!define PRODUCT_DIR_ROOT_REGKEY "HKLM"
!define PRODUCT_DIR_REGKEY "Software${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
!define PRODUCT_UNINST_KEY "SoftwareMicrosoftWindowsCurrentVersionUninstall${PRODUCT_NAME}"
## 범용 설정
!define MUI_ICON "wow.ico"
!define MUI_UNICON "wow_uninst.ico"
!define MUI_WELCOMEFINISHPAGE_BITMAP "wow_welcome.BMP" ;(권장크기 200 X 300)
!define MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "wow_welcome.BMP"
!define MUI_UNWELCOMEFINISHPAGE_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
ShowUnInstDetails show
## 매크로 삽입
!include "MUI.nsh"
!include "WordFunc.nsh"
!include "Sections.nsh"
!include "WinMessages.nsh"
!insertmacro StrFilter
!insertmacro WordFind
!include "FileFunc.nsh"
!insertmacro DirState
!insertmacro un.DirState
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
## 기존 버전이 있는지 확인
ReadRegStr "$5" "${PRODUCT_UNINST_ROOT_KEY}" "${PRODUCT_UNINST_KEY}" "DisplayVersion"
StrCmp "$5" "${PRODUCT_VERSION}" initA
StrCmp "$5" "" "0" initB
StrCpy "$VER" "0"
Goto end
initA:
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON1 "해당 케릭터는 이미 설치 되었습니다.$n$n같은 케릭터를 재설치 하시게습니까?" IDYES +2
Abort
StrCpy "$VER" "1"
Goto end
initB:
MessageBox MB_ICONEXCLAMATION|MB_YESNO|MB_DEFBUTTON1 "설치된 $(^Name) 의 버전이 설치할 것과 다릅니다.$n$n완전히 삭제하고 다시 설치하시겠습니까?$n$n※구 버전은 Old 폴더에 백업합니다." IDYES +2
Abort
StrCpy "$VER" "2"
end:
Push $5
Push $VER
FunctionEnd
## 콤포넌트페이지 설정
!define MUI_COMPONENTSPAGE_TEXT_TOP "자신의 클래스/사양에 맞게 불필요한 애드온은 설치하지 않도록 꼼꼼히 따져보시기 바랍니다."
!define MUI_COMPONENTSPAGE_TEXT_DESCRIPTION_TITLE "세부항목"
## 디렉토리페이지 설정
!define MUI_DIRECTORYPAGE_TEXT_TOP "HGG UI 2600 애드온 패키지를 다음 폴더에 설치할 예정입니다.다른 폴더에 설치를 원하시면 '찾아보기'버튼을 눌러서 다른 폴더를 선택해주세요. 와우가 설치된 최상위 폴더만 선택하면 됩니다.하위 항목인 /interface/addns 까지 선택하실경우 제대로 설치되지 않습니다." ;페이지 상단에 출력할 문자열.
!insertmacro MUI_PAGE_WELCOME
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_UNPAGE_INSTFILES
## 언어 설정
!insertmacro MUI_LANGUAGE "Korean"
## 사용자 정보 입력 페이지의 제목
LangString TEXT_IO_TITLE ${LANG_KOREAN} "사용자 정보 입력"
LangString TEXT_IO_SUBTITLE ${LANG_KOREAN} "올바른 설치를 위해 사용자 정보를 입력받습니다."
## 섹션 삽입 함수
Function WTFyn ;레지스트리에 생성된 사용자 정보에 따라 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:
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
CopyFiles "E:HGGVar*.*" "$INSTDIR"
; CreateDirectory "$INSTDIRWTFAccount$INI_ACCOUNT"
; CreateDirectory "$INSTDIRWTFAccount$INI_ACCOUNTSavedVariables"
; CopyFiles /FILESONLY "$INSTDIRWTFAccount계정명*.*" "$INSTDIRWTFAccount$INI_ACCOUNT"
; CopyFiles /FILESONLY "$INSTDIRWTFAccount계정명SavedVariables*.*" "$INSTDIRWTFAccount$INI_ACCOUNTSavedVariables"
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 0 selA
StrCmp $VER 1 copy
## 기존에 있는 타 UI가 있는지 검사
selA:
StrCpy $R1 -1
${DirState} "$INSTDIRInterface" $R1
StrCmp $R1 1 backup
${DirState} "$INSTDIRWTF" $R1
StrCmp $R1 1 backup
StrCmp $R1 -1 copy
StrCmp $R1 0 copy
## 기존에 있는 타 UI 백업 (Old 폴더에)
backup:
RMDir /r "$INSTDIROld"
CreateDirectory "$INSTDIROld"
Rename "$INSTDIRInterface" "$INSTDIROldInterface"
Rename "$INSTDIRWTF" "$INSTDIROldWTF"
Goto copy
copy:
## 파일 복사
File /a /r "E:HGGUIUI"
## 여러 케릭의 WTF폴더 설치 함수
Call WTFLoop
## 복사 원본 폴더 삭제
RMDir /r $INSTDIRWTFAccount계정명
RMDir /r $INSTDIRvar
SectionEnd
SectionGroup "레이드" Raid_SEC
Section /o "공격대경보-DBM(무거움)" Raid01_SEC
SetOutPath "$INSTDIR"
File /a /r "E:HGGUIPackDBM"
SectionEnd
Section /o "Grid레이드프레임-Grid" Raid02_SEC
SetOutPath "$INSTDIR"
File /a /r "E:HGGUIPackGrid"
SectionEnd
SectionGroupEnd
SectionGroup "미터기" Meter_SEC
Section /o "Skada" Meter01_SEC
SetOutPath "$INSTDIR"
File /a /r "E:HGGUIMeterSkada"
SectionEnd
Section /o "Omen" Meter02_SEC
SetOutPath "$INSTDIR"
File /a /r "E:HGGUIMeterOmen"
SectionEnd
SectionGroupEnd
SectionGroup "아이템" ITEMinfo_SEC
Section /o "아이템인포-BLUEItemInfo3(무거움)" ITEMinfo01_SEC
SetOutPath "$INSTDIR"
File /a /r "E:HGGUIIteminfoBlueItemInfo3"
SectionEnd
SectionGroupEnd
Section /o "주둔지 도우미" Garrison_SEC
SetOutPath "$INSTDIR"
File /a /r "E:HGGUIGarrison"
SectionEnd
# 섹션에 대한 설명
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${Raid_SEC} "공격대 도우미 (BigWigs 및 레이드 프레임)"
!insertmacro MUI_DESCRIPTION_TEXT ${Raid01_SEC} "공격대 보스 경보 도우미 (매우 무거움)"
!insertmacro MUI_DESCRIPTION_TEXT ${Raid02_SEC} "(체력,마나,버프,디버프)강조 공격대 프레임 (메모리/CPU 점유율 높음)"
!insertmacro MUI_DESCRIPTION_TEXT ${Meter_SEC} "어그로 및 데미지 미터기 "
!insertmacro MUI_DESCRIPTION_TEXT ${Meter01_SEC} "데미지순위와 힐순위, DPS등을 알려줍니다. (메모리/CPU 점유율 높음)"
!insertmacro MUI_DESCRIPTION_TEXT ${Meter02_SEC} "어그로획득량을 알려줍니다."
!insertmacro MUI_DESCRIPTION_TEXT ${ITEMinfo_SEC} "아이템의 정보를 보여줍니다."
!insertmacro MUI_DESCRIPTION_TEXT ${ITEMinfo01_SEC} "아이템의 정보 및 드롭 위치를 보여줍니다."
!insertmacro MUI_DESCRIPTION_TEXT ${Garrison_SEC} "주둔지의 추종자 임무 확인 및 임무 자동화"
!insertmacro MUI_FUNCTION_DESCRIPTION_END
# 바로가기와 레지스트리 생성 섹션
Section -AdditionalIcons
CreateDirectory "$SMPROGRAMS${PRODUCT_NAME} ${PRODUCT_VERSION}"
CreateShortCut "$SMPROGRAMS${PRODUCT_NAME} ${PRODUCT_VERSION}${PRODUCT_NAME} ${PRODUCT_VERSION} 제거.lnk" "$INSTDIR${PRODUCT_NAME} ${PRODUCT_VERSION}_uninst.exe"
CreateShortCut "$SMPROGRAMS${PRODUCT_NAME} ${PRODUCT_VERSION}World of Warcraft 실행.lnk" "$INSTDIRLauncher.exe"
CreateShortCut "$DESKTOP${PRODUCT_NAME} ${PRODUCT_VERSION} 제거.lnk" "$INSTDIR${PRODUCT_NAME} ${PRODUCT_VERSION}_uninst.exe"
SectionEnd
Section -Post
WriteUninstaller "$INSTDIR${PRODUCT_NAME} ${PRODUCT_VERSION}_uninst.exe"
WriteRegStr ${PRODUCT_DIR_ROOT_REGKEY} "${PRODUCT_DIR_REGKEY}" "Install_Dir" "$INSTDIR"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR${PRODUCT_NAME} ${PRODUCT_VERSION}_uninst.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR${PRODUCT_NAME} ${PRODUCT_VERSION}_uninst.exe"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
WriteRegDWORD ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "NoModify" 1
WriteRegDWORD ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "NoRepair" 1
SectionEnd
## 제거 함수
Function un.onInit
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "$(^Name) 을(를) 제거하시겠습니까?" IDYES +2
Abort
${un.DirState} "$INSTDIROld" $R4
StrCmp $R4 1 ynoldback
StrCpy $R4 0
Goto end
ynoldback:
MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON1 "와우의 UI를 $(^Name) 설치 전으로 돌리시겠습니까?$n$n" IDYES +2
StrCpy $R4 0
end:
Push $R4
FunctionEnd
Function un.onUninstSuccess
HideWindow
MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) 는(은) 완전히 제거되었습니다."
FunctionEnd
## 제거 섹션
Section Uninstall
## 파일 삭제
RMDir /r "$INSTDIRInterface"
RMDir /r "$INSTDIRWTF"
RMDir /r "$INSTDIRFonts"
StrCmp $R4 1 0 nextU
## 원래 설정으로
Rename "$INSTDIROldInterface" "$INSTDIRInterface"
Rename "$INSTDIROldWTF" "$INSTDIRWTF"
RMDir /r "$INSTDIROld"
nextU:
## 바로가기, 레지스트리 삭제
Delete "$DESKTOP${PRODUCT_NAME} ${PRODUCT_VERSION} 제거.lnk"
RMDir /r "$SMPROGRAMS${PRODUCT_NAME} ${PRODUCT_VERSION}"
Delete "$INSTDIR${PRODUCT_NAME} ${PRODUCT_VERSION}_uninst.exe"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"
DeleteRegKey ${PRODUCT_DIR_ROOT_REGKEY} "${PRODUCT_DIR_REGKEY}"
SetAutoClose true
SectionEnd