mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-05-23 05:04:54 +00:00
934 lines
24 KiB
NSIS
934 lines
24 KiB
NSIS
;--------------------------------
|
||
;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 JRE_VERSION "1.8"
|
||
!define APP_EXENAME "ffdec.exe"
|
||
|
||
!addplugindir "nsis_plugins\ansi\"
|
||
;!addplugindir "nsis_plugins\unicode\"
|
||
|
||
|
||
SetCompressor /SOLID lzma
|
||
;Java 8 Update 31 JRE
|
||
!define JRE_URL_32 "http://javadl.sun.com/webapps/download/AutoDL?BundleId=101406"
|
||
!define JRE_URL_64 "http://javadl.sun.com/webapps/download/AutoDL?BundleId=101408"
|
||
!include "nsis_plugins\JREDyna_Inetc.nsh"
|
||
|
||
!define FLASH_URL "http://download.macromedia.com/pub/flashplayer/current/support/install_flash_player_ax.exe"
|
||
!include "nsis_plugins\Flash_Inetc.nsh"
|
||
!include x64.nsh
|
||
|
||
|
||
!define APP_SHORTVERNAME "JPEXS FFDec v. ${APP_VER}"
|
||
|
||
!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"
|
||
|
||
|
||
|
||
|
||
|
||
;Name and file
|
||
Name "${APP_SHORTVERNAME}"
|
||
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
|
||
!define MUI_LANGDLL_ALLLANGUAGES
|
||
|
||
|
||
|
||
!define MUI_PAGE_CUSTOMFUNCTION_SHOW un.ModifyUnWelcome
|
||
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE un.LeaveUnWelcome
|
||
!insertmacro MUI_UNPAGE_WELCOME
|
||
!insertmacro MUI_UNPAGE_INSTFILES
|
||
|
||
|
||
|
||
!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
|
||
|
||
|
||
|
||
!define StrLoc "!insertmacro StrLoc"
|
||
|
||
!macro StrLoc ResultVar String SubString StartPoint
|
||
Push "${String}"
|
||
Push "${SubString}"
|
||
Push "${StartPoint}"
|
||
Call StrLoc
|
||
Pop "${ResultVar}"
|
||
!macroend
|
||
|
||
Function StrLoc
|
||
/*After this point:
|
||
------------------------------------------
|
||
$R0 = StartPoint (input)
|
||
$R1 = SubString (input)
|
||
$R2 = String (input)
|
||
$R3 = SubStringLen (temp)
|
||
$R4 = StrLen (temp)
|
||
$R5 = StartCharPos (temp)
|
||
$R6 = TempStr (temp)*/
|
||
|
||
;Get input from user
|
||
Exch $R0
|
||
Exch
|
||
Exch $R1
|
||
Exch 2
|
||
Exch $R2
|
||
Push $R3
|
||
Push $R4
|
||
Push $R5
|
||
Push $R6
|
||
|
||
;Get "String" and "SubString" length
|
||
StrLen $R3 $R1
|
||
StrLen $R4 $R2
|
||
;Start "StartCharPos" counter
|
||
StrCpy $R5 0
|
||
|
||
;Loop until "SubString" is found or "String" reaches its end
|
||
${Do}
|
||
;Remove everything before and after the searched part ("TempStr")
|
||
StrCpy $R6 $R2 $R3 $R5
|
||
|
||
;Compare "TempStr" with "SubString"
|
||
${If} $R6 == $R1
|
||
${If} $R0 == `<`
|
||
IntOp $R6 $R3 + $R5
|
||
IntOp $R0 $R4 - $R6
|
||
${Else}
|
||
StrCpy $R0 $R5
|
||
${EndIf}
|
||
${ExitDo}
|
||
${EndIf}
|
||
;If not "SubString", this could be "String"'s end
|
||
${If} $R5 >= $R4
|
||
StrCpy $R0 ``
|
||
${ExitDo}
|
||
${EndIf}
|
||
;If not, continue the loop
|
||
IntOp $R5 $R5 + 1
|
||
${Loop}
|
||
|
||
;Return output to user
|
||
Pop $R6
|
||
Pop $R5
|
||
Pop $R4
|
||
Pop $R3
|
||
Pop $R2
|
||
Exch
|
||
Pop $R1
|
||
Exch $R0
|
||
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
|
||
|
||
Function RIndexOf
|
||
Exch $R0
|
||
Exch
|
||
Exch $R1
|
||
Push $R2
|
||
Push $R3
|
||
|
||
StrCpy $R3 $R0
|
||
StrCpy $R0 0
|
||
IntOp $R0 $R0 + 1
|
||
StrCpy $R2 $R3 1 -$R0
|
||
StrCmp $R2 "" +2
|
||
StrCmp $R2 $R1 +2 -3
|
||
|
||
StrCpy $R0 -1
|
||
|
||
Pop $R3
|
||
Pop $R2
|
||
Pop $R1
|
||
|
||
Exch $R0
|
||
FunctionEnd
|
||
|
||
!macro StrRPos Var Str Char
|
||
Push "${Char}"
|
||
Push "${Str}"
|
||
Call RIndexOf
|
||
Pop $1
|
||
StrLen $0 ${Str}
|
||
IntOp ${Var} $0 - $1
|
||
!macroend
|
||
|
||
|
||
!define StrRPos "!insertmacro StrRPos"
|
||
|
||
;--------------------------------
|
||
;Pages
|
||
|
||
|
||
|
||
!insertmacro MUI_PAGE_LICENSE "resources/license.txt"
|
||
!insertmacro MUI_PAGE_COMPONENTS
|
||
!insertmacro MUI_PAGE_DIRECTORY
|
||
!insertmacro CUSTOM_PAGE_JREINFO
|
||
!insertmacro CUSTOM_PAGE_FLASHINFO
|
||
|
||
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
|
||
;Page custom CUSTOM_PAGE_CONTEXTMENU
|
||
!insertmacro MUI_PAGE_INSTFILES
|
||
Page custom CUSTOM_PAGE_HELPUS
|
||
!define MUI_FINISHPAGE_RUN "$INSTDIR\${APP_EXENAME}"
|
||
!insertmacro MUI_PAGE_FINISH
|
||
|
||
|
||
!insertmacro MUI_UNPAGE_CONFIRM
|
||
!insertmacro MUI_UNPAGE_INSTFILES
|
||
|
||
;--------------------------------
|
||
;Languages
|
||
|
||
!insertmacro MUI_LANGUAGE "English"
|
||
!insertmacro MUI_LANGUAGE "Czech"
|
||
!insertmacro MUI_LANGUAGE "SimpChinese"
|
||
!insertmacro MUI_LANGUAGE "Dutch"
|
||
!insertmacro MUI_LANGUAGE "French"
|
||
!insertmacro MUI_LANGUAGE "German"
|
||
!insertmacro MUI_LANGUAGE "Hungarian"
|
||
!insertmacro MUI_LANGUAGE "Polish"
|
||
!insertmacro MUI_LANGUAGE "Portuguese"
|
||
!insertmacro MUI_LANGUAGE "PortugueseBR"
|
||
!insertmacro MUI_LANGUAGE "Russian"
|
||
!insertmacro MUI_LANGUAGE "Spanish"
|
||
!insertmacro MUI_LANGUAGE "Swedish"
|
||
!insertmacro MUI_LANGUAGE "Ukrainian"
|
||
|
||
|
||
|
||
;--------------------------------
|
||
;Installer Sections
|
||
|
||
!macro IfKeyExists ROOT MAIN_KEY KEY
|
||
Push $R0
|
||
Push $R1
|
||
Push $R2
|
||
|
||
# XXX bug if ${ROOT}, ${MAIN_KEY} or ${KEY} use $R0 or $R1
|
||
|
||
StrCpy $R1 "0" # loop index
|
||
StrCpy $R2 "0" # not found
|
||
|
||
${Do}
|
||
EnumRegKey $R0 ${ROOT} "${MAIN_KEY}" "$R1"
|
||
${If} $R0 == "${KEY}"
|
||
StrCpy $R2 "1" # found
|
||
${Break}
|
||
${EndIf}
|
||
IntOp $R1 $R1 + 1
|
||
${LoopWhile} $R0 != ""
|
||
|
||
ClearErrors
|
||
|
||
Exch 2
|
||
Pop $R0
|
||
Pop $R1
|
||
Exch $R2
|
||
!macroend
|
||
|
||
Function HelpUsClick
|
||
ExecShell "Open" "http://www.free-decompiler.com/flash/help_us.html"
|
||
FunctionEnd
|
||
|
||
|
||
!define un.StrRep "!insertmacro un.StrRep"
|
||
!macro un.StrRep output string old new
|
||
Push `${string}`
|
||
Push `${old}`
|
||
Push `${new}`
|
||
Call un.StrRep
|
||
|
||
Pop ${output}
|
||
!macroend
|
||
|
||
|
||
!macro Func_StrRep un
|
||
Function ${un}StrRep
|
||
Exch $R2 ;new
|
||
Exch 1
|
||
Exch $R1 ;old
|
||
Exch 2
|
||
Exch $R0 ;string
|
||
Push $R3
|
||
Push $R4
|
||
Push $R5
|
||
Push $R6
|
||
Push $R7
|
||
Push $R8
|
||
Push $R9
|
||
|
||
StrCpy $R3 0
|
||
StrLen $R4 $R1
|
||
StrLen $R6 $R0
|
||
StrLen $R9 $R2
|
||
loop:
|
||
StrCpy $R5 $R0 $R4 $R3
|
||
StrCmp $R5 $R1 found
|
||
StrCmp $R3 $R6 done
|
||
IntOp $R3 $R3 + 1 ;move offset by 1 to check the next character
|
||
Goto loop
|
||
found:
|
||
StrCpy $R5 $R0 $R3
|
||
IntOp $R8 $R3 + $R4
|
||
StrCpy $R7 $R0 "" $R8
|
||
StrCpy $R0 $R5$R2$R7
|
||
StrLen $R6 $R0
|
||
IntOp $R3 $R3 + $R9 ;move offset by length of the replacement string
|
||
Goto loop
|
||
done:
|
||
|
||
Pop $R9
|
||
Pop $R8
|
||
Pop $R7
|
||
Pop $R6
|
||
Pop $R5
|
||
Pop $R4
|
||
Pop $R3
|
||
Push $R0
|
||
Push $R1
|
||
Pop $R0
|
||
Pop $R1
|
||
Pop $R0
|
||
Pop $R2
|
||
Exch $R1
|
||
FunctionEnd
|
||
!macroend
|
||
;!insertmacro Func_StrRep ""
|
||
!insertmacro Func_StrRep "un."
|
||
|
||
;var AddToContextMenu
|
||
/*
|
||
Function CUSTOM_PAGE_CONTEXTMENU
|
||
StrCpy $AddToContextMenu 1
|
||
nsDialogs::create /NOUNLOAD 1018
|
||
pop $1
|
||
!insertmacro MUI_HEADER_TEXT "Add to Context Menu" "Set up Context menu"
|
||
${NSD_CreateLabel} 0 0 100% 50 "You can add FFDec to right click context menu in Windows Explorer."
|
||
pop $1
|
||
${NSD_CreateCheckbox} 0 50 100% 25 "Add FFDec to context menu of SWF and GFX files"
|
||
pop $1
|
||
${NSD_SetState} $1 ${BST_CHECKED}
|
||
${NSD_OnClick} $1 AddContextClick
|
||
nsDialogs::Show
|
||
FunctionEnd
|
||
|
||
*/
|
||
|
||
/*
|
||
Function AddContextClick
|
||
pop $1
|
||
${NSD_GetState} $1 $AddToContextMenu
|
||
FunctionEnd
|
||
*/
|
||
Function CUSTOM_PAGE_HELPUS
|
||
|
||
nsDialogs::create /NOUNLOAD 1018
|
||
pop $1
|
||
|
||
|
||
!insertmacro MUI_HEADER_TEXT "Help us" "Do you know you can help us?"
|
||
${NSD_CreateLabel} 0 0 100% 50 "This whole decompiler is Free and OpenSource. If you want to support us, you can tell other people about our decompiler. Use link to our pages, share a word."
|
||
pop $1
|
||
${NSD_CreateLabel} 0 75 100% 50 "If you wish to express your appreciation for the time and resources the author has spent developing, we also do accept and appreciate monetary donations."
|
||
pop $1
|
||
${NSD_CreateLabel} 0 150 125 25 "Click here for more info:"
|
||
pop $1
|
||
${NSD_CreateButton} 130 145 75 25 "Help us!"
|
||
pop $1
|
||
${NSD_OnClick} $1 HelpUsClick
|
||
nsDialogs::Show
|
||
|
||
FunctionEnd
|
||
|
||
|
||
Function IndexOf
|
||
Exch $R0
|
||
Exch
|
||
Exch $R1
|
||
Push $R2
|
||
Push $R3
|
||
|
||
StrCpy $R3 $R0
|
||
StrCpy $R0 -1
|
||
IntOp $R0 $R0 + 1
|
||
StrCpy $R2 $R3 1 $R0
|
||
StrCmp $R2 "" +2
|
||
StrCmp $R2 $R1 +2 -3
|
||
|
||
StrCpy $R0 -1
|
||
|
||
Pop $R3
|
||
Pop $R2
|
||
Pop $R1
|
||
Exch $R0
|
||
FunctionEnd
|
||
|
||
!macro IndexOf Var Str Char
|
||
Push "${Char}"
|
||
Push "${Str}"
|
||
Call IndexOf
|
||
Pop "${Var}"
|
||
!macroend
|
||
!define IndexOf "!insertmacro IndexOf"
|
||
|
||
var clsname
|
||
!define VERB "ffdec"
|
||
!define VERBNAME "Open with FFDec"
|
||
!define ALPHABET "abcdefghijklmnopqrstuvwxyz"
|
||
var ext
|
||
var MRUList
|
||
var exists
|
||
|
||
|
||
!define REG_CLASSES_HKEY HKLM
|
||
|
||
Function un.RemoveExtContextMenu
|
||
pop $ext
|
||
DeleteRegKey ${REG_CLASSES_HKEY} "Software\Classes\Applications\${APP_EXENAME}"
|
||
ReadRegStr $clsname ${REG_CLASSES_HKEY} "Software\Classes\.$ext" ""
|
||
IfErrors step2
|
||
DeleteRegKey ${REG_CLASSES_HKEY} "Software\Classes\$clsname\shell\${VERB}"
|
||
step2:
|
||
ReadRegStr $MRUList HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\$ext\OpenWithList" "MRUList"
|
||
IfErrors step3
|
||
StrLen $0 $MRUList
|
||
${For} $R1 0 $0
|
||
StrCpy $2 $MRUList 1 $R1 ;Copy one character
|
||
ReadRegStr $3 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\$ext\OpenWithList" $2
|
||
${If} $3 == ${APP_EXENAME}
|
||
${un.StrRep} $MRUList $MRUList $2 ""
|
||
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\$ext\OpenWithList" "MRUList" $MRUList
|
||
DeleteRegValue HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\$ext\OpenWithList" $2
|
||
${Break}
|
||
${EndIf}
|
||
${Next}
|
||
step3:
|
||
DeleteRegKey ${REG_CLASSES_HKEY} "Software\Classes\SystemFileAssociations\.$ext\Shell\${VERB}"
|
||
FunctionEnd
|
||
|
||
|
||
|
||
|
||
Function AddToExtContextMenu
|
||
pop $ext
|
||
|
||
|
||
WriteRegStr ${REG_CLASSES_HKEY} "Software\Classes\Applications\${APP_EXENAME}\shell\open" "" ${VERB}
|
||
WriteRegStr ${REG_CLASSES_HKEY} "Software\Classes\Applications\${APP_EXENAME}\shell\open\command" "" '"$INSTDIR\${APP_EXENAME}" "%1"'
|
||
|
||
!insertmacro IfKeyExists ${REG_CLASSES_HKEY} "Software\Classes" ".$ext"
|
||
Pop $R0
|
||
${If} $R0 == 0
|
||
WriteRegStr ${REG_CLASSES_HKEY} "Software\Classes\.$ext" "" "ShockwaveFlash.ShockwaveFlash"
|
||
${EndIf}
|
||
|
||
ReadRegStr $clsname ${REG_CLASSES_HKEY} "Software\Classes\.$ext" ""
|
||
!insertmacro IfKeyExists ${REG_CLASSES_HKEY} "Software\Classes" $clsname
|
||
Pop $R0
|
||
${If} $R0 == 0
|
||
WriteRegStr ${REG_CLASSES_HKEY} "Software\Classes\$clsname" "" "Flash Movie"
|
||
${EndIf}
|
||
|
||
WriteRegStr ${REG_CLASSES_HKEY} "Software\Classes\$clsname\shell\${VERB}" "" "${VERBNAME}"
|
||
WriteRegStr ${REG_CLASSES_HKEY} "Software\Classes\$clsname\shell\${VERB}\command" "" '"$INSTDIR\${APP_EXENAME}" "%1"'
|
||
|
||
|
||
|
||
|
||
ReadRegStr $MRUList HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\$ext\OpenWithList" "MRUList"
|
||
IfErrors not_mru
|
||
StrLen $0 $MRUList
|
||
StrCpy $exists 0
|
||
${For} $R1 0 $0
|
||
StrCpy $2 $MRUList 1 $R1 ;Copy one character
|
||
ReadRegStr $2 HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\$ext\OpenWithList" $2
|
||
${If} $2 == ${APP_EXENAME}
|
||
StrCpy $exists 1
|
||
${Break}
|
||
${EndIf}
|
||
${Next}
|
||
${If} $exists == 0
|
||
StrLen $0 ${ALPHABET}
|
||
${For} $R1 0 $0
|
||
StrCpy $1 ${ALPHABET} 1 $R1
|
||
${IndexOf} $R0 $MRUList $1
|
||
${If} $R0 == -1
|
||
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\$ext\OpenWithList" $1 ${APP_EXENAME}
|
||
StrCpy $MRUList "$MRUList$1"
|
||
WriteRegStr HKCU "Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\$ext\OpenWithList" "MRUList" $MRUList
|
||
${Break}
|
||
${EndIf}
|
||
${Next}
|
||
${EndIf}
|
||
not_mru:
|
||
|
||
!insertmacro IfKeyExists ${REG_CLASSES_HKEY} "Software\Classes" "SystemFileAssociations"
|
||
Pop $R0
|
||
${If} $R0 == 1
|
||
!insertmacro IfKeyExists ${REG_CLASSES_HKEY} "Software\Classes\SystemFileAssociations\.$ext\Shell" ${VERB}
|
||
Pop $R0
|
||
${If} $R0 == 0
|
||
WriteRegStr ${REG_CLASSES_HKEY} "Software\Classes\SystemFileAssociations\.$ext\Shell\${VERB}" "" "${VERBNAME}"
|
||
WriteRegStr ${REG_CLASSES_HKEY} "Software\Classes\SystemFileAssociations\.$ext\Shell\${VERB}\Command" "" '"$INSTDIR\${APP_EXENAME}" "%1"'
|
||
${EndIf}
|
||
${EndIf}
|
||
FunctionEnd
|
||
|
||
|
||
Section "FFDec" SecDummy
|
||
|
||
SetShellVarContext all
|
||
|
||
SetOutPath "$INSTDIR"
|
||
|
||
File "dist\${APP_EXENAME}"
|
||
File "dist\ffdec.bat"
|
||
File "dist\ffdec.jar"
|
||
File "dist\icon.ico"
|
||
File "dist\license.txt"
|
||
|
||
SetOutPath "$INSTDIR"
|
||
File /r "dist\lib"
|
||
|
||
/*
|
||
${If} $AddToContextMenu == 1
|
||
|
||
|
||
|
||
${EndIf}
|
||
|
||
*/
|
||
;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\${APP_EXENAME}" "" "$INSTDIR\${APP_EXENAME}" 0
|
||
!insertmacro MUI_STARTMENU_WRITE_END
|
||
|
||
;Store installation folder
|
||
|
||
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}"
|
||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" "DisplayName" "${APP_NAME}"
|
||
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}" "DisplayIcon" '"$INSTDIR\${APP_EXENAME}"'
|
||
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"
|
||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}" "NSIS: Language" "$language"
|
||
|
||
|
||
|
||
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"
|
||
|
||
call DownloadAndInstallJREIfNecessary
|
||
call DownloadAndInstallFlashIfNecessary
|
||
|
||
SectionEnd
|
||
|
||
|
||
|
||
|
||
var txt
|
||
var pos
|
||
var pgfound
|
||
var f
|
||
var pgname
|
||
var pghtml
|
||
|
||
Section "Download PlayerGlobal.swc" SecPlayerGlobal
|
||
checkadobe:
|
||
DetailPrint "Checking Adobe site for newest PlayerGlobal.swc file"
|
||
GetTempFileName $pghtml
|
||
inetc::get /SILENT /USERAGENT "${APP_NAME} Setup" "https://www.adobe.com/support/flashplayer/downloads.html" "$pghtml"
|
||
Pop $0
|
||
StrCmp $0 "OK" dlok
|
||
MessageBox MB_ABORTRETRYIGNORE|MB_ICONSTOP "PlayerGlobal.SWC was not found on Adobe webpages. You can download it later manually." /SD IDIGNORE IDRETRY checkadobe IDIGNORE exit
|
||
;MessageBox MB_ABORTRETRYIGNORE|MB_ICONSTOP "PlayerGlobal.SWC was not found on Adobe webpages. You can download it later manually. (Error returned was: $0, tempfile: $pghtml)" /SD IDIGNORE IDRETRY checkadobe IDIGNORE exit
|
||
Abort
|
||
dlok:
|
||
|
||
StrCpy $pgfound 0
|
||
|
||
FileOpen $f "$pghtml" r
|
||
loop:
|
||
FileRead $f $txt
|
||
IfErrors done
|
||
StrCmp $pgfound 1 0 nolicheck
|
||
${StrLoc} $pos $txt "<li><a href=$\"" ">"
|
||
StrCmp $pos "" nolicheck
|
||
IntOp $pos $pos + 13
|
||
StrCpy $txt $txt "" $pos
|
||
${StrLoc} $pos $txt "$\"" ">"
|
||
StrCpy $txt $txt $pos
|
||
StrCpy $pgfound 2
|
||
Goto done
|
||
nolicheck:
|
||
${StrLoc} $pos $txt "PlayerGlobal" ">"
|
||
StrCmp $pos "" loop
|
||
StrCpy $pgfound 1
|
||
Goto loop
|
||
done:
|
||
FileClose $f
|
||
StrCmp $pgfound 2 +3
|
||
MessageBox MB_ABORTRETRYIGNORE|MB_ICONSTOP "PlayerGlobal.SWC was not found on Adobe webpages. You can download it later manually." /SD IDIGNORE IDRETRY checkadobe IDIGNORE exit
|
||
Abort
|
||
|
||
|
||
${StrRPos} $pos $txt "/"
|
||
IntOp $pos $pos + 1
|
||
StrCpy $pgname $txt "" $pos
|
||
SetShellVarContext current
|
||
|
||
IfFileExists "$APPDATA\JPEXS\FFDec\flashlib\$pgname" swcexists
|
||
CreateDirectory "$APPDATA\JPEXS\FFDec\flashlib"
|
||
DetailPrint "Starting download PlayerGlobal.swc"
|
||
inetc::get /USERAGENT "${APP_NAME} Setup" $txt "$APPDATA\JPEXS\FFDec\flashlib\$pgname"
|
||
Pop $0
|
||
StrCmp $0 "OK" saved
|
||
MessageBox MB_ABORTRETRYIGNORE|MB_ICONSTOP "Failed to download PlayerGlobal.SWC from Adobe webpages. You can download it later manually." /SD IDIGNORE IDRETRY checkadobe IDIGNORE exit
|
||
Abort
|
||
saved:
|
||
DetailPrint "PlayerGlobal.swc saved to $APPDATA\JPEXS\FFDec\flashlib\$pgname"
|
||
Goto exit
|
||
swcexists:
|
||
DetailPrint "$APPDATA\JPEXS\FFDec\flashlib\$pgname already exists, skipping download"
|
||
exit:
|
||
SectionEnd
|
||
|
||
Section "Desktop Shortcut"
|
||
SetShellVarContext all
|
||
CreateShortCut "$DESKTOP\${APP_NAME}.lnk" "$INSTDIR\${APP_EXENAME}" ""
|
||
SectionEnd
|
||
|
||
Function .onInit
|
||
!insertmacro MUI_LANGDLL_DISPLAY
|
||
IntOp $0 ${SF_SELECTED} | ${SF_RO}
|
||
SectionSetFlags ${SecDummy} $0
|
||
FunctionEnd
|
||
|
||
Section "Add to context menu" SecContextMenu
|
||
SetRegView 64
|
||
Push "swf"
|
||
Call AddToExtContextMenu
|
||
Push "gfx"
|
||
Call AddToExtContextMenu
|
||
|
||
SetRegView 32
|
||
Push "swf"
|
||
Call AddToExtContextMenu
|
||
Push "gfx"
|
||
Call AddToExtContextMenu
|
||
|
||
SectionEnd
|
||
|
||
;--------------------------------
|
||
;Descriptions
|
||
|
||
;Language strings
|
||
;LangString DESC_SecDummy ${LANG_ENGLISH} "Application GUI and Libraries"
|
||
;LangString DESC_SecDummy ${LANG_CZECH} "Aplika<6B>n<EFBFBD> rozhran<61> a knihovny"
|
||
|
||
;LangString DESC_PlayerGlobal ${LANG_ENGLISH} "Download FlashPlayer library from Adobe site - useful for ActionScript direct editation and other features"
|
||
;LangString DESC_PlayerGlobal ${LANG_CZECH} "St<53>hnout knihovnu FlashPlayeru ze str<74>nek Adobe - u<>ite<74>n<EFBFBD> pro p<><70>mou editaci ActionScriptu a dal<61><6C> v<>ci"
|
||
|
||
;Assign language strings to sections
|
||
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
|
||
!insertmacro MUI_DESCRIPTION_TEXT ${SecDummy} "Application GUI and Libraries"
|
||
!insertmacro MUI_DESCRIPTION_TEXT ${SecPlayerGlobal} "Download FlashPlayer library from Adobe site - useful for ActionScript direct editation and other features"
|
||
!insertmacro MUI_DESCRIPTION_TEXT ${SecContextMenu} "Adds FFDec to context menu of SWF and GFX files in windows explorer."
|
||
!insertmacro MUI_FUNCTION_DESCRIPTION_END
|
||
|
||
|
||
;LangString DESC_UninstLocal ${LANG_ENGLISH} "Remove user configuration"
|
||
;LangString DESC_UninstLocal ${LANG_CZECH} "Odstranit u<>ivatelskou konfiguraci"
|
||
|
||
|
||
|
||
|
||
Var mycheckbox
|
||
Var uninstlocal
|
||
|
||
Function un.ModifyUnWelcome
|
||
${NSD_CreateCheckbox} 120u -18u 50% 12u "Remove user configuration"
|
||
Pop $mycheckbox
|
||
SetCtlColors $mycheckbox "" ${MUI_BGCOLOR}
|
||
;${NSD_Check} $mycheckbox ; Check it by default
|
||
FunctionEnd
|
||
|
||
Function un.LeaveUnWelcome
|
||
StrCpy $uninstlocal 0
|
||
${NSD_GetState} $mycheckbox $0
|
||
${If} $0 <> 0
|
||
StrCpy $uninstlocal 1
|
||
${EndIf}
|
||
FunctionEnd
|
||
|
||
|
||
|
||
|
||
;--------------------------------
|
||
;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"
|
||
|
||
|
||
|
||
SetRegView 64
|
||
Push "swf"
|
||
Call un.RemoveExtContextMenu
|
||
Push "gfx"
|
||
Call un.RemoveExtContextMenu
|
||
|
||
SetRegView 32
|
||
Push "swf"
|
||
Call un.RemoveExtContextMenu
|
||
Push "gfx"
|
||
Call un.RemoveExtContextMenu
|
||
|
||
|
||
StrCmp $uninstlocal 1 0 +5
|
||
SetShellVarContext current
|
||
RmDir /r "$APPDATA\JPEXS\FFDec\*.*"
|
||
RmDir "$APPDATA\JPEXS\FFDec"
|
||
RmDir "$APPDATA\JPEXS"
|
||
|
||
DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\${APP_UNINSTKEY}"
|
||
|
||
SectionEnd
|