;-------------------------------- ;Include Modern UI !include "MUI2.nsh" ;-------------------------------- ;General ;These are defined in Ant script: ;!define APP_VER "4.0" ;!define APP_VER_MAJOR 4 ;!define APP_VER_MINOR 0 ;!define APP_URL "http://www.free-decompiler.com/flash/" ;!define APP_PUBLISHER "JPEXS" ;!define APP_NAME "JPEXS Free Flash Decompiler" !define APP_VERNAME "${APP_NAME} v. ${APP_VER}" !define MUI_WELCOMEFINISHPAGE_BITMAP "graphics\installer_164x314.bmp" !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP "graphics\installer_150x57.bmp" !define APP_UNINSTKEY "{E618D276-6596-41F4-8A98-447D442A77DB}_is1" SetCompressor /SOLID lzma ;Name and file Name "${APP_VERNAME}" OutFile "${APP_SETUPFILE}" ;Default installation folder InstallDir "$PROGRAMFILES\FFDec" ;Get installation folder from registry if available InstallDirRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" "InstallLocation" ;Request application privileges for Windows Vista RequestExecutionLevel admin ;-------------------------------- ;Interface Settings !define MUI_ABORTWARNING !include LogicLib.nsh ; Return on top of stack the total size of the selected (installed) sections, formated as DWORD ; Assumes no more than 256 sections are defined Var GetInstalledSize.total Function GetInstalledSize Push $0 Push $1 StrCpy $GetInstalledSize.total 0 ${ForEach} $1 0 256 + 1 ${if} ${SectionIsSelected} $1 SectionGetSize $1 $0 IntOp $GetInstalledSize.total $GetInstalledSize.total + $0 ${Endif} ; Error flag is set when an out-of-bound section is referenced ${if} ${errors} ${break} ${Endif} ${Next} ClearErrors Pop $1 Pop $0 IntFmt $GetInstalledSize.total "0x%08X" $GetInstalledSize.total Push $GetInstalledSize.total FunctionEnd Function GetTime !define GetTime `!insertmacro GetTimeCall` !macro GetTimeCall _FILE _OPTION _R1 _R2 _R3 _R4 _R5 _R6 _R7 Push `${_FILE}` Push `${_OPTION}` Call GetTime Pop ${_R1} Pop ${_R2} Pop ${_R3} Pop ${_R4} Pop ${_R5} Pop ${_R6} Pop ${_R7} !macroend Exch $1 Exch Exch $0 Exch Push $2 Push $3 Push $4 Push $5 Push $6 Push $7 ClearErrors StrCmp $1 'L' gettime StrCmp $1 'A' getfile StrCmp $1 'C' getfile StrCmp $1 'M' getfile StrCmp $1 'LS' gettime StrCmp $1 'AS' getfile StrCmp $1 'CS' getfile StrCmp $1 'MS' getfile goto error getfile: IfFileExists $0 0 error System::Call /NOUNLOAD '*(i,l,l,l,i,i,i,i,&t260,&t14) i .r6' System::Call /NOUNLOAD 'kernel32::FindFirstFileA(t,i)i(r0,r6) .r2' System::Call /NOUNLOAD 'kernel32::FindClose(i)i(r2)' gettime: System::Call /NOUNLOAD '*(&i2,&i2,&i2,&i2,&i2,&i2,&i2,&i2) i .r7' StrCmp $1 'L' 0 systemtime System::Call /NOUNLOAD 'kernel32::GetLocalTime(i)i(r7)' goto convert systemtime: StrCmp $1 'LS' 0 filetime System::Call /NOUNLOAD 'kernel32::GetSystemTime(i)i(r7)' goto convert filetime: System::Call /NOUNLOAD '*$6(i,l,l,l,i,i,i,i,&t260,&t14)i(,.r4,.r3,.r2)' System::Free /NOUNLOAD $6 StrCmp $1 'A' 0 +3 StrCpy $2 $3 goto tolocal StrCmp $1 'C' 0 +3 StrCpy $2 $4 goto tolocal StrCmp $1 'M' tolocal StrCmp $1 'AS' tosystem StrCmp $1 'CS' 0 +3 StrCpy $3 $4 goto tosystem StrCmp $1 'MS' 0 +3 StrCpy $3 $2 goto tosystem tolocal: System::Call /NOUNLOAD 'kernel32::FileTimeToLocalFileTime(*l,*l)i(r2,.r3)' tosystem: System::Call /NOUNLOAD 'kernel32::FileTimeToSystemTime(*l,i)i(r3,r7)' convert: System::Call /NOUNLOAD '*$7(&i2,&i2,&i2,&i2,&i2,&i2,&i2,&i2)i(.r5,.r6,.r4,.r0,.r3,.r2,.r1,)' System::Free $7 IntCmp $0 9 0 0 +2 StrCpy $0 '0$0' IntCmp $1 9 0 0 +2 StrCpy $1 '0$1' IntCmp $2 9 0 0 +2 StrCpy $2 '0$2' IntCmp $6 9 0 0 +2 StrCpy $6 '0$6' StrCmp $4 0 0 +3 StrCpy $4 Sunday goto end StrCmp $4 1 0 +3 StrCpy $4 Monday goto end StrCmp $4 2 0 +3 StrCpy $4 Tuesday goto end StrCmp $4 3 0 +3 StrCpy $4 Wednesday goto end StrCmp $4 4 0 +3 StrCpy $4 Thursday goto end StrCmp $4 5 0 +3 StrCpy $4 Friday goto end StrCmp $4 6 0 error StrCpy $4 Saturday goto end error: SetErrors StrCpy $0 '' StrCpy $1 '' StrCpy $2 '' StrCpy $3 '' StrCpy $4 '' StrCpy $5 '' StrCpy $6 '' end: Pop $7 Exch $6 Exch Exch $5 Exch 2 Exch $4 Exch 3 Exch $3 Exch 4 Exch $2 Exch 5 Exch $1 Exch 6 Exch $0 FunctionEnd ;-------------------------------- ;Pages !insertmacro MUI_PAGE_LICENSE "resources/license.txt" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY var SMDir !define MUI_STARTMENUPAGE_DEFAULTFOLDER "${APP_NAME}" !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKLM" !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Inno Setup: Icon Group" !insertmacro MUI_PAGE_STARTMENU 0 $SMDir !insertmacro MUI_PAGE_INSTFILES !define MUI_FINISHPAGE_RUN "$INSTDIR\ffdec.exe" !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES ;-------------------------------- ;Languages !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "Czech" ;-------------------------------- ;Installer Sections LangString Sec1Name ${LANG_ENGLISH} "FFDec" LangString Sec1Name ${LANG_CZECH} "FFDec" LangString Sec2Desktop ${LANG_ENGLISH} "Desktop Shortcut" LangString Sec2Desktop ${LANG_CZECH} "Zástupce na Ploše" Section !$(Sec1Name) SecDummy SetShellVarContext all SetOutPath "$INSTDIR" File "dist\ffdec.exe" File "dist\ffdec.bat" File "dist\ffdec.jar" File "dist\license.txt" SetOutPath "$INSTDIR" File /r "dist\lib" ;create start-menu items !insertmacro MUI_STARTMENU_WRITE_BEGIN 0 ;This macro sets $SMDir and skips to MUI_STARTMENU_WRITE_END if the "Don't create shortcuts" checkbox is checked... CreateDirectory "$SMPROGRAMS\$SMDir" CreateShortCut "$SMPROGRAMS\$SMDir\Uninstall ${APP_NAME}.lnk" "$INSTDIR\Uninstall.exe" "" "$INSTDIR\Uninstall.exe" 0 CreateShortCut "$SMPROGRAMS\$SMDir\${APP_NAME}.lnk" "$INSTDIR\ffdec.exe" "" "$INSTDIR\ffdec.exe" 0 !insertmacro MUI_STARTMENU_WRITE_END ;Store installation folder DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" "DisplayName" "${APP_NAME} (remove only)" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" "UninstallString" '"$INSTDIR\Uninstall.exe"' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" "QuietUninstallString" '"$INSTDIR\Uninstall.exe" /S' WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" "DisplayVersion" "${APP_VER}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" "URLInfoAbout" "${APP_URL}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" "URLUpdateInfo" "${APP_URL}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" "HelpLink" "${APP_URL}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" "Publisher" "${APP_PUBLISHER}" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" "InstallLocation" "$INSTDIR" WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" "Inno Setup: Icon Group" "$SMDir" Call GetInstalledSize WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" "EstimatedSize" $GetInstalledSize.total WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" "MajorVersion" ${APP_VER_MAJOR} WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" "MinorVersion" ${APP_VER_MINOR} ${GetTime} "" "L" $0 $1 $2 $3 $4 $5 $6 WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" "InstallDate" "$2$1$0" ;Create un1installer WriteUninstaller "$INSTDIR\Uninstall.exe" SectionEnd Section !$(Sec2Desktop) SetShellVarContext all CreateShortCut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\ffdec.exe" "" SectionEnd Function .onInit # set section 'test' as selected and read-only IntOp $0 ${SF_SELECTED} | ${SF_RO} SectionSetFlags ${SecDummy} $0 FunctionEnd ;-------------------------------- ;Descriptions ;Language strings LangString DESC_SecDummy ${LANG_ENGLISH} "Application GUI and Libraries" LangString DESC_SecDummy ${LANG_CZECH} "Aplikační rozhraní a knihovny" ;Assign language strings to sections !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} $(DESC_SecDummy) !insertmacro MUI_FUNCTION_DESCRIPTION_END ;-------------------------------- ;Uninstaller Section Section "Uninstall" SetShellVarContext all RMDir /r "$INSTDIR\*.*" Delete "$INSTDIR\Uninstall.exe" RMDir "$INSTDIR" ;Delete Start Menu Shortcuts Delete "$DESKTOP\${APP_NAME}.lnk" !insertmacro MUI_STARTMENU_GETFOLDER 0 $SMDir RmDir /r "$SMPROGRAMS\$SMDir\*.*" RMDir "$SMPROGRAMS\$SMDir" DeleteRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" SectionEnd