1796 lines
70 KiB
NSIS
1796 lines
70 KiB
NSIS
; -------------------------------------------------------------------------
|
|
; - Install JMRI
|
|
; -------------------------------------------------------------------------
|
|
; - This is used to install JMRI (a Java application) on Windows.
|
|
; - It will ensure that JAVA is installed - if not, it will connect to the
|
|
; - internet to download JAVA.
|
|
; -
|
|
; - An off-line installation option is also possible - place the previously
|
|
; - downloaded off-line JRE installation program into a separate JRE folder
|
|
; - alongside the JMRI installation program.
|
|
; -
|
|
; - It will also check for a previous installation of JMRI and will backup
|
|
; - any preferences and roster files etc.
|
|
; - Also, if previous version was installed using InstallerVise, will run
|
|
; - that uninstaller first
|
|
; -------------------------------------------------------------------------
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Compilation instructions
|
|
; -------------------------------------------------------------------------
|
|
; - For the default setting of "SRCDIR", place this file in directory
|
|
; - 'Distribution\Windows\JMRI' prior to building the distribution .exe file.
|
|
; -
|
|
; - To build the resulting .exe file use one of:
|
|
; - makensis.exe (command-line)
|
|
; - makensisw.exe (Windows GUI)
|
|
; -
|
|
; - These are part of the NSIS installation suite available from:
|
|
; - http://nsis.sourceforge.net/
|
|
; -
|
|
; - makensis can also be compiled on POSIX systems such that the installer
|
|
; - .exe file can be built on such a platform.
|
|
; - For further details, refer to:
|
|
; - http://nsis.sourceforge.net/Docs/AppendixG.html#G.3
|
|
; - http://cho.hapgoods.com/wordpress/?p=138
|
|
; -
|
|
; - This installer makes use of the following NSIS plugins and macros
|
|
; - that are all included with the NSIS v2.35 or later distribution:
|
|
; - ModernUI 2.0
|
|
; - MultiUser
|
|
; - System
|
|
; - nsisDL
|
|
; - WordFunc
|
|
; -
|
|
; - A good NSIS editor (and the one used when developing this installer)
|
|
; - is 'HM NIS Edit' available from:
|
|
; - http://hmne.sourceforge.net/
|
|
; -------------------------------------------------------------------------
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Version History
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.28.0
|
|
; - Add LccPro app
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.27.0
|
|
; - Updated "-CleanUp" so that old/error files are removed before installation in jython directory
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.26.2
|
|
; - Update Java-install message URL
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.26.1
|
|
; - Remove Tools start menu items
|
|
; - Add support for Open JDK 8 Registry Keys
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.26.0
|
|
; - Remove JMRIDemo link
|
|
; - Rename Tools and Demos Folder to Tools
|
|
; - use https link for Java download and JMRI Website
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.25.0
|
|
; - Backup and remove lib folder
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.24.1
|
|
; - Correct the support for Java 11 Registry Keys
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.24.0
|
|
; - Add support for Java 11 Registry Keys
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.22.15
|
|
; - Backup and remove classes folder
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.22.14
|
|
; - Remove insecure Jackson libraries to address CVE-2017-17485
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.22.13
|
|
; - Remove outmoded SLF4J libraries
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.22.12
|
|
; - Remove outmoded Jetty and WebSocket libraries
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.22.11
|
|
; - Remove outmoded lib\ch.ntb.usb.jar
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.22.10
|
|
; - Support Java 9
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.22.9
|
|
; - Remove outmoded lib\jna-4.2.2.jar and install jmri.conf
|
|
; - Remove RXTX and SerialIO files as now replaced by purejavacomm
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.22.8
|
|
; - Remove outmoded jackson files
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.22.7
|
|
; - Remove outmoded jython files
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.22.6
|
|
; - Remove outmoded vecmath files
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.22.5
|
|
; - Remove more outmoded jetty files
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.22.4
|
|
; - Remove more outmoded jetty files
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.22.3
|
|
; - Fix decpro5 file name (.ico missing)
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.22.2
|
|
; - Remove references to DecoderPro3
|
|
; - Remove download of Java as this hasn't worked properly for a while
|
|
; - instead halt with a message to download if not found
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.22.1
|
|
; - Remove old JOAL libraries
|
|
; - Change minimum JRE version to 1.8
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.22.0
|
|
; - Remove support for installing the old DecoderPro
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.21.5
|
|
; - Updated "-CleanUp" so that another set of old files are removed,
|
|
; including:
|
|
; jetty(release 8.1.0.v20120127)-related libraries
|
|
; old log4j library
|
|
; jspwin DLL
|
|
; are removed before installation.
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.21.4
|
|
; - Updated "-CleanUp" so that any previous jetty-related .jar files and
|
|
; servlet .jar files are removed before installation.
|
|
; - Delete files related to XmlIO which is removed as of JMRI 3.11.3
|
|
; - Delete files which were removed as part of re-work of Zimo decoder
|
|
; definition rework for JMRI 3.11.3
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.21.3
|
|
; - Updated "-CleanUp" so that any previous slf4j .jar files are removed
|
|
; - before installation.
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.21.2
|
|
; - Updated "-CleanUp" so that any previous desktop icons are removed before
|
|
; - installation.
|
|
; - Updated "-CleanUp" so that if the Start Menu folder already exits, it
|
|
; - is removed before installation.
|
|
; - Provided work-around for deletion of Preferences.lnk on systems which
|
|
; - are slow to change file attributes.
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.21.1
|
|
; - Updated Uninstall operations so that DecoderPro3 icons on Desktop and in
|
|
; - Start Menu are deleted during Unninstall process
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.21.0
|
|
; - Add request for administrator level access when installing to correct
|
|
; - for bug highlighted by Suzie Tall
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.20.1
|
|
; - Added removal of obsolete library 'lib\servlet.jar'
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.20.0
|
|
; - Update installer to no longer install on Windows 98 and Windows ME
|
|
; - Change JRE version and copyright date to be determined by build.xml
|
|
; - ant script rather than being hard-coded here
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.19.0
|
|
; - Remove DecoderPro desktop shortcut from standard installation - now
|
|
; - only installed when selected
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.18.0
|
|
; - Remove DecoderPro3 from Tools and Demos and place in main JMRI start
|
|
; - menu along with Desktop shortcut
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.17.0
|
|
; - Change branding text
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.16.0
|
|
; - Add start menu shortcut for DecoderPro3
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.15.0
|
|
; - Remove shortcut to LocoTools JMRI application
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.14.0
|
|
; - Enabled the JMRI version to be determined by the ant dist.xml script
|
|
; - as opposed to being hard-coded in here
|
|
; - Update Multi-user installation configuration to default to the previous
|
|
; - settings when upgrading (i.e. Current User or All Users)
|
|
; - Updated URL for Windows 98 & ME JRE download to 1.5.0_22; was 1.5.0_17
|
|
; - see:
|
|
; - http://www.java.com/en/download/faq/win98_me.xml
|
|
; - http://www.java.com/en/download/windows98me_manual.jsp
|
|
; - As the build version is not checked, this will only be downloaded where
|
|
; - either no JRE exists or a version earlier than 1.5 is installed.
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.13.0
|
|
; - Removal of obsolete .bat and resource files
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.12.0
|
|
; - Update to remove comm.jar if found in JMRI\lib folder
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.11.0
|
|
; - Update to remove WiThrottle plug-in if previously installed
|
|
; - Modify backup check to default to off when installing over newer or
|
|
; - identical version
|
|
; - Changed backup behaviour to keep two backups:
|
|
; - - JMRI_backup
|
|
; - - JMRI_backup_old
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.10.0
|
|
; - Update to correctly identify JRE architecture when installing on 64-bit
|
|
; - systems.
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.9.0
|
|
; - Update installer for new library structure
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.8.0
|
|
; - Update installer for migration to new version of RXTX ensuring that
|
|
; - correct version of the .dll is installed for 32-bit or 64-bit
|
|
; - Also, changed the SerialIO installation to be localised to the JMRI
|
|
; - program directory, rather than in the system-wide JRE
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.7.0
|
|
; - Update to ensure removal of crimson.jar library file in both old and
|
|
; - new file layouts
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.6.0
|
|
; - Corrected an error where old install location was not being read back
|
|
; - if previously installed.
|
|
; - Improved check to avoid installation into Program Files root.
|
|
; - Updated installer to ensure JMRI uses the same library file layout as
|
|
; - on Linux and Mac OS X platforms.
|
|
; - Added additional obsolete decoder definitions to delete.
|
|
; - Use new icon for InstallTest application.
|
|
; - Add Start menu shortcut and optional Desktop shortcut for SoundPro
|
|
; - application.
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.5.0
|
|
; - Incorporated new routine to delete obsolete decoder definitions.
|
|
; - At the moment, it is purely done by deleting specified files from the
|
|
; - xml\decoders directory.
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.4.0
|
|
; - For a post-2.5.2 upgrade, defaulted the backup of preference and roster
|
|
; - files to be selected and also made this optional. Current behaviour
|
|
; - remains unchanged for a pre-2.5.2 upgrade (i.e. uninstallation with
|
|
; - backup is mandatory and must be explicitly selected by the user)
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.3.0
|
|
; - Removed the 'skipping' of program location and start menu selection
|
|
; - screens in all installation variants.
|
|
; - Renamed the 'Custom' installer
|
|
; - Enabled the install location to be read from the stored location in the
|
|
; - registry so that an upgrade will use that location, as opposed to the
|
|
; - default when installing.
|
|
; - General clean-up of obsolete code.
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.2.0
|
|
; - Modified offline JRE installer for Windows 98 and ME to look for a JRE
|
|
; - installer in the JRE_98ME sub-directory. This allows for a single CD to
|
|
; - be created for offline distribution.
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.1.0
|
|
; - Tidied up the previous version check.
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.1.0.0
|
|
; - First release for production.
|
|
; - Incorporated saving of the log to allow for cleaner uninstall.
|
|
; - Uninstaller now removes only those files and directories installed.
|
|
; - TODO: Remove reliance on access to global 'Program Files' directory
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.0.4.0
|
|
; - Reverted back to Multi-user installer with JMRI always installed into
|
|
; - 'Program Files' (need to come back and look at the scenario where a
|
|
; - user has insufficient rights to install there).
|
|
; - Removed most Desktop shortcuts and created a new 'Tools and Demos'
|
|
; - start menu folder containing less commonly used items plus a new
|
|
; - shortcut to the users Preferences folder.
|
|
; - Modified old InstallVise installer check to run the InstallVise
|
|
; - uninstaller first (with a backup of all settings and user files).
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.0.3.0
|
|
; - Removed the 'Current user' option for now as the exact behaviour of the
|
|
; - installer under Vista is not yet clear.
|
|
; - Removed custom pages and reliance on UAC and AccessControl plugins.
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.0.2.0
|
|
; - Converted to use ModernUI 2.0 (available as from NSIS v2.34).
|
|
; - Changed to use nsDialogs for custom pages instead of InstallOptions.
|
|
; - For installation on Vista, now using UAC and AccessControl plugins to
|
|
; - deal with gaining appropriate permissions for installer actions.
|
|
; -------------------------------------------------------------------------
|
|
; - Version 0.0.1.0
|
|
; - First internal test release.
|
|
; -------------------------------------------------------------------------
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Basic information
|
|
; - These should be edited to suit the application
|
|
; -------------------------------------------------------------------------
|
|
!define AUTHOR "Matt Harris for JMRI" ; Author name
|
|
!define APP "JMRI" ; Application name
|
|
!ifndef JMRI_COPY
|
|
; -- usually, this will be determined by the build.xml ant script
|
|
!define JMRI_COPY "by" ; Copyright dates
|
|
!endif
|
|
!define COPYRIGHT "(c) ${JMRI_COPY} JMRI Community" ; Copyright string
|
|
!ifndef JMRI_VER
|
|
; -- usually, this will be determined by the build.xml ant script
|
|
!define JMRI_VER "unknown" ; Application version
|
|
!endif
|
|
!ifndef RELEASEDIR
|
|
; -- usually, this will be determined by the build.xml ant script
|
|
!define RELEASEDIR ".."
|
|
!endif
|
|
!ifndef JRE_VER
|
|
; -- usually, this will be determined by the build.xml ant script
|
|
!define JRE_VER "1.8" ; Required JRE version
|
|
!endif
|
|
!define INST_VER "0.1.27.0" ; Installer version
|
|
!define PNAME "${APP}.${JMRI_VER}" ; Name of installer.exe
|
|
!define SRCDIR "." ; Path to head of sources
|
|
InstallDir "$PROGRAMFILES\JMRI" ; Default install directory
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - End of basic information
|
|
; - Lines below here should not normally require editing
|
|
; -------------------------------------------------------------------------
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Variable declarations
|
|
; -------------------------------------------------------------------------
|
|
Var JAVADIR ; holds the path to the location where JAVA files can be found
|
|
Var SMFOLDER ; holds the returned Start Menu Folder
|
|
Var JREINSTALLER ; holds the path to the location of the JRE installer
|
|
Var OFFLINEINSTALL ; a flag determining if this is an offline install
|
|
Var JREINSTALLCOUNT ; a counter holding times around the JRE install loop
|
|
Var REMOVEOLDINSTALL ; a flag to determine if old installer to be removed
|
|
Var REMOVEOLDJMRI.BACKUPONLY ; a flag to determine if we should back-up
|
|
Var UPGRADING ; a flag to determine if we are upgrading
|
|
Var x64 ; flag to determine if we're installing in x64 or not
|
|
Var x64JRE ; flag to determine if we've got a 64-bit JRE
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Compiler Flags (to reduce executable size, saves some bytes)
|
|
; -------------------------------------------------------------------------
|
|
SetDatablockOptimize on
|
|
SetCompress force
|
|
SetCompressor /SOLID /FINAL lzma
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Defines for downloading
|
|
; -------------------------------------------------------------------------
|
|
!define JRE_URL "https://jmri.org/java"
|
|
!define INTERNET_CONNECTION_CONFIGURED 64 ; 0x40
|
|
!define INTERNET_CONNECTION_LAN 2 ; 0x02
|
|
!define INTERNET_CONNECTION_MODEM 1 ; 0x01
|
|
!define INTERNET_CONNECTION_OFFLINE 32 ; 0x20
|
|
!define INTERNET_CONNECTION_PROXY 4 ; 0x04
|
|
!define INTERNET_RAS_INSTALLED 16 ; 0x10
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Defines for multi-user installation
|
|
; -------------------------------------------------------------------------
|
|
!define MULTIUSER_EXECUTIONLEVEL Highest
|
|
!define MULTIUSER_MUI ; allow for use with ModernUI
|
|
!define MULTIUSER_INSTALLMODE_COMMANDLINE
|
|
!define MULTIUSER_INIT_TEXT_ALLUSERSNOTPOSSIBLE "Your user account does not have sufficient privileges to uninstall $(^Name) for all users of this computer."
|
|
!define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI"
|
|
!define MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME ""
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Includes
|
|
; -------------------------------------------------------------------------
|
|
!include "MultiUser.nsh" ; MultiUser installation
|
|
!include "WordFunc.nsh" ; add header for word manipulation
|
|
!insertmacro VersionCompare ; add function to compare versions
|
|
|
|
;-- from https://nsis.sourceforge.io/GetInQuotes:_Get_string_from_between_quotes
|
|
Function GetInQuotes
|
|
Exch $R0
|
|
Push $R1
|
|
Push $R2
|
|
Push $R3
|
|
|
|
StrCpy $R2 -1
|
|
IntOp $R2 $R2 + 1
|
|
StrCpy $R3 $R0 1 $R2
|
|
StrCmp $R3 "" 0 +3
|
|
StrCpy $R0 ""
|
|
Goto Done
|
|
StrCmp $R3 '"' 0 -5
|
|
|
|
IntOp $R2 $R2 + 1
|
|
StrCpy $R0 $R0 "" $R2
|
|
|
|
StrCpy $R2 0
|
|
IntOp $R2 $R2 + 1
|
|
StrCpy $R3 $R0 1 $R2
|
|
StrCmp $R3 "" 0 +3
|
|
StrCpy $R0 ""
|
|
Goto Done
|
|
StrCmp $R3 '"' 0 -5
|
|
|
|
StrCpy $R0 $R0 $R2
|
|
Done:
|
|
|
|
Pop $R3
|
|
Pop $R2
|
|
Pop $R1
|
|
Exch $R0
|
|
FunctionEnd
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Defines for log saving
|
|
; -------------------------------------------------------------------------
|
|
!ifndef LVM_GETITEMCOUNT
|
|
!define LVM_GETITEMCOUNT 0x1004
|
|
!endif
|
|
!ifndef LVM_GETITEMTEXT
|
|
!define LVM_GETITEMTEXT 0x102D
|
|
!endif
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Runtime Switches
|
|
; -------------------------------------------------------------------------
|
|
CRCCheck On ; do CRC check on launcher before start ("Off" for later EXE compression)
|
|
ShowInstDetails Hide ; Hide the installation details
|
|
ShowUninstDetails Hide ; Hide the uninstallation details
|
|
AutoCloseWindow False ; do not automatically close when finished
|
|
RequestExecutionLevel admin ; Request administrator level access
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Set basic information
|
|
; -------------------------------------------------------------------------
|
|
Name "${APP} ${JMRI_VER}"
|
|
Caption "${APP} ${JMRI_VER} Setup"
|
|
BrandingText "${APP} - ${COPYRIGHT}"
|
|
OutFile "${RELEASEDIR}/${PNAME}.exe"
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Interface Settings
|
|
; -------------------------------------------------------------------------
|
|
!ifdef ICON
|
|
!define MUI_ICON "${ICON}"
|
|
!else
|
|
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\orange-install.ico"
|
|
!endif
|
|
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\orange-uninstall.ico"
|
|
!define MUI_ABORTWARNING
|
|
!define MUI_UNABORTWARNING
|
|
!define MUI_WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\orange.bmp"
|
|
!define MUI_UNWELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\orange-uninstall.bmp"
|
|
!define MUI_HEADERIMAGE
|
|
!define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\orange.bmp"
|
|
!define MUI_HEADERIMAGE_UNBITMAP "${NSISDIR}\Contrib\Graphics\Header\orange-uninstall.bmp"
|
|
!define MUI_COMPONENTSPAGE_SMALLDESC
|
|
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "JMRI"
|
|
!define MUI_STARTMENUPAGE_NODISABLE
|
|
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX"
|
|
!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI"
|
|
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "StartMenuDir"
|
|
!define MUI_FINISHPAGE_NOAUTOCLOSE
|
|
#!define MUI_FINISHPAGE_RUN
|
|
#!define MUI_FINISHPAGE_RUN_TEXT "Execute DecoderPro Install Validation Wizard"
|
|
#!define MUI_FINISHPAGE_RUN_FUNCTION InstallValidationWizard
|
|
!define MUI_UNFINISHPAGE_NOAUTOCLOSE
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Define pages
|
|
; -------------------------------------------------------------------------
|
|
!define MUI_TEXT_WELCOME_INFO_TEXT "This wizard will guide you through the installation of $(^NameDA).$\r$\n$\r$\nIt is recommended that you close all other applications before starting Setup. This will make it possible to update relevant system files without having to reboot your computer.$\r$\n$\r$\n$(^NameDA) requires Java Runtime Environment ${JRE_VER} or later installed on your computer. During installation, this wizard will check for Java.$\r$\n$\r$\n$_CLICK"
|
|
!insertmacro MUI_PAGE_WELCOME
|
|
Page custom nsDialogRemoveOldJMRI RemoveOldJMRI
|
|
!insertmacro MULTIUSER_PAGE_INSTALLMODE
|
|
!insertmacro MUI_PAGE_COMPONENTS
|
|
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE DirectoryLeave
|
|
!insertmacro MUI_PAGE_DIRECTORY
|
|
!insertmacro MUI_PAGE_STARTMENU JMRIStartMenu $SMFOLDER
|
|
!insertmacro MUI_PAGE_INSTFILES
|
|
!insertmacro MUI_PAGE_FINISH
|
|
|
|
!insertmacro MUI_UNPAGE_WELCOME
|
|
!insertmacro MUI_UNPAGE_CONFIRM
|
|
!insertmacro MUI_UNPAGE_INSTFILES
|
|
!insertmacro MUI_UNPAGE_FINISH
|
|
|
|
InstType "Typical"
|
|
InstType "Full"
|
|
; -------------------------------------------------------------------------
|
|
; - Languages
|
|
; -------------------------------------------------------------------------
|
|
!insertmacro MUI_LANGUAGE "English"
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Reserve files (note some are already reserved by MUI2 and MultiUser)
|
|
; -------------------------------------------------------------------------
|
|
; - If solid compression is being used, files that are required before the
|
|
; - actual installation itself should be stored in the first data block -
|
|
; - this will ensure that the installer starts faster
|
|
; -------------------------------------------------------------------------
|
|
ReserveFile /plugin "System.dll"
|
|
ReserveFile /plugin "NSISdl.dll"
|
|
ReserveFile /plugin "UserInfo.dll"
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Set version information
|
|
; -------------------------------------------------------------------------
|
|
VIProductVersion "${INST_VER}"
|
|
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "${APP} Install"
|
|
VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "Installs JMRI ${JMRI_VER} suite."
|
|
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "${COPYRIGHT}"
|
|
VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "by ${AUTHOR}"
|
|
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "${APP} Install"
|
|
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${INST_VER}"
|
|
VIAddVersionKey /LANG=${LANG_ENGLISH} "OriginalFilename" "${PNAME}.exe"
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Installer sections
|
|
; -------------------------------------------------------------------------
|
|
SectionGroup "JMRI Core Files" SEC_CORE
|
|
|
|
Section "-CleanUp" ; SEC_CLEANUP
|
|
SectionIn RO ; This section always selected
|
|
|
|
; -- Clean up of JMRI folder
|
|
SetOutPath "$INSTDIR"
|
|
|
|
; -- Recursively delete classes folder, which historically contained
|
|
; -- individual .properties and .classes patch files
|
|
; -- that might not be consistent with this new version
|
|
RMDir /R "$OUTDIR\classes"
|
|
|
|
; -- Recursively delete lib folder, which historically contained
|
|
; -- individually added JAR files, but which we have been encouraging
|
|
; -- users not to modify
|
|
RMDir /R "$OUTDIR\lib"
|
|
|
|
; -- Delete old USB library files
|
|
Delete "$OUTDIR\ch.ntb.usb.jar"
|
|
|
|
; -- Delete old .jar & support files in destination directory
|
|
Delete "$OUTDIR\jh.1.1.2.jar"
|
|
Delete "$OUTDIR\jh.jar"
|
|
Delete "$OUTDIR\jdom-jdk11.jar"
|
|
|
|
; -- Delete certain jython files that have been moved, or were entered erroneously, as of JMRI 4.21.3
|
|
Delete "$OUTDIR\jython\SetMqttOptions.py"
|
|
Delete "$OUTDIR\jython\SetMqttParser.py"
|
|
Delete "$OUTDIR\jython\SetMqttPrefix.py"
|
|
Delete "$OUTDIR\jython\ReceiveMqttMessage.py"
|
|
Delete "$OUTDIR\jython\SendMqttMessage.py"
|
|
Delete "$OUTDIR\jython\CmriBitsToBytes.jy"
|
|
|
|
; -- Delete XmlIO-related files, as of JMRI 3.11.3
|
|
Delete "$OUTDIR\help\en\package\jmri\jmrit\inControl\images\2Throttles.png"
|
|
Delete "$OUTDIR\help\en\package\jmri\jmrit\inControl\images\AnalogClock.png"
|
|
Delete "$OUTDIR\help\en\package\jmri\jmrit\inControl\images\Help.png"
|
|
Delete "$OUTDIR\help\en\package\jmri\jmrit\inControl\images\inControlIcon.png"
|
|
Delete "$OUTDIR\help\en\package\jmri\jmrit\inControl\images\LocoSettings.png"
|
|
Delete "$OUTDIR\help\en\package\jmri\jmrit\inControl\images\Panel.png"
|
|
Delete "$OUTDIR\help\en\package\jmri\jmrit\inControl\images\QueryStringHelp.png"
|
|
Delete "$OUTDIR\help\en\package\jmri\jmrit\inControl\images\Scan2BeInControl.png"
|
|
Delete "$OUTDIR\help\en\package\jmri\jmrit\inControl\images\Settings.png"
|
|
Delete "$OUTDIR\help\en\package\jmri\jmrit\inControl\images\Throttle1.png"
|
|
Delete "$OUTDIR\help\en\package\jmri\jmrit\inControl\images\Throttle2.png"
|
|
Delete "$OUTDIR\help\en\package\jmri\jmrit\inControl\images\.png"
|
|
RmDir "$OUTDIR\help\en\package\jmri\jmrit\inControl\images"
|
|
RmDir "$OUTDIR\help\en\package\jmri\jmrit\inControl"
|
|
|
|
Delete "$OUTDIR\help\fr\package\jmri\jmrit\inControl\images\2Throttles.png"
|
|
Delete "$OUTDIR\help\fr\package\jmri\jmrit\inControl\images\AnalogClock.png"
|
|
Delete "$OUTDIR\help\fr\package\jmri\jmrit\inControl\images\Help.png"
|
|
Delete "$OUTDIR\help\fr\package\jmri\jmrit\inControl\images\inControlIcon.png"
|
|
Delete "$OUTDIR\help\fr\package\jmri\jmrit\inControl\images\LocoSettings.png"
|
|
Delete "$OUTDIR\help\fr\package\jmri\jmrit\inControl\images\Panel.png"
|
|
Delete "$OUTDIR\help\fr\package\jmri\jmrit\inControl\images\QueryStringHelp.png"
|
|
Delete "$OUTDIR\help\fr\package\jmri\jmrit\inControl\images\Scan2BeInControl.png"
|
|
Delete "$OUTDIR\help\fr\package\jmri\jmrit\inControl\images\Settings.png"
|
|
Delete "$OUTDIR\help\fr\package\jmri\jmrit\inControl\images\Throttle1.png"
|
|
Delete "$OUTDIR\help\fr\package\jmri\jmrit\inControl\images\Throttle2.png"
|
|
Delete "$OUTDIR\help\fr\package\jmri\jmrit\inControl\images\.png"
|
|
RmDir "$OUTDIR\help\fr\package\jmri\jmrit\inControl\images"
|
|
RmDir "$OUTDIR\help\fr\package\jmri\jmrit\inControl"
|
|
|
|
Delete "$OUTDIR\web\css\inControl.css"
|
|
Delete "$OUTDIR\web\css\JMRI_XMLIO_TEST.css"
|
|
Delete "$OUTDIR\web\css\Scan2BeInControl.css"
|
|
Delete "$OUTDIR\web\js\inControl.js"
|
|
Delete "$OUTDIR\web\js\JMRI_XMLIO_TEST.js"
|
|
Delete "$OUTDIR\web\js\Scan2BeInControl.js"
|
|
Delete "$OUTDIR\web\inControl.html"
|
|
Delete "$OUTDIR\web\inControl.jar"
|
|
Delete "$OUTDIR\web\JMRI_XMLIO_test.html"
|
|
Delete "$OUTDIR\web\Scan2BeInControl.html"
|
|
|
|
; Delete files which were removed as part of re-work of Zimo decoder
|
|
; definition rework for JMRI 3.11.3
|
|
Delete "$OUTDIR\xml\decoders\zimo\CV739-CV744threeSwitchIP.xml"
|
|
Delete "$OUTDIR\xml\decoders\zimo\CV739-CV744twoSwitchIP.xml"
|
|
Delete "$OUTDIR\xml\decoders\zimo\CV739-CV768.xml"
|
|
|
|
; -- Delete .jar & support files installed using previous layout
|
|
Delete "$OUTDIR\activation.jar"
|
|
Delete "$OUTDIR\ch.ntb.usb.jar"
|
|
Delete "$OUTDIR\comm.jar"
|
|
Delete "$OUTDIR\crimson.jar"
|
|
Delete "$OUTDIR\ExternalLinkContentViewerUI.jar"
|
|
Delete "$OUTDIR\gluegen-rt.dll"
|
|
Delete "$OUTDIR\gluegen-rt.jar"
|
|
Delete "$OUTDIR\javacsv.jar"
|
|
Delete "$OUTDIR\javax.comm.properties"
|
|
Delete "$OUTDIR\jdom-2.0.5.jar"
|
|
Delete "$OUTDIR\jdom.jar"
|
|
Delete "$OUTDIR\jhall.jar"
|
|
Delete "$OUTDIR\jinput-dx8.dll"
|
|
Delete "$OUTDIR\jinput-raw.dll"
|
|
Delete "$OUTDIR\jinput-wintab.dll"
|
|
Delete "$OUTDIR\jinput.jar"
|
|
Delete "$OUTDIR\joal.jar"
|
|
Delete "$OUTDIR\joal_native.dll"
|
|
Delete "$OUTDIR\jspWin.dll"
|
|
Delete "$OUTDIR\jython.jar"
|
|
Delete "$OUTDIR\LibusbJava.dll"
|
|
Delete "$OUTDIR\log4j.jar"
|
|
Delete "$OUTDIR\mailapi.jar"
|
|
Delete "$OUTDIR\MRJAdapter.jar"
|
|
Delete "$OUTDIR\security.policy"
|
|
Delete "$OUTDIR\Serialio.jar"
|
|
Delete "$OUTDIR\servlet.jar"
|
|
Delete "$OUTDIR\smtp.jar"
|
|
Delete "$OUTDIR\vecmath.jar"
|
|
Delete "$OUTDIR\win32com.dll"
|
|
Delete "$OUTDIR\xercesImpl.jar"
|
|
|
|
; -- Delete old plug-ins from program folder
|
|
Delete "$OUTDIR\WiThrottle.jar"
|
|
|
|
; -- Delete old log files from program folder
|
|
Delete "$OUTDIR\messages.log"
|
|
Delete "$OUTDIR\uninstal.log" ; from InstallerVise installer
|
|
|
|
; -- Delete obsolete .bat files from program folder
|
|
Delete "$OUTDIR\CornwallRR.bat"
|
|
Delete "$OUTDIR\DecoderPro.bat"
|
|
Delete "$OUTDIR\JmriDemo.bat"
|
|
Delete "$OUTDIR\LocoTools.bat"
|
|
Delete "$OUTDIR\PacketPro.bat"
|
|
Delete "$OUTDIR\PanelPro.bat"
|
|
Delete "$OUTDIR\SoundPro.bat"
|
|
|
|
; -- Delete obsolete resource files
|
|
Delete "$OUTDIR\resources\GreenPowerLED.gif"
|
|
Delete "$OUTDIR\resources\RedPowerLED.gif"
|
|
Delete "$OUTDIR\resources\YellowPowerLED.gif"
|
|
|
|
|
|
; -- If the current install Start Menu folder exists, remove any
|
|
; -- predictably-named JMRI-related contents.
|
|
|
|
!insertmacro MUI_STARTMENU_GETFOLDER JMRIStartMenu $0
|
|
|
|
; -- Change file attributes early so they have time to propagate on systems
|
|
; -- with unexpected delays in the filesystem.
|
|
SetFileAttributes "$SMPROGRAMS\$0\Tools\Preferences.lnk" NORMAL
|
|
|
|
Delete "$SMPROGRAMS\$0\DecoderPro.lnk"
|
|
Delete "$SMPROGRAMS\$0\DecoderPro3.lnk"
|
|
Delete "$SMPROGRAMS\$0\PanelPro.lnk"
|
|
Delete "$SMPROGRAMS\$0\SoundPro.lnk"
|
|
Delete "$SMPROGRAMS\$0\LccPro.lnk"
|
|
Delete "$SMPROGRAMS\$0\Tools and Demos\JmriDemo.lnk"
|
|
Delete "$SMPROGRAMS\$0\Tools and Demos\LocoTools.lnk"
|
|
Delete "$SMPROGRAMS\$0\Tools and Demos\CornwallRR.lnk"
|
|
Delete "$SMPROGRAMS\$0\Tools and Demos\InstallTest.lnk"
|
|
Delete "$SMPROGRAMS\$0\Tools and Demos\InstallTest.pif" ; -- for Win98
|
|
Delete "$SMPROGRAMS\$0\Tools and Demos\DecoderPro3.lnk"
|
|
Delete "$SMPROGRAMS\$0\Tools and Demos\Preferences.lnk"
|
|
Delete "$SMPROGRAMS\$0\Tools\InstallTest.lnk"
|
|
Delete "$SMPROGRAMS\$0\Tools\Preferences.lnk"
|
|
Delete "$SMPROGRAMS\$0\Uninstall.lnk"
|
|
RMDir "$SMPROGRAMS\$0\Tools and Demos\"
|
|
RMDir "$SMPROGRAMS\$0\Tools\"
|
|
RMDir "$SMPROGRAMS\$0\"
|
|
|
|
; -- Remove any predictably-named JMRI shortcuts from the Desktop
|
|
|
|
Delete "$DESKTOP\DecoderPro.lnk"
|
|
Delete "$DESKTOP\DecoderPro3.lnk"
|
|
Delete "$DESKTOP\PanelPro.lnk"
|
|
Delete "$DESKTOP\SoundPro.lnk"
|
|
Delete "$DESKTOP\LccPro.lnk"
|
|
|
|
SectionEnd ; SEC_CLEANUP
|
|
|
|
Section "Main" SEC_MAIN
|
|
SectionIn RO ; This section always selected
|
|
; -- Check for JRE
|
|
Call CheckJRE
|
|
; -- Main JMRI files
|
|
SetOutPath "$INSTDIR"
|
|
|
|
; -- Install main JMRI files
|
|
; -- Library & Support Files now moved from here
|
|
File /a "${SRCDIR}\*.jar"
|
|
File /a "${SRCDIR}\COPYING"
|
|
File /a "${SRCDIR}\jmri.conf"
|
|
File /a "${SRCDIR}\LaunchJMRI.exe"
|
|
File /a "${SRCDIR}\*.bat"
|
|
File /a "${SRCDIR}\default_lcf.xml"
|
|
File /a "${SRCDIR}\*.ico"
|
|
File /a "${SRCDIR}\lib\security.policy"
|
|
File /a "${SRCDIR}\python.properties"
|
|
|
|
SectionEnd ; SEC_MAIN
|
|
|
|
Section "COM Library" SEC_COMLIB
|
|
SectionIn RO ; This section always selected
|
|
|
|
; -- If we're upgrading, we need to make sure that
|
|
; -- any previously loaded library files in the JRE
|
|
; -- are removed
|
|
|
|
StrCmp $UPGRADING "1" 0 InstallComLib
|
|
Delete "$JAVADIR\lib\javax.comm.properties"
|
|
Delete "$JAVADIR\lib\ext\Serialio.jar"
|
|
Delete "$JAVADIR\bin\jspWin.dll"
|
|
Delete "$JAVADIR\bin\win32com.dll"
|
|
|
|
InstallComLib:
|
|
SetOutPath "$INSTDIR\lib"
|
|
|
|
; -- SerialIO native library
|
|
File /a "${SRCDIR}\jspWin.dll"
|
|
|
|
SectionEnd ; SEC_COMLIB
|
|
|
|
Section "Help" SEC_HELP
|
|
SectionIn RO ; This section always selected
|
|
; -- Help files installed here
|
|
SetOutPath "$INSTDIR\help"
|
|
File /a /r "${SRCDIR}\help\*.*"
|
|
SectionEnd ; SEC_HELP
|
|
|
|
Section "Library files" SEC_LIB
|
|
SectionIn RO ; This section always selected
|
|
; -- Library files installed here
|
|
SetOutPath "$INSTDIR\lib"
|
|
|
|
; -- Match all files in 'lib' but do not recurse into sub-directories
|
|
File /a "${SRCDIR}\lib\*.*"
|
|
|
|
; -- Install x86 library files
|
|
SetOutPath "$INSTDIR\lib\x86"
|
|
|
|
; -- Match all files in 'lib\windows\x86' but do not recurse into sub-directories
|
|
File /a "${SRCDIR}\lib\windows\x86\*.*"
|
|
|
|
; -- Install x64 library files
|
|
SetOutPath "$INSTDIR\lib\x64"
|
|
|
|
; -- Match all files in 'lib\windows\x64' but do not recurse into sub-directories
|
|
File /a "${SRCDIR}\lib\windows\x64\*.*"
|
|
|
|
; -- Extract and run OpenAL library installer in silent mode
|
|
; [Ignored for now]
|
|
;SetOutPath "$TEMP"
|
|
;File /a /r "${SRCDIR}\oalinst.exe"
|
|
;ExecWait `"$TEMP\oalinst.exe" -s`
|
|
;Delete "$TEMP\oalinst.exe"
|
|
SectionEnd ; SEC_LIB
|
|
|
|
Section "Jython files" SEC_JYTHON
|
|
SectionIn RO ; This section always selected
|
|
; -- Jython script files here
|
|
SetOutPath "$INSTDIR\jython"
|
|
File /a /r "${SRCDIR}\jython\*.*"
|
|
SectionEnd ; SEC_JYTHON
|
|
|
|
Section "Resource files" SEC_RES
|
|
SectionIn RO ; This section always selected
|
|
; -- Resource files here
|
|
SetOutPath "$INSTDIR\resources"
|
|
File /a /r "${SRCDIR}\resources\*.*"
|
|
SectionEnd ; SEC_RES
|
|
|
|
Section "XML files" SEC_XML
|
|
SectionIn RO ; This section always selected
|
|
; -- Check to see if we've been previously installed with the new installer
|
|
; -- and if so, remove obsolete decoder definitions
|
|
StrCmp $REMOVEOLDJMRI.BACKUPONLY "1" RemoveObsolete InstallXML
|
|
|
|
RemoveObsolete:
|
|
Call RemoveObsoleteDecoderDefinitions
|
|
|
|
InstallXML:
|
|
; -- XML files here
|
|
SetOutPath "$INSTDIR\xml"
|
|
File /a /r "${SRCDIR}\xml\*.*"
|
|
SectionEnd ; SEC_XML
|
|
|
|
Section "Web files" SEC_WEB
|
|
SectionIn RO ; This section always selected
|
|
; -- Web files here
|
|
SetOutPath "$INSTDIR\web"
|
|
File /a /r "${SRCDIR}\web\*.*"
|
|
SectionEnd ; SEC_WEB
|
|
SectionGroupEnd ; SEC_CORE
|
|
|
|
SectionGroup "Start menu shortcuts" SEC_SMSC
|
|
; -- Create Start menu shortcuts
|
|
Section "Standard Components" SEC_SCSMSC
|
|
SectionIn RO ; This section always selected
|
|
!insertmacro MUI_STARTMENU_WRITE_BEGIN JMRIStartMenu
|
|
SetOutPath "$INSTDIR"
|
|
CreateDirectory "$SMPROGRAMS\$SMFOLDER"
|
|
; -- Remove any shortcuts to deprecated components
|
|
Delete "$SMPROGRAMS\$SMFOLDER\Tools and Demos\LocoTools.lnk"
|
|
Delete "$SMPROGRAMS\$SMFOLDER\Tools and Demos\DecoderPro3.lnk"
|
|
; -- Create shortcuts for standard JMRI components
|
|
CreateShortcut "$SMPROGRAMS\$SMFOLDER\DecoderPro.lnk" \
|
|
"$INSTDIR\LaunchJMRI.exe" \
|
|
"apps.gui3.dp3.DecoderPro3" \
|
|
"$INSTDIR\decpro5.ico" 0 "" "" \
|
|
"Start DecoderPro"
|
|
CreateShortcut "$SMPROGRAMS\$SMFOLDER\PanelPro.lnk" \
|
|
"$INSTDIR\LaunchJMRI.exe" \
|
|
"apps.PanelPro.PanelPro" \
|
|
"$INSTDIR\PanelPro80x80.ico" 0 "" "" \
|
|
"Start PanelPro"
|
|
CreateShortcut "$SMPROGRAMS\$SMFOLDER\SoundPro.lnk" \
|
|
"$INSTDIR\LaunchJMRI.exe" \
|
|
"apps.SoundPro.SoundPro" \
|
|
"$INSTDIR\SoundPro80x80.ico" 0 "" "" \
|
|
"Start SoundPro"
|
|
CreateShortcut "$SMPROGRAMS\$SMFOLDER\LccPro.lnk" \
|
|
"$INSTDIR\LaunchJMRI.exe" \
|
|
"apps.gui3.lccpro.LccPro" \
|
|
"$INSTDIR\LccPro80x80.ico" 0 "" "" \
|
|
"Start LccPro"
|
|
CreateDirectory "$SMPROGRAMS\$SMFOLDER\Tools"
|
|
CreateShortcut "$SMPROGRAMS\$SMFOLDER\Tools\InstallTest.lnk" \
|
|
"$INSTDIR\InstallTest.bat" \
|
|
"" \
|
|
"$INSTDIR\InstallTest80x80.ico" 0 "" "" \
|
|
"Start JMRI Install Test"
|
|
; -- Create a preferences directory for this user
|
|
IfFileExists "$PROFILE\JMRI\*.*" +2
|
|
CreateDirectory "$PROFILE\JMRI"
|
|
; -- Now create a shortcut to it
|
|
CreateShortcut "$SMPROGRAMS\$SMFOLDER\Tools\Preferences.lnk" \
|
|
"%HOMEDRIVE%%HOMEPATH%\JMRI" \
|
|
"" \
|
|
"" "" "" "" \
|
|
"Open JMRI Preferences Folder"
|
|
SetFileAttributes "$SMPROGRAMS\$SMFOLDER\Tools\Preferences.lnk" READONLY
|
|
CreateShortcut "$SMPROGRAMS\$SMFOLDER\Uninstall.lnk" \
|
|
"$INSTDIR\Uninstall.exe" \
|
|
"/$MultiUser.InstallMode"
|
|
!insertmacro MUI_STARTMENU_WRITE_END
|
|
SectionEnd ; SEC_SCSMSC
|
|
|
|
SectionGroupEnd ; SEC_SMSC
|
|
|
|
SectionGroup "Desktop Shortcuts" SEC_DTSC
|
|
; -- Create Desktop shortcuts
|
|
Section "DecoderPro" SEC_DPDTSC
|
|
SectionIn 1 2
|
|
CreateShortcut "$DESKTOP\DecoderPro.lnk" \
|
|
"$INSTDIR\LaunchJMRI.exe" \
|
|
"apps.gui3.dp3.DecoderPro3" \
|
|
"$INSTDIR\decpro5.ico" 0 "" "" \
|
|
"Start DecoderPro"
|
|
SectionEnd ; SEC_DPDTSC
|
|
|
|
Section "PanelPro" SEC_PPDTSC
|
|
SectionIn 1 2
|
|
CreateShortcut "$DESKTOP\PanelPro.lnk" \
|
|
"$INSTDIR\LaunchJMRI.exe" \
|
|
"apps.PanelPro.PanelPro" \
|
|
"$INSTDIR\PanelPro80x80.ico" 0 "" "" \
|
|
"Start PanelPro"
|
|
SectionEnd ; SEC_PPDTSC
|
|
|
|
Section /o "SoundPro" SEC_SPDTSC
|
|
SectionIn 2
|
|
CreateShortcut "$DESKTOP\SoundPro.lnk" \
|
|
"$INSTDIR\LaunchJMRI.exe" \
|
|
"apps.SoundPro.SoundPro" \
|
|
"$INSTDIR\SoundPro80x80.ico" 0 "" "" \
|
|
"Start SoundPro"
|
|
SectionEnd ; SEC_SPDTSC
|
|
|
|
Section /o "LccPro" SEC_LPDTSC
|
|
SectionIn 2
|
|
CreateShortcut "$DESKTOP\LccPro.lnk" \
|
|
"$INSTDIR\LaunchJMRI.exe" \
|
|
"apps.gui3.lccpro.LccPro" \
|
|
"$INSTDIR\LccPro80x80.ico" 0 "" "" \
|
|
"Start LccPro"
|
|
SectionEnd ; SEC_LPDTSC
|
|
|
|
SectionGroupEnd ; SEC_DTSC
|
|
|
|
Section "-Create Uninstaller" SEC_CRUNINST
|
|
SectionIn RO ; This section always selected
|
|
; -- Create Uninstaller
|
|
WriteUninstaller "$INSTDIR\Uninstall.exe"
|
|
SectionEnd ; SEC_CRUNINST
|
|
|
|
Section "-PostProcessing" SEC_POST
|
|
SectionIn RO ; This section always selected
|
|
; -- Register with Windows Add/Remove Programs
|
|
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI" \
|
|
"DisplayName" "JMRI - Java Model Railroad Interface"
|
|
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI" \
|
|
"UninstallString" `"$INSTDIR\Uninstall.exe" /$MultiUser.InstallMode`
|
|
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI" \
|
|
"InstallLocation" "$INSTDIR"
|
|
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI" \
|
|
"DisplayVersion" "${JMRI_VER}"
|
|
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI" \
|
|
"Publisher" "JMRI Community"
|
|
WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI" \
|
|
"URLInfoAbout" "https://jmri.org/"
|
|
WriteRegDWORD SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI" \
|
|
"NoModify" 1
|
|
WriteRegDWORD SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI" \
|
|
"NoRepair" 1
|
|
; -- Register task to create JMRI Preferences directory with Active Setup
|
|
; -- to ensure created for each new user (for All Users on Win2k+ only)
|
|
StrCmp $MultiUser.InstallMode "CurrentUser" Done
|
|
; -- Write the Local Machine registry entries
|
|
WriteRegStr HKLM "Software\Microsoft\Active Setup\Installed Components\JMRI" \
|
|
"" "JMRI Customizations"
|
|
WriteRegStr HKLM "Software\Microsoft\Active Setup\Installed Components\JMRI" \
|
|
"ComponentID" "JMRI"
|
|
WriteRegDWORD HKLM "Software\Microsoft\Active Setup\Installed Components\JMRI" \
|
|
"IsInstalled" 1
|
|
WriteRegStr HKLM "Software\Microsoft\Active Setup\Installed Components\JMRI" \
|
|
"Locale" "*"
|
|
WriteRegStr HKLM "Software\Microsoft\Active Setup\Installed Components\JMRI" \
|
|
"StubPath" "$INSTDIR\CreatePrefs.bat"
|
|
WriteRegStr HKLM "Software\Microsoft\Active Setup\Installed Components\JMRI" \
|
|
"Version" "0,0,0,1"
|
|
; -- Write the Current User registry entries
|
|
WriteRegStr HKCU "Software\Microsoft\Active Setup\Installed Components\JMRI" \
|
|
"" ""
|
|
WriteRegStr HKCU "Software\Microsoft\Active Setup\Installed Components\JMRI" \
|
|
"Locale" "*"
|
|
WriteRegStr HKCU "Software\Microsoft\Active Setup\Installed Components\JMRI" \
|
|
"Version" "0,0,0,1"
|
|
Done:
|
|
; -- Save the log
|
|
StrCpy $0 "$INSTDIR\install.log"
|
|
Push $0
|
|
Call SaveLog
|
|
|
|
SectionEnd ; SEC_POST
|
|
|
|
Section "Uninstall" ; SEC_CRUNINST
|
|
|
|
; -- Remove all program files
|
|
StrCpy $0 "$INSTDIR\install.log"
|
|
Push $0
|
|
Call un.DeleteFromLog
|
|
|
|
; -- Remove all shortcuts
|
|
!insertmacro MUI_STARTMENU_GETFOLDER JMRIStartMenu $0
|
|
|
|
; -- Change file attributes early so they have time to propagate on systems
|
|
; -- with unexpected delays in the filesystem.
|
|
SetFileAttributes "$SMPROGRAMS\$0\Tools\Preferences.lnk" NORMAL
|
|
|
|
Delete "$SMPROGRAMS\$0\DecoderPro.lnk"
|
|
Delete "$SMPROGRAMS\$0\DecoderPro3.lnk"
|
|
Delete "$SMPROGRAMS\$0\PanelPro.lnk"
|
|
Delete "$SMPROGRAMS\$0\SoundPro.lnk"
|
|
Delete "$SMPROGRAMS\$0\LccPro.lnk"
|
|
Delete "$SMPROGRAMS\$0\Tools and Demos\JmriDemo.lnk"
|
|
Delete "$SMPROGRAMS\$0\Tools and Demos\LocoTools.lnk"
|
|
Delete "$SMPROGRAMS\$0\Tools and Demos\CornwallRR.lnk"
|
|
Delete "$SMPROGRAMS\$0\Tools and Demos\InstallTest.lnk"
|
|
Delete "$SMPROGRAMS\$0\Tools and Demos\InstallTest.pif" ; -- for Win98
|
|
Delete "$SMPROGRAMS\$0\Tools and Demos\DecoderPro3.lnk"
|
|
Delete "$SMPROGRAMS\$0\Tools and Demos\Preferences.lnk"
|
|
Delete "$SMPROGRAMS\$0\Tools\Preferences.lnk"
|
|
Delete "$SMPROGRAMS\$0\Tools\InstallTest.lnk"
|
|
Delete "$SMPROGRAMS\$0\Uninstall.lnk"
|
|
RMDir "$SMPROGRAMS\$0\Tools and Demos\"
|
|
RMDir "$SMPROGRAMS\$0\Tools\"
|
|
RMDir "$SMPROGRAMS\$0\"
|
|
Delete "$DESKTOP\DecoderPro.lnk"
|
|
Delete "$DESKTOP\PanelPro.lnk"
|
|
Delete "$DESKTOP\SoundPro.lnk"
|
|
Delete "$DESKTOP\LccPro.lnk"
|
|
Delete "$DESKTOP\DecoderPro3.lnk"
|
|
|
|
; -- Remove registry entries
|
|
DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI"
|
|
StrCmp $MultiUser.InstallMode "CurrentUser" Done
|
|
DeleteRegKey HKLM "Software\Microsoft\Active Setup\Installed Components\JMRI"
|
|
|
|
Done:
|
|
; -- Remove log file
|
|
Delete "$INSTDIR\install.log"
|
|
; -- Remove the uninstaller
|
|
Delete "$INSTDIR\Uninstall.exe"
|
|
; -- Delete install directory if empty
|
|
RmDir "$INSTDIR"
|
|
|
|
SectionEnd
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Section descriptions
|
|
; -------------------------------------------------------------------------
|
|
|
|
LangString DESC_SEC_CORE ${LANG_ENGLISH} "Core ${APP} files; these are all required for a functional ${APP} install"
|
|
LangString DESC_SEC_MAIN ${LANG_ENGLISH} "The main ${APP} program and essential resources"
|
|
LangString DESC_SEC_COMLIB ${LANG_ENGLISH} "Library files for Java COM port access"
|
|
LangString DESC_SEC_HELP ${LANG_ENGLISH} "${APP} Help files"
|
|
LangString DESC_SEC_LIB ${LANG_ENGLISH} "General ${APP} Library files"
|
|
LangString DESC_SEC_JYTHON ${LANG_ENGLISH} "Jython example script files"
|
|
LangString DESC_SEC_RES ${LANG_ENGLISH} "Additional ${APP} resource files (sounds, icons, etc.)"
|
|
LangString DESC_SEC_XML ${LANG_ENGLISH} "XML files (Decoder definitions, etc.)"
|
|
LangString DESC_SEC_WEB ${LANG_ENGLISH} "Web files"
|
|
LangString DESC_SEC_SMSC ${LANG_ENGLISH} "Select Start Menu Shortcuts to create"
|
|
LangString DESC_SEC_SCSMSC ${LANG_ENGLISH} "Creates Start menu shortcuts for DecoderPro, PanelPro and InstallTest"
|
|
LangString DESC_SEC_DTSC ${LANG_ENGLISH} "Select Desktop Shortcuts to create."
|
|
LangString DESC_SEC_DPDTSC ${LANG_ENGLISH} "Creates a Desktop shortcut for DecoderPro"
|
|
LangString DESC_SEC_PPDTSC ${LANG_ENGLISH} "Creates a Desktop shortcut for PanelPro"
|
|
LangString DESC_SEC_SPDTSC ${LANG_ENGLISH} "Creates a Desktop shortcut for SoundPro"
|
|
LangString DESC_SEC_LPDTSC ${LANG_ENGLISH} "Creates a Desktop shortcut for LccPro"
|
|
LangString DESC_SEC_CRUNINST ${LANG_ENGLISH} "Creates an Uninstaller for ${APP}"
|
|
LangString MESSAGE_INVALID_DIRECTORY ${LANG_ENGLISH} "This not a valid installation directory. Please reselect"
|
|
LangString MESSAGE_WIN2K_OR_LATER ${LANG_ENGLISH} "${APP} version ${JMRI_VER} is not supported on this version of Windows. Installation cannot continue."
|
|
|
|
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_CORE} $(DESC_SEC_CORE)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_MAIN} $(DESC_SEC_MAIN)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_COMLIB} $(DESC_SEC_COMLIB)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_HELP} $(DESC_SEC_HELP)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_LIB} $(DESC_SEC_LIB)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_JYTHON} $(DESC_SEC_JYTHON)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_RES} $(DESC_SEC_RES)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_XML} $(DESC_SEC_XML)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_WEB} $(DESC_SEC_WEB)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_SMSC} $(DESC_SEC_SMSC)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_SCSMSC} $(DESC_SEC_SCSMSC)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_DTSC} $(DESC_SEC_DTSC)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_DPDTSC} $(DESC_SEC_DPDTSC)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_PPDTSC} $(DESC_SEC_PPDTSC)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_SPDTSC} $(DESC_SEC_SPDTSC)
|
|
!insertmacro MUI_DESCRIPTION_TEXT ${SEC_CRUNINST} $(DESC_SEC_CRUNINST)
|
|
!insertmacro MUI_FUNCTION_DESCRIPTION_END
|
|
|
|
; -------------------------------------------------------------------------
|
|
; - Additional Functions
|
|
; -------------------------------------------------------------------------
|
|
|
|
Function .onInit
|
|
; -------------------------------------------------------------------------
|
|
; - On installer initialisation, initialise MultiUser header, check OS
|
|
; - architecture and check for running on Win2k or later
|
|
; -------------------------------------------------------------------------
|
|
|
|
!insertmacro MULTIUSER_INIT
|
|
|
|
; -- Determine if we're running on Windows 98 or ME
|
|
; -- If so, show a message and then abort
|
|
StrCmp $PROFILE "" 0 Check64 ; -- prior to Win2k this is blank
|
|
;MessageBox MB_OK|MB_ICONSTOP "${MESSAGE_WIN2K_OR_LATER}"
|
|
Abort "WIN2K_OR_LATER" ;-- surprise surprise
|
|
|
|
Check64:
|
|
; -- Determine OS architecture
|
|
Call CheckIf64bit
|
|
Pop $x64
|
|
|
|
FunctionEnd
|
|
|
|
Function un.onInit
|
|
; -------------------------------------------------------------------------
|
|
; - On uninstaller initialisation, initialise MultiUser header and check
|
|
; - InstallMode
|
|
; -------------------------------------------------------------------------
|
|
|
|
!insertmacro MULTIUSER_UNINIT
|
|
|
|
; -- Check if InstallMode is the same as the command-line
|
|
${un.GetParameters} $0
|
|
StrCmp $0 "/$MultiUser.InstallMode" +2
|
|
Abort
|
|
|
|
FunctionEnd
|
|
|
|
Function DirectoryLeave
|
|
; -------------------------------------------------------------------------
|
|
; - Check that the user has chosen a valid location
|
|
; -------------------------------------------------------------------------
|
|
|
|
; -- Save variables to the stack
|
|
Push $0
|
|
|
|
; -- Check to see if Install Directory is set to 'Program Files'
|
|
StrCmp $INSTDIR $PROGRAMFILES Invalid Valid
|
|
|
|
Invalid:
|
|
; -- If so, display a message and ask user to re-select
|
|
MessageBox MB_OK|MB_ICONEXCLAMATION "$(MESSAGE_INVALID_DIRECTORY)"
|
|
|
|
; -- Restore variables from the stack
|
|
Pop $0
|
|
; -- Abort the movement to the next page
|
|
Abort
|
|
|
|
Valid:
|
|
; -- Restore variables from the stack
|
|
Pop $0
|
|
|
|
FunctionEnd
|
|
|
|
#Function InstallValidationWizard
|
|
#; -------------------------------------------------------------------------
|
|
#; - Launches the JMRI InstallValidationWizard
|
|
#; - input: none
|
|
#; - output: none
|
|
#; -------------------------------------------------------------------------
|
|
# Exec "$INSTDIR/LaunchJMRI.exe apps.wizard.installvalidation.InstallValidation"
|
|
#FunctionEnd
|
|
|
|
Function CheckJRE
|
|
; -------------------------------------------------------------------------
|
|
; - Check for Java Runtime Environment
|
|
; - input: none
|
|
; - output: none
|
|
; -------------------------------------------------------------------------
|
|
|
|
; -- Save variables to the stack
|
|
Push $0
|
|
Push $1
|
|
Push $2
|
|
Push $3
|
|
|
|
; -- Initialise JRE architecture variable
|
|
StrCpy $x64JRE 0
|
|
|
|
; -- If we're running x64, first check for 64-bit JRE
|
|
StrCmp 0 $x64 JRESearch
|
|
DetailPrint "Setting x64 registry view..."
|
|
SetRegView 64
|
|
StrCpy $x64JRE 1
|
|
|
|
; -- Read from host machine registry
|
|
JRESearch:
|
|
IntOp $JREINSTALLCOUNT $JREINSTALLCOUNT + 1
|
|
ClearErrors
|
|
DetailPrint "Checking default java first"
|
|
; -- Check default java
|
|
ClearErrors
|
|
nsExec::ExecToStack "java -fullversion"
|
|
IfErrors JRESearchC ; continue to use registry
|
|
Pop $0
|
|
Pop $0 ;-- response code
|
|
DetailPrint "java.exe returns [$0]"
|
|
push $0
|
|
call GetInQuotes
|
|
Pop $R1
|
|
IfErrors JRESearchC ; continue to use registry
|
|
${VersionCompare} "$R1" "${JRE_VER}" $0
|
|
IntCmp $0 2 JRESearchC 0 JRESearchC
|
|
DetailPrint "Using default java"
|
|
goto JRECheck
|
|
JRESearchC:
|
|
; -- loop over javasoft keys looking for our version or greater
|
|
StrCpy $0 0
|
|
loopKeys:
|
|
EnumRegKey $1 HKLM "SOFTWARE\JavaSoft" $0
|
|
StrCmp $1 "" doneLoopKeys ;-- end of keys
|
|
StrCpy $2 0
|
|
loopSubKeys:
|
|
EnumRegKey $3 HKLM "SOFTWARE\JavaSoft\$1" $2
|
|
DetailPrint "Checked [SOFTWARE\JavaSoft\$1] item [$2] got [$3]"
|
|
StrCmp $3 "" doneSubKey ;--end of subkeys
|
|
ReadRegStr $6 HKLM "SOFTWARE\JavaSoft\$1\$3" "JavaHome"
|
|
DetailPrint "JavaHome [$6]"
|
|
IfErrors nextSubKey
|
|
${VersionCompare} "$3" "${JRE_VER}" $5
|
|
DetailPrint "comp [$3] [${JRE_VER}] [$5]"
|
|
IntCmp $5 2 nextSubKey 0 nextSubKey
|
|
;--have good one
|
|
StrCpy $R0 $6 ;-- stuff home
|
|
StrCpy $R1 $3 ;-- stuff version
|
|
goto JRECheck
|
|
nextSubKey:
|
|
IntOp $2 $2 + 1
|
|
DetailPrint "$1 $3 Checked"
|
|
goto loopSubKeys
|
|
doneSubKey:
|
|
IntOp $0 $0 + 1 ;-- move to next top level key
|
|
DetailPrint "$1 checked - movin on"
|
|
goto loopKeys
|
|
doneLoopKeys:
|
|
;-- still no good java
|
|
; -- If we've got an error here on x64, switch to the 32-bit registry,
|
|
; -- decrease the counter and then re-try
|
|
StrCmp 0 $x64JRE JREInitInstall
|
|
SetRegView 32
|
|
DetailPrint "Setting x86 registry view..."
|
|
StrCpy $x64JRE 0
|
|
IntOp $JREINSTALLCOUNT $JREINSTALLCOUNT - 1
|
|
Goto JRESearch
|
|
|
|
JREInitInstall:
|
|
StrCpy $3 "No JAVA installation found"
|
|
; -- If this is the first time around the loop then try to run/download a JRE
|
|
; -- If this is a subsequent time, something went wrong with the JRE install
|
|
StrCmp $JREINSTALLCOUNT 1 JREInstall NoJRE
|
|
|
|
JRECheck:
|
|
StrCpy "$JAVADIR" "$R0"
|
|
; -- Check we have the required JRE version
|
|
; -- If so, jump to the end of this section
|
|
${VersionCompare} "$R1" "${JRE_VER}" $0
|
|
StrCmp $0 "2" JREVerCheck JREFound
|
|
|
|
JREVerCheck:
|
|
MessageBox MB_YESNO|MB_ICONQUESTION "Found JAVA version $1 - ${APP} requires version ${JRE_VER} (preferred) \
|
|
or later (may not work) \
|
|
\nYou will have install and/or set jre directory before using JMRI.$\nInstall now and fix later?" IDYES JREFound IDNO 0
|
|
quit
|
|
JREInstall:
|
|
; -- First, check to see if a suitable installer exists in the JRE sub-directory
|
|
; -- below that of the installer. It needs to be of the format jre*.exe
|
|
; -- (This is to allow for automatic off-line installation
|
|
; -- and creation of turn-key distribution CD's)
|
|
|
|
FindFirst $2 $JREINSTALLER "$EXEDIR\JRE\jre*.exe"
|
|
|
|
; OfflineJREInstall:
|
|
StrCmp $JREINSTALLER "" DownloadJREQuery
|
|
StrCpy $JREINSTALLER "$EXEDIR\JRE\$JREINSTALLER"
|
|
StrCpy $OFFLINEINSTALL "1"
|
|
Goto StartJREInstall
|
|
|
|
DownloadJREQuery:
|
|
; -- Now check to see if we have an Internet Connection
|
|
; -- If so, then ask the user to download the latest JRE.
|
|
Call CheckInternetConnection
|
|
Pop $0 ; Get the return value
|
|
StrCmp $0 "offline" NoJRE
|
|
; MessageBox MB_YESNO|MB_ICONQUESTION "$3$\nWould you like to download JAVA from the internet?" IDYES DownloadJRE IDNO NoJRE
|
|
|
|
NoJRE:
|
|
MessageBox MB_YESNO|MB_ICONQUESTION "$3$\nYou will need to install JAVA ${JRE_VER} (prefered) \
|
|
or later (may not work) before you can use JMRI$\nDo you wish to continue installing?" \
|
|
IDYES JREFound IDNO 0
|
|
quit
|
|
; DownloadJRE:
|
|
; StrCpy $JREINSTALLER "$TEMP\JRE.exe"
|
|
; nsisDL::Download /TIMEOUT=30000 ${JRE_URL} $JREINSTALLER
|
|
; Pop $0 ; Get the return value
|
|
; StrCmp $0 "success" DownloadOK
|
|
; MessageBox MB_ICONSTOP "Failure downloading JAVA$\nPlease try manually from ${JRE_URL}$ \
|
|
; \nInstallation of ${APP} ${JMRI_VER} cannot continue"
|
|
; Quit
|
|
;
|
|
; DownloadOK:
|
|
; StrCpy $OFFLINEINSTALL "0"
|
|
|
|
StartJREInstall:
|
|
ExecWait $JREINSTALLER ; Run the JRE installer
|
|
StrCmp $OFFLINEINSTALL "1" JREInstallComplete
|
|
Delete $JREINSTALLER ; If downloaded, delete the temporary downloaded file
|
|
|
|
JREInstallComplete:
|
|
Goto JRESearch
|
|
|
|
JREFound:
|
|
; -- We've successfully located a suitable JRE version.
|
|
; -- If this was found within the x64 registry view, reset to x86
|
|
; -- registry view so that our entries are placed in the expected place.
|
|
StrCmp 0 $x64JRE JREDone
|
|
DetailPrint "Reverting to x86 registry view so that our entries are placed in the expected place."
|
|
SetRegView 32
|
|
|
|
JREDone:
|
|
; -- Restore variables from the stack
|
|
Pop $3
|
|
Pop $2
|
|
Pop $1
|
|
Pop $0
|
|
|
|
FunctionEnd
|
|
|
|
Function CheckInternetConnection
|
|
; -------------------------------------------------------------------------
|
|
; - Check for a valid Internet connection
|
|
; - input: none
|
|
; - output: top of stack ("online" or "offline")
|
|
; -------------------------------------------------------------------------
|
|
|
|
; -- Save variables to the stack
|
|
Push $0
|
|
Push $1
|
|
Push $2
|
|
|
|
; -- Determine the status of the Internet connection
|
|
DetailPrint "Checking Internet Connection Status..."
|
|
System::Call 'wininet.dll::InternetGetConnectedState(*l .r2, i 0) i.r0'
|
|
StrCmp $0 "1" 0 +3
|
|
StrCpy $0 "online"
|
|
Goto +2
|
|
StrCpy $0 "offline"
|
|
IntOp $1 $2 & ${INTERNET_CONNECTION_CONFIGURED}
|
|
StrCmp $1 ${INTERNET_CONNECTION_CONFIGURED} 0 +2
|
|
DetailPrint "System has a valid Internet configuration, but it may not be connected"
|
|
IntOp $1 $2 & ${INTERNET_CONNECTION_LAN}
|
|
StrCmp $1 ${INTERNET_CONNECTION_LAN} 0 +2
|
|
DetailPrint "System uses a local area network to connect to the Internet"
|
|
IntOp $1 $2 & ${INTERNET_CONNECTION_MODEM}
|
|
StrCmp $1 ${INTERNET_CONNECTION_MODEM} 0 +2
|
|
DetailPrint "System uses a modem to connect to the Internet"
|
|
IntOp $1 $2 & ${INTERNET_CONNECTION_PROXY}
|
|
StrCmp $1 ${INTERNET_CONNECTION_PROXY} 0 +2
|
|
DetailPrint "System uses a proxy server to connect to the Internet"
|
|
IntOp $1 $2 & ${INTERNET_RAS_INSTALLED}
|
|
StrCmp $1 ${INTERNET_RAS_INSTALLED} 0 +2
|
|
DetailPrint "System has RAS installed"
|
|
IntOp $1 $2 & ${INTERNET_CONNECTION_OFFLINE}
|
|
StrCmp $1 ${INTERNET_CONNECTION_OFFLINE} 0 +2
|
|
DetailPrint "System is in offline mode"
|
|
|
|
DetailPrint "...done. Internet Connection is $0"
|
|
|
|
; -- Restore variables from the stack
|
|
Pop $2
|
|
Pop $1
|
|
Exch $0
|
|
|
|
FunctionEnd
|
|
|
|
Function nsDialogRemoveOldJMRI
|
|
; -------------------------------------------------------------------------
|
|
; - Identifies install created by old InstallVise installer and prompts for
|
|
; - removal
|
|
; - input: none
|
|
; - output: none
|
|
; -------------------------------------------------------------------------
|
|
|
|
; -- Save variables to the stack
|
|
Push $0
|
|
Push $1
|
|
Push $2
|
|
Push $3
|
|
Push $4
|
|
|
|
; -- Default to not upgrading
|
|
StrCpy $UPGRADING 0
|
|
|
|
; -- First check if JMRI has been installed (Current User first, then All Users)
|
|
ReadRegStr $0 HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI" "DisplayName"
|
|
StrCmp $0 "" 0 CheckOld
|
|
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI" "DisplayName"
|
|
StrCmp $0 "" Done
|
|
|
|
CheckOld:
|
|
; -- If we get to here, then an old JMRI installation exists
|
|
StrCpy $UPGRADING 1
|
|
|
|
; -- Default to uninstall and backup
|
|
StrCpy $REMOVEOLDJMRI.BACKUPONLY 0
|
|
StrCpy $2 "This previous installation should be removed.$\r$\nThis wizard will backup any existing roster files and settings."
|
|
StrCpy $3 "Remove old ${APP} installation and backup existing files"
|
|
|
|
; -- Now check if installed via old InstallVise installer
|
|
; -- by checking if the 'DisplayVersion' registry key exists
|
|
; -- (this key is not created by the old installer)
|
|
ReadRegStr $4 HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI" "DisplayVersion"
|
|
StrCmp $4 "" 0 Backup
|
|
ReadRegStr $4 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI" "DisplayVersion"
|
|
StrCmp $4 "" Remove Backup
|
|
|
|
Backup:
|
|
; -- If we get to here, we've been previously installed by the new installer
|
|
; -- so, we can read the install location and prompt for backup
|
|
|
|
; -- As we've not yet set the installation context (i.e. All Users or Current User)
|
|
; -- first attempt to get the registry string from 'Current User'
|
|
ReadRegStr $0 HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI" "InstallLocation"
|
|
StrCmp $0 "" 0 CopyToInstDir
|
|
; -- Location wasn't in 'Current User' - attempt to retrieve from 'All Users'
|
|
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI" "InstallLocation"
|
|
StrCmp $0 "" PrepareBackup CopyToInstDir
|
|
|
|
CopyToInstDir:
|
|
StrCpy $INSTDIR $0
|
|
|
|
PrepareBackup:
|
|
StrCpy $REMOVEOLDJMRI.BACKUPONLY 1
|
|
StrCpy $2 "This wizard will backup any existing roster files and settings."
|
|
StrCpy $3 "Backup existing files"
|
|
|
|
Remove:
|
|
; -- If we've got this far, we need to create the page
|
|
Var /GLOBAL REMOVEOLDJMRI.CHECKBOX
|
|
|
|
!insertmacro MUI_HEADER_TEXT "Check for previous version" "Check for a previous installation of ${APP}."
|
|
|
|
; -- Return the HWND of this dialog
|
|
nsDialogs::Create 1018
|
|
Pop $0
|
|
|
|
; -- Create the controls and assign call-back functions
|
|
${NSD_CreateLabel} 0u 0u 100% 12u "${APP} setup has detected a previous installation of ${APP}."
|
|
Pop $0
|
|
${NSD_CreateLabel} 0u 14u 100% 20u "$2"
|
|
Pop $0
|
|
${NSD_CreateLabel} 0u 36u 100% 12u "Backup files will be stored in the following location:"
|
|
Pop $0
|
|
${NSD_CreateText} 0u 50u 100% 12u "$PROFILE\JMRI_backup"
|
|
Pop $0
|
|
SendMessage $0 ${EM_SETREADONLY} 1 0
|
|
|
|
${NSD_CreateLabel} 0u 70u 100% 12u "Any existing backup will be moved to the following location:"
|
|
Pop $0
|
|
${NSD_CreateText} 0u 84u 100% 12u "$PROFILE\JMRI_backup_old"
|
|
Pop $0
|
|
SendMessage $0 ${EM_SETREADONLY} 1 0
|
|
|
|
${NSD_CreateCheckBox} 0u 120u 100% 8u "$3"
|
|
Pop $REMOVEOLDJMRI.CHECKBOX
|
|
${NSD_OnClick} $REMOVEOLDJMRI.CHECKBOX RemoveOldJMRICheckboxChange
|
|
; -- If this is a backup only install, select the checkbox if installed version is older
|
|
StrCmp $REMOVEOLDJMRI.BACKUPONLY "0" ShowDialog
|
|
${VersionCompare} "${JMRI_VER}" "$4" $0
|
|
StrCmp $0 "1" 0 ShowDialog
|
|
${NSD_SetState} $REMOVEOLDJMRI.CHECKBOX ${BST_CHECKED}
|
|
|
|
ShowDialog:
|
|
Call RemoveOldJMRICheckboxChange
|
|
|
|
; -- Show the dialog
|
|
nsDialogs::Show
|
|
|
|
Done:
|
|
; -- Restore variables from the stack
|
|
Pop $4
|
|
Pop $3
|
|
Pop $2
|
|
Pop $1
|
|
Pop $0
|
|
|
|
FunctionEnd
|
|
|
|
Function RemoveOldJMRICheckboxChange
|
|
; -------------------------------------------------------------------------
|
|
; - Enable or disable the 'Next >' button whenever the checkbox is changed
|
|
; - input: none
|
|
; - output: none
|
|
; -------------------------------------------------------------------------
|
|
|
|
; -- Save variables to the stack
|
|
Push $0
|
|
Push $1
|
|
|
|
; -- Get pointer to the 'Next >' button
|
|
GetDlgItem $0 $HWNDPARENT 1
|
|
|
|
; -- Get current state
|
|
${NSD_GetState} $REMOVEOLDJMRI.CHECKBOX $1
|
|
StrCpy $REMOVEOLDINSTALL $1
|
|
|
|
; -- Check to see if this is a backup only install which means that we
|
|
; -- don't need to disable the 'Next >' button
|
|
StrCmp $REMOVEOLDJMRI.BACKUPONLY "1" Done
|
|
|
|
; -- If we get here, we need to consider disabling the 'Next >' button
|
|
StrCmp $1 ${BST_CHECKED} Enable
|
|
|
|
EnableWindow $0 0
|
|
Goto Done
|
|
|
|
Enable:
|
|
EnableWindow $0 1
|
|
|
|
Done:
|
|
; -- Restore variables from the stack
|
|
Pop $1
|
|
Pop $0
|
|
|
|
FunctionEnd
|
|
|
|
Function RemoveOldJMRI
|
|
; -------------------------------------------------------------------------
|
|
; - Backup existing preferences and roster files etc. and if required
|
|
; - removes install created by old InstallVise installer.
|
|
; - input: none
|
|
; - output: none
|
|
; -------------------------------------------------------------------------
|
|
|
|
; -- Save variables to the stack
|
|
Push $0
|
|
|
|
StrCmp $REMOVEOLDINSTALL ${BST_UNCHECKED} Done
|
|
|
|
; -- Get pointer to the 'Next >' button
|
|
GetDlgItem $0 $HWNDPARENT 1
|
|
EnableWindow $0 0
|
|
|
|
; -- Perform backup
|
|
RMDir /r "$PROFILE\JMRI_backup_old"
|
|
Rename "$PROFILE\JMRI_backup" "$PROFILE\JMRI_backup_old"
|
|
CreateDirectory "$PROFILE\JMRI_backup"
|
|
CopyFiles "$PROFILE\JMRI\*.*" "$PROFILE\JMRI_backup"
|
|
CopyFiles "$INSTDIR\classes" "$PROFILE\JMRI_backup"
|
|
CopyFiles "$INSTDIR\lib" "$PROFILE\JMRI_backup"
|
|
|
|
; -- Check if uninstall required
|
|
StrCmp $REMOVEOLDJMRI.BACKUPONLY "1" Done
|
|
|
|
; -- Retrieve the InstallVise uninstall string and run the uninstaller
|
|
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI" "UninstallString"
|
|
HideWindow
|
|
ExecWait "$0"
|
|
BringToFront
|
|
|
|
; -- Check if InstallerVise uninstaller has run
|
|
ReadRegStr $0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\JMRI" "DisplayName"
|
|
StrCmp $0 "" Done
|
|
|
|
MessageBox MB_OK|MB_ICONSTOP "The previous installation of ${APP} was not successfully removed. This installation cannot continue."
|
|
Quit
|
|
|
|
Done:
|
|
; -- Restore variables from the stack
|
|
Pop $0
|
|
|
|
FunctionEnd
|
|
|
|
Function SaveLog
|
|
; -------------------------------------------------------------------------
|
|
; - Saves the log to specified file
|
|
; - input: filename to store at top of stack
|
|
; - output: none
|
|
; -------------------------------------------------------------------------
|
|
|
|
; -- Save variables to the stack
|
|
Exch $5
|
|
Push $0
|
|
Push $1
|
|
Push $2
|
|
Push $3
|
|
Push $4
|
|
Push $6
|
|
|
|
; -- Find the log SysListView32 control
|
|
FindWindow $0 "#32770" "" $HWNDPARENT
|
|
GetDlgItem $0 $0 1016
|
|
StrCmp $0 0 Exit
|
|
|
|
; -- Create the file
|
|
FileOpen $5 $5 "w"
|
|
StrCmp $5 "" Exit
|
|
|
|
; -- Retrieve number of items in the log
|
|
SendMessage $0 ${LVM_GETITEMCOUNT} 0 0 $6
|
|
|
|
; -- Allocate memory for LVITEM structure
|
|
System::Alloc ${NSIS_MAX_STRLEN}
|
|
Pop $3
|
|
StrCpy $2 0
|
|
System::Call "*(i, i, i, i, i, i, i, i, i) i \
|
|
(0, 0, 0, 0, 0, r3, ${NSIS_MAX_STRLEN}) .r1"
|
|
|
|
; -- Loop through the log
|
|
Loop:
|
|
; -- Check if at end of log
|
|
StrCmp $2 $6 Done
|
|
; -- Retrieve log item
|
|
System::Call "User32::SendMessageA(i, i, i, i) i \
|
|
($0, ${LVM_GETITEMTEXT}, $2, r1)"
|
|
System::Call "*$3(&t${NSIS_MAX_STRLEN} .r4)"
|
|
; -- Write it to the file
|
|
FileWrite $5 "$4$\r$\n"
|
|
IntOp $2 $2 + 1
|
|
Goto Loop
|
|
|
|
Done:
|
|
; -- Close the file and free memory
|
|
FileClose $5
|
|
System::Free $1
|
|
System::Free $3
|
|
|
|
Exit:
|
|
; -- Restore variables from the stack
|
|
Pop $6
|
|
Pop $4
|
|
Pop $3
|
|
Pop $2
|
|
Pop $1
|
|
Pop $0
|
|
Exch $5
|
|
|
|
FunctionEnd
|
|
|
|
Function un.DeleteFromLog
|
|
; -------------------------------------------------------------------------
|
|
; - Deletes installed files based on the specified log file
|
|
; - input: log filename on top of stack
|
|
; - output: none
|
|
; -------------------------------------------------------------------------
|
|
|
|
; -- Save variables to the stack
|
|
Exch $0 ; -- Logfile filename
|
|
Push $1 ; -- Current Directory
|
|
Push $2 ; -- Current File
|
|
Push $3 ; -- File handle
|
|
Push $4 ; -- Current line
|
|
Push $5 ; -- Temporary variable
|
|
Push $6 ; -- Temporary variable
|
|
|
|
; -- Open the log file readonly
|
|
FileOpen $3 "$0" "r"
|
|
|
|
NextLogEntry:
|
|
; -- Read the next line of the file
|
|
FileRead $3 $4
|
|
|
|
; -- Determine the log entry type
|
|
; -- Check if this entry is for a directory
|
|
StrCpy $5 $4 15
|
|
StrCmp $5 "Output folder: " RemoveDir
|
|
|
|
; -- Check if this entry is for a file
|
|
StrCpy $5 $4 9
|
|
StrCmp $5 "Extract: " RemoveFile
|
|
|
|
; -- Check if at end of log
|
|
StrCmp $4 "" Done
|
|
|
|
; -- Don't care about this log entry type - retrieve next log entry
|
|
Goto NextLogEntry
|
|
|
|
RemoveDir:
|
|
; -- Try to remove this directory (only if empty)
|
|
RMDir $1
|
|
StrCpy $5 $1
|
|
|
|
DeleteParents:
|
|
; -- Will attempt to delete parent directorys until it runs out.
|
|
; -- Not aggressive, just removes empty directories recursively
|
|
; -- before moving onto a new directory to delete files from
|
|
Push $5
|
|
Call un.GetParent
|
|
Pop $5
|
|
StrCmp $5 "" +2
|
|
RMDir $5
|
|
StrCmp $5 "" 0 DeleteParents
|
|
|
|
; -- Get the directory name
|
|
StrCpy $1 $4 1024 15
|
|
StrLen $5 $1
|
|
; -- trim off the newline
|
|
IntOp $5 $5 - "2"
|
|
StrCpy $1 $1 $5
|
|
Goto NextLogEntry
|
|
|
|
RemoveFile:
|
|
; -- Get the filename
|
|
StrCpy $2 $4 1024 9
|
|
StrLen $5 $2
|
|
; -- trim off the newline
|
|
IntOp $5 $5 - "2"
|
|
StrCpy $2 $2 $5
|
|
; -- check if ends with "... 100%"
|
|
StrCpy $6 $2 8 -8
|
|
StrCmp $6 "... 100%" 0 DeleteFile
|
|
; -- trim off the "... 100%"
|
|
IntOp $5 $5 - "8"
|
|
StrCpy $2 $2 $5
|
|
|
|
DeleteFile:
|
|
Delete "$1\$2" ; Try to delete the new file
|
|
Goto NextLogEntry
|
|
|
|
Done:
|
|
; -- Close the file
|
|
FileClose $3
|
|
|
|
; -- Restore variables from the stack
|
|
Pop $6
|
|
Pop $5
|
|
Pop $4
|
|
Pop $3
|
|
Pop $2
|
|
Pop $1
|
|
Exch $0
|
|
|
|
FunctionEnd
|
|
|
|
Function un.GetParent
|
|
; -------------------------------------------------------------------------
|
|
; - Retrieve Parent directory of specified child directory
|
|
; - input: Child directory name on top of stack
|
|
; - output: Parent directory name on top of stack
|
|
; -------------------------------------------------------------------------
|
|
|
|
; -- Save variables to the stack
|
|
Exch $0 ; -- Child directory
|
|
Push $1 ; -- Counter
|
|
Push $2 ; -- String length
|
|
Push $3 ; -- Temporary storage
|
|
|
|
; -- Initialise counter
|
|
StrCpy $1 0
|
|
|
|
; -- Retrieve length of string
|
|
StrLen $2 $0
|
|
|
|
Loop:
|
|
; -- Increment counter
|
|
IntOp $1 $1 + 1
|
|
; -- Check if we're at end of string
|
|
IntCmp $1 $2 Get 0 Get
|
|
; -- Get the n'th character from the right
|
|
StrCpy $3 $0 1 -$1
|
|
; -- Check if it's a directory separator
|
|
StrCmp $3 "\" Get
|
|
Goto Loop
|
|
|
|
Get:
|
|
; -- Remove n characters from the end of the string
|
|
StrCpy $0 $0 -$1
|
|
|
|
; -- Restore variables from the stack
|
|
Pop $3
|
|
Pop $2
|
|
Pop $1
|
|
Exch $0
|
|
|
|
FunctionEnd
|
|
|
|
Function CheckIf64bit
|
|
; -------------------------------------------------------------------------
|
|
; - Check if this installer is running on a 64-bit system
|
|
; - input: none
|
|
; - output: result on top of stack (0 if 32-bit; 1 if 64-bit)
|
|
; -------------------------------------------------------------------------
|
|
|
|
; -- Save variables to the stack
|
|
Push $0
|
|
|
|
; -- Determine if we're running on x64
|
|
System::Call kernel32::GetCurrentProcess()i.s
|
|
System::Call kernel32::IsWow64Process(is,*i.s)
|
|
Pop $0
|
|
|
|
; -- Restore variables from the stack
|
|
Exch $0
|
|
|
|
FunctionEnd
|
|
|
|
Function RemoveObsoleteDecoderDefinitions
|
|
; -------------------------------------------------------------------------
|
|
; - Remove obsolete decoder definition files
|
|
; - input: none
|
|
; - output: none
|
|
; -------------------------------------------------------------------------
|
|
; -- For now, doing this the 'quick & dirty way (TM)'
|
|
Delete "$INSTDIR\xml\decoders\SoundTraxx_Tsu_1Diesel.xml"
|
|
Delete "$INSTDIR\xml\decoders\SoundTraxx_Tsu_1EMD567.xml"
|
|
Delete "$INSTDIR\xml\decoders\SoundTraxx_Tsu_1EMD645.xml"
|
|
Delete "$INSTDIR\xml\decoders\SoundTraxx_Tsu_Diesel_ALCO1.xml"
|
|
Delete "$INSTDIR\xml\decoders\SoundTraxx_Tsu_Diesel_ALCO2.xml"
|
|
Delete "$INSTDIR\xml\decoders\SoundTraxx_Tsu_Diesel_EMD567.xml"
|
|
Delete "$INSTDIR\xml\decoders\SoundTraxx_Tsu_Diesel_EMD645.xml"
|
|
Delete "$INSTDIR\xml\decoders\SoundTraxx_Tsu_Diesel_EMD710.xml"
|
|
Delete "$INSTDIR\xml\decoders\SoundTraxx_Tsu_Diesel_FM1.xml"
|
|
Delete "$INSTDIR\xml\decoders\SoundTraxx_Tsu_Steam_1Hvy.xml"
|
|
Delete "$INSTDIR\xml\decoders\SoundTraxx_Tsu_Steam_2Med.xml"
|
|
Delete "$INSTDIR\xml\decoders\SoundTraxx_Tsu_Steam_3Light.xml"
|
|
Delete "$INSTDIR\xml\decoders\SoundTraxx_Tsu_Steam_4Lt_Log.xml"
|
|
Delete "$INSTDIR\xml\decoders\SoundTraxx_Tsu_Steam_DRGC.xml"
|
|
Delete "$INSTDIR\xml\decoders\SoundTraxx_Tsu_Steam_DRGK.xml"
|
|
Delete "$INSTDIR\xml\decoders\SoundTraxx_Tsu_Steam_Cab_Frwd.xml"
|
|
FunctionEnd
|