!include japversion.nsh Name JAP SetCompressor /SOLID lzma BrandingText "JAP - Anonymity is Not a Crime" ;Var secJavaName Var jrename Var detectedJre !addplugindir NSIS/Plugins !addincludedir NSIS/Include !include x64.nsh !include japMacros.nsh #Downloads a file with error handling... # $R0 src (url) # $R1 target (file) # $R2 -- if 0 warn the user if something goes wrong # if 1 do not warn on error Function DownloadFile # "Connecting ..." second minute hour s "%dkB (%d%%) of %dkB @ %d.%01dkB/s" "(%d %s%s remaining)" inetc::get /caption "JAP" /TRANSLATE "$(inetcDown)" "$(inetcConn)" "$(inetcSecond)" "$(inetcMinute)" "$(inetcHour)" "$(inetcS)" "$(inetcSpeed)" "$(inetcRemain)" $R0 $R1 Pop $0 StrCmp $0 "OK" dlok inetc::get /caption "JAP" /TRANSLATE "$(inetcDown)" "$(inetcConn)" "$(inetcSecond)" "$(inetcMinute)" "$(inetcHour)" "$(inetcS)" "$(inetcSpeed)" "$(inetcRemain)" $R0 $R1 /NOPROXY Pop $0 StrCmp $0 "OK" dlok IntCmp $R2 1 dlok MessageBox MB_OK|MB_ICONEXCLAMATION "$(inetcError)" /SD IDOK Abort dlok: FunctionEnd # Defines !define REGKEY "SOFTWARE\$(^Name)" !define COMPANY JAP-Team !define URL http://anon.inf.tu-dresden.de/ # MUI defines !define MUI_ICON Data\jap.ico !define MUI_FINISHPAGE_NOAUTOCLOSE !define MUI_STARTMENUPAGE_REGISTRY_ROOT HKLM !define MUI_STARTMENUPAGE_NODISABLE !define MUI_STARTMENUPAGE_REGISTRY_KEY Software\JAP !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME StartMenuGroup !define MUI_STARTMENUPAGE_DEFAULT_FOLDER JAP !define MUI_UNICON Data\jap.ico !define MUI_UNFINISHPAGE_NOAUTOCLOSE !define MUI_LANGDLL_REGISTRY_ROOT HKLM !define MUI_LANGDLL_REGISTRY_KEY ${REGKEY} !define MUI_LANGDLL_REGISTRY_VALUENAME InstallerLanguage # Included files !include Sections.nsh !include MUI2.nsh # Reserved Files !insertmacro MUI_RESERVEFILE_LANGDLL #ReserveFile "${NSISDIR}\Plugins\AdvSplash.dll" # Variables Var StartMenuGroup #interface configuration !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_BITMAP "Data\Background.bmp" !define MUI_ABORTWARNING !define MUI_HEADERIMAGE_RIGHT # Installer pages ;!insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_STARTMENU Application $StartMenuGroup !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES # Installer languages !insertmacro MUI_LANGUAGE English !insertmacro MUI_LANGUAGE German # Installer attributes OutFile japsetup.exe InstallDir $PROGRAMFILES\JAP CRCCheck on XPStyle on ShowInstDetails hide VIProductVersion 0.${VERSION_MAJOR}.${VERSION_MINOR}.0 VIAddVersionKey ProductName JAP VIAddVersionKey ProductVersion "${VERSION}" VIAddVersionKey CompanyName "${COMPANY}" VIAddVersionKey Website "${URL}" VIAddVersionKey FileVersion "${VERSION}" VIAddVersionKey FileDescription "JAP Setup" VIAddVersionKey LegalCopyright "" InstallDirRegKey HKLM "${REGKEY}" Path ShowUninstDetails hide !include ZipDll.nsh # Installer sections Section "JAP" SEC0000 SetOutPath $INSTDIR SetOverwrite on # inetc::get /caption "JAP" "http://anon.inf.tu-dresden.de/jap/JAP.jar" "$INSTDIR\JAP.jar" "http://anon.inf.tu-dresden.de/win/jap.exe" "$INSTDIR\jap.exe" "http://anon.inf.tu-dresden.de/win/japdll.dll" "$INSTDIR\japdll.dll" # Pop $0 # StrCmp $0 "OK" dlok # MessageBox MB_OK|MB_ICONEXCLAMATION "Download Error $0, click OK to abort installation" /SD IDOK # Abort #dlok: Strcpy $R0 "http://anon.inf.tu-dresden.de/jap/JAP.jar" StrCpy $R1 "$INSTDIR\JAP.jar" push 0 pop $R2 call DownloadFile ${If} ${RunningX64} ${AndIf} $is64bitJava == "true" Strcpy $R0 "http://anon.inf.tu-dresden.de/win/x64/jap.exe" ${Else} Strcpy $R0 "http://anon.inf.tu-dresden.de/win/jap.exe" ${EndIf} StrCpy $R1 "$INSTDIR\jap.exe" call DownloadFile Strcpy $R0 "http://anon.inf.tu-dresden.de/win/japdll.dll" StrCpy $R1 "$INSTDIR\japdll.dll" push 1 pop $R2 #if download of japdll.dll fails --> no problem.... call DownloadFile ${If} ${RunningX64} Strcpy $R0 "http://anon.inf.tu-dresden.de/win/x64/japdll_x64.dll" StrCpy $R1 "$INSTDIR\japdll_x64.dll" push 1 pop $R2 #if download of japdll.dll fails --> no problem.... call DownloadFile ${EndIf} WriteRegStr HKLM "${REGKEY}\Components" Main 1 !insertmacro MUI_STARTMENU_WRITE_BEGIN Application SetShellVarContext current CreateDirectory $SMPROGRAMS\$StartMenuGroup SetOutPath $INSTDIR CreateShortcut "$SMPROGRAMS\$StartMenuGroup\JAP.lnk" $INSTDIR\jap.exe SetShellVarContext all CreateDirectory $SMPROGRAMS\$StartMenuGroup SetOutPath $INSTDIR CreateShortcut "$SMPROGRAMS\$StartMenuGroup\JAP.lnk" $INSTDIR\jap.exe !insertmacro MUI_STARTMENU_WRITE_END SectionEnd Section /o "Swing" secSwing SetOutPath $INSTDIR SetOverwrite on Strcpy $R0 "http://anon.inf.tu-dresden.de/jap/swingall.jar" StrCpy $R1 "$INSTDIR\swingall.jar" push 0 pop $R2 call DownloadFile SectionEnd Section "jre" secJava SetOutPath $TEMP SetOverwrite on Strcpy $R0 "http://anon.inf.tu-dresden.de/win/$jrename" StrCpy $R1 "$TEMP\jre.zip" push 0 pop $R2 call DownloadFile SetOutPath $INSTDIR\jre !insertmacro ZIPDLL_EXTRACT $TEMP\jre.zip $INSTDIR\jre "" SectionEnd ;-------------------------------- ;Descriptions ;Language strings ;LangString DESC_SecJAP ${LANG_ENGLISH} "This will install the JAP. You must have installed Java version 1.1 or above." ;LangString DESC_SecJAP ${LANG_GERMAN} "Der JAP. Zum Ausführen des JAP wird Java Version 1.1 oder höher benötigt." ;LangString DESC_SecSwing ${LANG_ENGLISH} "This will install the Swing-Library. This library is only necessary if you do not have Java version 1.2 or higher installed. Use this option, if you get an error message, which tells you, that you need to install the Swing-Library." ;LangString DESC_SecSwing ${LANG_GERMAN} "Die Swing-Bibliothek. Sie ist zum Ausführen von JAP notwendig und in Java ab Version 1.2 bereits enthalten. Installieren Sie diese Bibliothek, wenn Sie beim Starten von JAP eine entsprechende Fehlermeldung erhalten." ;LangString DESC_SecJAVA ${LANG_ENGLISH} "The Java Runtime Environment neccessary to run JAP." ;LangString DESC_SecJAVA ${LANG_GERMAN} "Die Java Laufzeitumgebung. Diese ist notwendig, um JAP zu starten." #Translation for inetc plugin... # "" second minute hour s "%dkB (%d%%) of %dkB @ %d.%01dkB/s" "(%d %s%s remaining)" LangString inetcDown ${LANG_ENGLISH} "Downloading %s" LangString inetcDown ${LANG_GERMAN} "Lade %s" LangString inetcConn ${LANG_ENGLISH} "Connecting ..." LangString inetcConn ${LANG_GERMAN} "Verbinde ..." LangString inetcSecond ${LANG_ENGLISH} "second" LangString inetcSecond ${LANG_GERMAN} "Sekunde" LangString inetcMinute ${LANG_ENGLISH} "minute" LangString inetcMinute ${LANG_GERMAN} "Minute" LangString inetcHour ${LANG_ENGLISH} "hour" LangString inetcHour ${LANG_GERMAN} "Stunde" LangString inetcS ${LANG_ENGLISH} "s" LangString inetcS ${LANG_GERMAN} "n" LangString inetcSpeed ${LANG_ENGLISH} "%dkB (%d%%) of %dkB @ %d.%01dkB/s" LangString inetcSpeed ${LANG_GERMAN} "%d kByte (%d%%) von %d kByte @ %d.%01d kByte/s" LangString inetcRemain ${LANG_ENGLISH} " (%d %s%s remaining)" LangString inetcRemain ${LANG_GERMAN} " (%d %s%s verbleibend)" LangString inetcError ${LANG_ENGLISH} "Download error, Setup will be aborted" LangString inetcError ${LANG_GERMAN} "Fehler beim Download einer Datei. Das Setup kann nicht vollständig ausgeführt werden und wird nun beendet." ;Assign language strings to sections ;!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN ; !insertmacro MUI_DESCRIPTION_TEXT ${SEC0000} $(DESC_SecJAP) ; !insertmacro MUI_DESCRIPTION_TEXT ${secSwing} $(DESC_SecSwing) ; !insertmacro MUI_DESCRIPTION_TEXT ${secJava} $(DESC_SecJAVA) ;!insertmacro MUI_FUNCTION_DESCRIPTION_END Section -post SEC0001 WriteRegStr HKLM "${REGKEY}" Path $INSTDIR WriteUninstaller $INSTDIR\uninstall.exe !insertmacro MUI_STARTMENU_WRITE_BEGIN Application SetShellVarContext current SetOutPath $SMPROGRAMS\$StartMenuGroup CreateShortcut "$SMPROGRAMS\$StartMenuGroup\$(^UninstallLink).lnk" $INSTDIR\uninstall.exe SetShellVarContext all SetOutPath $SMPROGRAMS\$StartMenuGroup CreateShortcut "$SMPROGRAMS\$StartMenuGroup\$(^UninstallLink).lnk" $INSTDIR\uninstall.exe !insertmacro MUI_STARTMENU_WRITE_END WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayName "$(^Name)" WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayVersion "${VERSION}" WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" Publisher "${COMPANY}" WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" URLInfoAbout "${URL}" WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DisplayIcon $INSTDIR\uninstall.exe WriteRegStr HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" UninstallString $INSTDIR\uninstall.exe WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoModify 1 WriteRegDWORD HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" NoRepair 1 SectionEnd # Macro for selecting uninstaller sections ;!macro SELECT_UNSECTION SECTION_NAME UNSECTION_ID ; Push $R0 ; ReadRegStr $R0 HKLM "${REGKEY}\Components" "${SECTION_NAME}" ; StrCmp $R0 1 0 next${UNSECTION_ID} ; !insertmacro SelectSection "${UNSECTION_ID}" ; GoTo done${UNSECTION_ID} ;next${UNSECTION_ID}: ; !insertmacro UnselectSection "${UNSECTION_ID}" ;done${UNSECTION_ID}: ; Pop $R0 ;!macroend # Uninstaller sections Section un.JAP UNSEC0000 Delete /REBOOTOK $INSTDIR\jap.exe Delete /REBOOTOK $INSTDIR\JAP.jar Delete /REBOOTOK $INSTDIR\japdll.dll Delete /REBOOTOK $INSTDIR\japdll_x64.dll Delete /REBOOTOK $INSTDIR\swingall.jar RMDir /r /REBOOTOK $INSTDIR\jre SetShellVarContext all Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\JAP.lnk" SetShellVarContext current Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\JAP.lnk" DeleteRegValue HKLM "${REGKEY}\Components" Main SectionEnd Section un.post UNSEC0001 SetShellVarContext current Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\$(^UninstallLink).lnk" RmDir /REBOOTOK $SMPROGRAMS\$StartMenuGroup SetShellVarContext all Delete /REBOOTOK "$SMPROGRAMS\$StartMenuGroup\$(^UninstallLink).lnk" RmDir /REBOOTOK $SMPROGRAMS\$StartMenuGroup Delete /REBOOTOK $INSTDIR\uninstall.exe RmDir /REBOOTOK $INSTDIR DeleteRegKey HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$(^Name)" DeleteRegValue HKLM "${REGKEY}" StartMenuGroup DeleteRegValue HKLM "${REGKEY}" Path DeleteRegKey /IfEmpty HKLM "${REGKEY}\Components" DeleteRegKey /IfEmpty HKLM "${REGKEY}" SectionEnd # Installer functions Function .onInit InitPluginsDir File /oname=$PLUGINSDIR\spltmp.bmp Data\splash.bmp splash::show 500 $PLUGINSDIR\spltmp Pop $R0 Call GetUsableJavaVersion Pop $R0 StrCpy $jrename "jre1.7.zip" Call DetectJava Pop $detectedJre #Initial Situation: # - Java is selected IntCmp $detectedJre 0 lbl_done lbl_done lbl_deselect_java # If no JRE found (or Error) --> changes nothing # If JRE detected --> deselect Java... lbl_deselect_java: !insertmacro UnselectSection ${secJava} IntCmp $detectedJre 1 lbl_select_swing lbl_done lbl_done # ...and check if Swing is needed (Java 1.1!) # If Java 1.1 --> select Swing lbl_select_swing: !insertmacro SelectSection ${secSwing} lbl_done: FunctionEnd #Selection change event #if java is selected --> deselect Swing Function .onSelChange SectionGetFlags ${secJava} $0 IntOp $0 $0 & 1 IntCmp $0 1 lbl_unselect lbl_done lbl_done lbl_unselect: !insertmacro UnselectSection ${secSwing} lbl_done: FunctionEnd # Uninstaller functions Function un.onInit ReadRegStr $INSTDIR HKLM "${REGKEY}" Path ReadRegStr $StartMenuGroup HKLM "${REGKEY}" StartMenuGroup !insertmacro MUI_UNGETLANGUAGE ; !insertmacro SELECT_UNSECTION Main ${UNSEC0000} FunctionEnd # Installer Language Strings LangString ^UninstallLink ${LANG_GERMAN} "Lösche $(^Name)" LangString ^UninstallLink ${LANG_ENGLISH} "Uninstall $(^Name)"