New features:
- Added support for concurrent builds on the same machine
- If the environment variable INSTALL4J_LICENSE_KEY is set, its value is used as the license key. This is useful for CI pipelines.
Bug fixes:
- Regression in 11.0: Generated .deb files could be broken under some circumstances
- Regression in 11.0: After the "Install Files" action was executed, sys.preferredJre was set to the temporary JRE location instead of the installed JRE location
- Regression in 11.0: The project XML file format was not stable on Linux/Unix
- Regression in 11.0: Fixed exception during compilation when the name of the configured JDK for script compilation name is empty
- "Add a desktop link" action: Desktop links were not created for the current user on Linux
- "Run executable or batch file" action: Fixed an NPE when redirecting to a log file and the output is only one line break
- Added missing messages in localizations
- PKCS#11 code signing: improved matching of private keys and code signing certificate in the new PKCS#11 implementation
- macOS folder installer: If no generated launchers were included, the uninstaller could not display error messages related to JRE detection
- Drag and drop in compiler and installer variable edit dialogs was broken
- When closing the editor for form component insets with Ctrl-Enter, the currently edited value was not saved
- Auto-provisioning of the Gradle plugin did not work correctly on macOS and Linux
- Gradle plugin: Fixed problems related to the Gradle configuration cache
- Build tool integrations: The "license" parameter could not be empty
New features:
- macOS notarization is now cross-platform, so you can fully build all media files on Linux or Windows
- Added a PKCS #11 option for code signing on macOS
- Added a selection dialog for the PKCS #11 slot index, listing HSM descriptions and manufacturers
- Improved PKCS #11 certificate selection with better listings of available certificates.
- A PKCS #11 certificate can now be selected by its label in addition to the issuer/serial selection.
- For PKCS #11, an automatic selection option for the code signing certificate with the longest validity period is now available
- When choosing certificate files on the "General Settings → Code Signing step", hidden files are now shown in the file chooser
- Added an option on the "General Settings → Code Signing" step to use an external executable for Windows code signing.
- Added a "Chained certificates" directory option for Windows code signing. This is required if your intermediate certificates are not included in the key store.
- The script editor now shows caret highlights. Caret highlights feature separate colors for read and write access of the selected element.
- Improved the proposals for code completion in script editors, including tab-expandable code snippets like "serr", "log" and "error".
- Code completion in the script editor now suggests automatically as you type by default. You can disable this behavior in the Java editor settings.
- Improved imports for code completion and for type parameters of implementation stubs in the script editor. Static imports are used for install4j API classes.
- Added an action to rename variables in script editors (Code → Rename)
- Added an action to reformat the entire script or selected code in script editors (Code → Reformat Code). Formatting options can be specified with an Eclipse settings file in the Java editor settings.
- In the Java editor settings, you can now configure the tab size.
- In script editors, typing a closing brace now reformats the preceding block. This behavior can be disabled in the Java editor settings.
- Added an action to optimize the imports for the current script (Code → Optimize Imports)
- Added an action to show the available parameters for all overloaded methods of the method call at the caret (Code → Parameter Info)
- Added actions to move between problems in the current script (Code → Navigate to Next/Previous Highlighted Problem)
- The script editor now has "Extend Selection" and "Shrink Selection" actions in the "Edit" menu that select surrounding or contained blocks of code around the current caret position.
- The script editor now has a "Quick fix" action with a wide range of quick fixes for detected problems (Code → Quick Fix). If quick fixes are available at the caret, a floating popup will appear.
- The script editor now has a "Refactor" action with a wide range of refactorings for the currently selected element (Code → Refactor)
- The script editor now supports alternative keymaps for IntelliJ, Eclipse, and VS Code with appropriate versions for macOS. On first use, you choose a keymap and you can change it later on in the Keymap dialog.
- Added a sensitivity option for compiler variables to avoid writing values to the runtime config file for selected variables
- Platform-specific overriding for compiler variables
- When overriding a compiler variable, it is now possible to reference the base value with the syntax ${compiler:variableName}. This applies to both platform-specific and media-specific overrides.
- Added an option for compiler variables and pre-defined installer variables to convert file and path separators to the build or the target platform
- Added a "Read value from a JSON file" action
- Added a "Count occurrences in a JSON file" action
- Added a "Modify JSON files" action
- The "Copy files and directories" and "Move files and directories" actions now support symlinks. The "Symlink handling" property controls whether the content is copied or whether the same relative or absolute target should be used. The "On symlink creation failure" property offers different failure strategies during symlink handling.
- The "Create a symbolic link" action now also works on Windows. Execution on Windows is controlled by the "Execute on Windows" property and is disabled by default.
- Added a "Previous installations" search sequence entry type on the "General Settings → JRE Bundles → Search Sequence" step to be able to reuse the installed JRE in update installers. Only installations with the same application ID are considered.
- "Install files" action: The action now copies a JRE from a different installation directory if it was found by the "Previous installations" search sequence entry. This prevents problems that would otherwise occur when the previous installation is uninstalled.
- Update downloaders can now make decisions based on the JRE version of the update installer by inspecting com.install4j.api.update.UpdateDescriptorEntry#getJreMinVersion and #getJreMaxVersion.
- Support for dark mode in the initial progress dialog of Windows installers (Windows 11+)
- New language: Ukrainian
- Gradle, Maven, and Ant plugins can now auto-provision the appropriate version of install4j. Specifying the installDir parameter is still possible, but no longer required.
- The Gradle plugin is now compatible with the configuration cache if you define your own file inputs on the task by making method calls on the "inputs" property of the task.
- The "license" and "installDir" properties that were exclusively present in the install4j Gradle extension are now also available on the install4j Gradle tasks
- JDK providers now check once per day if the download URL of a JDK has changed and refresh the generated JDK bundle if necessary
- Windows installers now use "AppData\Local\install4j\t" instead of "AppData\Temp" as their temporary directory. This reduces conflicts with security policies and anti-virus tools.
- Updated and improved the "Open PDF viewer" action and the "PDF display" form component.
- Added support for variables with enum values in response files
- The "Ask user" failure strategy for actions and action groups now has separate sub-options for allowing "Retry", "Ignore" and "Quit" answers from the user
- "Checkbox", "Single radio button" and "Radio button group" form components: Added an "Also execute when screen is activated" property for the selection script for cases where the script manages the visibility or enablement of other form components
- Support multiple file selection in file choosers for generated icons and for properties that hold multiple files
- If a JDK cannot be downloaded during JRE bundle generation, the failing URL is now logged so you create exceptions in your firewall configuration
- "Multi-line label" and "Multi-line HTML label" form components: Added a "Make text selectable" property so that the user can select text with the mouse and copy it to the clipboard
- "Add a desktop link" action: On Linux with GNOME desktop environments, the created desktop links are now directly executable and do not show a dialog asking whether to trust the link.
- "Register Add/Remove item": The action can now be executed without elevation, so that it creates an entry for the current user only
API changes:
- Added ExternalFile#getOriginalName to retrieve the original name of an externally packaged file at runtime
Bug fixes:
- Script editor: Fixed "No Javadoc is available at the current caret position" for install4j API classes when Java 9+ was used
- On macOS, the keyboard shortcuts for navigating between installer screens have been changed to Ctrl+Option+Left Arrow and Ctrl+Option+Right Arrow, ensuring they work even when the focus is within text fields
- Undo and redo toolbar buttons and menu entries in text and code editors were always disabled
- The generated ICNS icons for macOS could be faulty if larger images were used
- the -manual command line switch for Windows installers did not always enable the "Locate" button
- Missing custom code during the instantiation of beans printed a misleading error message. Now the missing classes are mentioned in the error message.
- "Load a response file" action: Comments in the response file were not preserved if the "Register variables for response file" property was selected
- Bean names are no longer written to the runtime config, and only bean IDs are annotated into stack traces.
- Concurrent executions of the install4j compiler could corrupt downloaded JDK bundles
- Adoptium JRE installations were not detected on Windows
- After disabling a bean with customizer tabs like the "Installation type" screen and enabling it again, only the properties were shown
- "Installation type" screen: If the selected installation type is user-configurable and the user does not change the installation type in an upgrade installer, the selected components are not reset to the default set of the installation type anymore
- SWT/QT launchers on macOS now only support launching installer applications in a new process to avoid a deadlock.
- Formatted text field form components: Users could not delete all characters if "Prevent empty user input" was not selected
- The main class selector in the "Java invocation" step of the launcher wizard did not add the module name if the main class was from a directory module path entry
- The keyboard shortcut for the variable dropdown in text fields is now Command+Alt+V on macOS to avoid printing a character
New features:
- Added configurable namespaces for XML actions that have an "XPath" property
- Added a way to set the authentication file for the license server on the command line by specifying --license=KEY[,AUTH_FILE]
Bug fixes:
- Regression in 10.0.8: "Run executable or batch file" action: When elevated to maximum privileges and "Show console window" was selected, the action failed with an NPE
- Regression in 10.0.8: "Read value from XML file" action did not work with namespaces anymore
- Overriding properties of form components in styles did not work for some form component types, such as buttons
- When copying and pasting a screen with overridden style configurations, the project could not be saved
- "Button" form component: If leaving the action list empty, an exception was thrown at runtime
New features:
- Support recommended and suggested dependencies for .deb media files with * and ? suffixes in the list of dependencies
- "Register Add/Remove item" action: The action can now be run in unelevated mode to create entries for the current user
Bug fixes:
- Regression in 10.0: When XML actions modified documents, they removed the prefixes of namespaced elements
- Regression in 10.0: The "Help customizer script" of the installer was broken.
- Regression in 10.0: Running the installer with -help did not use the configured look and feel for the help window
- "Run executable or batch file" action: When "Show console window" property was selected, batch files were not executed, and an error message was displayed instead for modern JVMs
- "Add VM options" action: Variables in the "VM options" property were not replaced
- "Modify classpath" action: Variables in the "Classpath entries" property were not replaced
- "Fix line feeds" action: The file chooser only allowed selecting files and not directories for the "Text files" property
- Fixed an exception in the script editor with Zulu 8 JDKs on macOS
- For modern JREs, the Javadoc for install4j API classes could not be displayed in the script editor
- Fixed several issues with property value changes in the IDE not being saved
- Fixed mistakes in the Italian localization
- When removing an RPM archive created with install4j, empty directories were not removed on newer Linux systems
- The language selection dialog was not wide enough for very large font sizes
- Directory chooser dialog on Linux: For large font sizes, the layout was not correct, and the cancel button was not localized.
- When bundling a JRE on Linux, the temporary directory in the working directory was not deleted under some circumstances
- Using ~ in redirection files for the home directory did not work on Linux/Unix
New features:
- Enabled control flow guard (CFG) for Windows binaries generated by install4j
- Support new Windows 10 DPI awareness settings in the executable manifest. This fixes problems when moving windows between monitors with different DPI settings.
- Show strong configuration and build warnings for macOS single bundle media files which do not work on macOS 14+ anymore and will be removed in install4j 11
- Support Alt-+/- on numeric keypad as secondary keyboard accelerators for the enable/disable actions
- Report bean IDs in annotated stack traces
Bug fixes:
- If a variable was entered for the JRE bundle version that resolved to non-digit characters, an NPE was thrown
- Executable processors for Windows media files: Fixed tools like smctl from DigiCert ignoring input files
- Zulu hotfix releases with identical version number were not used
- Calling context.getWizardContext().setControlButtonEnabled/setControlButtonVisible for the cancel button in unattended mode with progress bar did not work
- Fixed a problem with a JRE bundle not being used when a media file had an overridden JRE bundle with a major version larger than the one configured under General Settings → JRE bundles
- UpdateChecker.executeScheduledUpdate is now executed in a background thread to avoid blocking
- A SecurityManager deprecation warning was shown when running with an OpenJ9 JRE
- Redirection files with installer variables in the file name caused an error in the uninstaller
- Proxy auto-detection for URLs without host name and protocol threw an exception
New features:
- Support JDK generation on Linux ARM and Alpine Linux
API changes:
- Added UpdateDescriptor#getEntryForCurrentMediaFileId
Bug fixes:
- Regression in 10.0: Configuration of installation components: Saving of the settings "Initially selected for installation", "User can change selection state" as well as the dependencies was broken
- Regression in 10.0: Project export was broken
- Regression in 10.0: "Create common data files where possible" was broken for Windows installers
- i18n messages were not replaced in the descriptions for macOS file associations
- "Help → Show Directories → Show Directory Containing the Global Config File" showed the config file in the installation directory
- Windows launchers: There was maximum length limit for the classpath that has been removed in this release
- If a compiler variable entry in the distribution tree had an empty compiler variable value, the selection tree in the Files → Installation Components step was broken
- Installation component configuration: Changing settings on the "Options", "Descriptions" and "Dependencies" tabs did not mark the project as modified
- HTTP download actions: Fixed an NPE when a null proxy was present in the list of system proxies
- The -temp parameter for Windows installers did not work as expected
- Fixed a problem with temporary directories containing an exclamation mark
New features:
- Notarization on macOS: If available, use the new notarytool command line executable instead of the deprecated altool
- "HTML or text display" form component: The underlying JTextPane is now exposed as a configuration object in scripts
Bug fixes:
- ZIP file actions: STORED entries could sometimes not be extracted and an exception was thrown
- Always apply an empty entity resolver when parsing XML files, regardless of the protocol in the systemId to avoid an attack from externally supplied XML files.
- Regression in 10.0.4: The "Execute launcher" action did not work anymore in custom installer applications contained in macOS single bundle installers
- Compile-time file associations for macOS: The icon file property was not saved with platform-independent file separators
- Trees with checkboxes always scrolled to the end when nodes were expanded
Bug fixes:
- Appstore packages could no longer be verified because of issues with binaries in JRE bundles
- Using ~ in redirection files as advertised in the documentation did not work on macOS and Windows
- Single bundle installers could throw an exception at the end of the installer on macOS 13 (Ventura), leading to an incomplete installation
- macOS binaries are now compiled for 10.12 which fixes printing issues on macOS 13.0 x64 (Ventura)
- DER encoding is now used for code signing signatures. This fixes the optional CVE-2013-3900 mitigation on Windows where binaries produced by install4j would appear as unsigned.
- Updated zlib to 1.2.13 to address CVE-2022-37434
- Do not fail if the JDK for script compilation is not configured and/or the fallback JDK cannot be downloaded. Instead, print a warning to explain the problem together with a strategy for fixing it.
- If install4j.noWinInetConnection=true is set, fall back to Java proxy detection and also consider http(s).proxyHost and http(s).proxyPort if the proxyHost and proxyPort system properties are not set
- Startup notifications that occurred before a listener was registered were not delivered in order
Bug fixes:
- If dark mode was used in macOS 13 (Ventura), the install4j IDE as well as generated installers would hang on startup
- macOS installers: Under some circumstances, symbolic links would not be uninstalled
- macOS installers: The initial progress dialog did not use dark mode according to the system appearance when running with with the Intel architecture
- The "Test installer" action added the JRE bundle each time and checked for latest JRE versions which made the action considerably slower
Bug fixes:
- Regression in 10.0: New projects could have inconsistent styles that lead to an NPE in the installer, preventing the installer window from being shown. For projects with this symptom that were created with 10.0 or 10.0.1, using the "Reset styles to the default" button on the Installer → Screens & Actions → Styles view will fix the project.
- Regression in 10.0: If only class path or module path were changed in the launcher wizard, the changes were not saved
- Regression in 9.0.7: Module graph analysis for creating a JRE bundle for modular applications was broken
- Regression in 9.0.3: PDF extensions did not work with a Java version lower than 11
- Running installers in unattended mode on Amazon EC2 Mac Instances via SSH did not work
- If a script property was modified and reset to an empty string, it was still shown as modified in the install4j IDE
New features:
- "Schedule update installation" action: Added a "Check for newer installation" property that checks for a manually installed newer version directly before execution. The default value is false and corresponds to the previous behavior.
Bug fixes:
- Regression in 10.0: Overridden properties of styles were broken under some circumstances
- Regression in 10.0: The media file output directory was not saved when the file chooser was used
- Regression in 10.0: Pack200 compression for distributed JAR files did not work when the install4j compiler was running with Java 17
- Paths in overridden properties of styles were not made relative when the project was saved
- The latest JDK mechanism did not work when the JDK version changed. The new JDK was downloaded but the old JRE bundle was still used.
- If a JDK was configured explicitly in the Java editor settings, the JDK was most likely only available on the developer machine and not on a build server, and so no JDK was not downloaded for script compilation. Now a fallback to the auto-download is performed if the configured JDK is not found.
- Script compilation did not work on macOS with auto-downloaded JDKs for Java 9+
- Full screen mode in macOS was broken
- Compiler variables view: Fixed undo for changes on the "Overrides" tab
- Code signing view: Setting the files for the "Directories excluded for additional signatures" to an empty list did not work if the list had at least one file before
New features:
- Support for Windows on ARM
- Support for Apple App Store submission
- "Add a Windows firewall rule" action
- Undo/Redo functionality for all modifications in the install4j IDE
- Support for default values for bean properties with a gutter marker for non-default values and a context menu action to reset the default value
- Static configuration of file associations and URL handlers for macOS
- Optionally global single instance mode
- On Windows, the per-user single instance mode now optionally covers all active sessions
- Configurable Unix desktop file settings for external launchers
- When building on Linux/macOS, the existing file and directory modes can now be used
- Detection if JREs are headless on Linux machines to avoid failures for installers and GUI launchers
- If only a headless JRE can be found on Unix/Linux, force headless mode for the installer
- Unified logging for background updates with the -Dinstall4j.updateLog=true system property for launchers
- "Schedule update installation" action: Added a "Retry inhibition in minutes" property to make the inhibition time between failed installer invocations configurable
- Improved documentation for auto-update functionality and background downloaders
- "Change Windows file rights" and "Change access rights for a key in the Windows registry" action: Added an "Access mode" property to grant, set, deny, or revoke rights. Previously rights could only be granted.
- Dark mode for documentation
- "Hyperlink URL label" and "Hyperlink action label" form components: Added a new property category "Hyperlink label" to make font and link colors configurable
- "Read text from file" action: Added a "Save as string array" property
- "Stop a service" action: Added a "Minimum wait time in ms" property to make the timeout configurable
- Find installed Microsoft, Azul Zulu, and Temurin JREs on Windows
- Screens, actions, and form components that have a comment are now shown with a comment badge in the configuration tree
- Show number of configured version-specific VM parameter entries in the "Java invocation" step of the launcher wizard
- Added an optional dialog for editing launcher VM parameters and version-specific VM parameter entries in the "Java invocation" step of the launcher wizard
- The icon compiler can now create ICNS icons with Retina images
- Support for switching between light and dark mode on the fly in the IDE
API changes:
- Added WinServices#stop with a timeout parameter
- Added com.install4j.api.windows.WinFirewall for programmatically configuring Windows firewall rules
- Added com.install4j.api.beaninfo.ActionBeanInfo#setWindowsOnly to tell install4j that an action will only run on Windows. The install4j IDE will take this into account when changing properties of the "Request privileges" action based on the value set with ActionBeanInfo#setFullPrivilegesRequired.
Bug fixes:
- "Replace text in XML files" action: With Java 10+, there were additional empty lines after element nodes
- Launcher configuration: "Additional content for .desktop file" and "Options for service launchers" were not included in the project report
- In the Java search sequence, the newest matching JRE in the registry was not always used
- Adoptium was not the default JDK provider for new projects
- macOS: Notarization is now more resilient against temporary failures of Apple's infrastructure
- Fixed a memory leak when running custom installer applications in a new process multiple times
- Code editor had wrong cursor offsets in multi-monitor setups where some monitors have integer scale factors
- Per-user MSI uninstaller did not work correctly without an already installed per-machine MSI that was created with install4j
- MSI files did not work without a configured publisher entry
New features:
- Elliptic curve keys for code signing are now supported
Bug fixes:
- Hyperlink form components: Dark mode was not supported
- "Create a file association" action did not work on Linux with elevated privileges when an icon was specified
- "Create a file association" action: Fixed installed icons on Ubuntu 22.04
- Live dark mode switch did not work for non-visible screens that were not form screens, like the "Create program group" screen
- Use POSIX/PAX extensions in generated TAR files to allow larger Unix installers
- Fixed problem with large group IDs in generated TAR files
- Fixed PKCS11Exception: CKR_USER_NOT_LOGGED_IN during code signing
- Fixed incomplete code signing with DLL and EXE files from JMODs for some JDK providers
- The compiler variables sys.jreBundleVersion sys.jreBundleArch could not be used in the media file name
- Updated zlib to 1.2.12 to address CVE-2018-25032
Bug fixes:
- Variables were not replaced for the "Initial key" property when setting a new wizard index and the "Step key" property when changing the wizard index step for a screen
- A deprecation warning was printed in console mode with Java 17
- AIX java 9+ jre bundles could not be created
- JRE bundles for the latest Amazon Corretto releases could not be created
New features:
- Added a JDK provider for Adoptium. This is now the default JDK provider.
- Added an option to collect file association actions for macOS installer media files at compile-time on the "Executable info → macOS options" step of the launcher wizard. This is required on the ARM architecture where the Info.plist file cannot be modified after the installation. This will become the default behavior in install4j 10.
Bug fixes:
- Regression in 9.0.3: Leading or trailing spaces in the default launcher arguments produced empty arguments
- Regression in 9.0: Blocking in-process launcher integrations did not set the Look and Feel anymore
- Regression in 9.0: The "Insert variables" action in editors did not work in contexts where i18n messages are not supported
- Regression in 9.0: If no JRE bundle and no maximum Java version was configured, the minimum Java version was incorrectly used as the maximum version
- Regression in 9.0: Windows installers did not work with IBM 9+ JREs
- "Load a response file" and "Create a response file" actions: The variable selection in the edit dialog of properties for excluded variables inserted the replacement syntax instead of the variable names
- "Create a file association" action: Compiler variables were not supported in the "Icon file for macOS" property
- Empty directories in the distribution tree with an uninstall policy "Never" were deleted by the uninstaller
- Fixed a StackOverflowException in the communication with the elevated helper process
- macOS: The configured native library directories had no effect for command line launchers
- macOS: JAR files with an & in their file name did not work
- MSI installers: Temporary files were not always deleted
- MSI installers: Starting an already installed per-machine installation again did not work as expected
- RPM archives: Signed RPMs were considered source packages by older RPM releases
Bug fixes:
- DMGs could not be opened in the Finder on macOS 12 beta
- Command line parameter parsing changes in 9.0.3 also applied to fixed parameters. This created problems with quoted Windows paths.
- Jetbrains JDK provider failed to show any releases due to Bintray being unavailable
- Fixed memory leak for in-process installer applications
- Regression in 8.0: Public fields of beans in custom code without getters could no longer be deserialized
- "Run executable or batch file" action: The action failed for batch files if the temporary directory contained a & character
New features:
- Floating license customers can now request license keys for the web license server instead of using the on-premises license server
- Command line parameters are now handled in the same way as by the default java launcher. This fixes cases of invalid parsing due to unbalanced quotes.
- Text overrides for enum bean properties now also support the displayed texts of enum values and not only integer indices or enum constant names
Bug fixes:
- Regression in 9.0: Custom icons on disabled form components were no longer shown in gray
- Regression in 9.0: Gradle and Maven plugins were compiled with -target 11
- "License agreement" form component: The "User must scroll to bottom" property had no effect under some circumstances
- "Dark mode switcher" component: Keyboard focus was not shown
- Script edits were not saved for form components if the "Insert ID" dialog was invoked
- JetBrains JRE provider did not show the newest releases after Bintray was frozen
- Fixed NPE for pre-created JRE bundles that do not contain a release file
- Cache information about platforms required for building a universal JRE bundle for macOS
- Gracefully handle the removal of the SecurityManager class in Java 18
- macOS: New JFrame instances could be shown as tabs, depending on the system settings
- dpkg --verify was broken for .deb Linux packages
New features:
- The Windows task bar icon now shows compilation progress as well as installation progress in generated installers
Bug fixes:
- Regression in 9.0: Low-resolution images were painted too small on HighDPI displays
- Regression in 9.0.1: file:// URLs were not handled correctly any more by the HTTP actions
- Regression in 9.0.1: Fixed problems with server authentication in the HTTP actions on Windows
- macOS: Notarization was performed in dry run
- macOS: JRE bundle generation with universal binaries was broken for Zulu 8u282+
- macOS: Notarization was broken for recent JetBrains Runtime JDKs
- Fixed incompatibility with RPM 4.16.1.3
New features:
- Reworked proxy handling to be more reliable and use native connections on Windows
- Support for encrypted and authenticated communication with the floating license server
- Support for remote checkout of a license from the floating license server
Bug fixes:
- macOS: JRE bundle creation with "latest" as the minor version did not work for universal binaries
- Warnings for overwritten files in the distribution tree were printed even if the source files were the same
- Removed dependency of the FlatLaf look and feel on java.logging
- Code signing: Globalsign timestamp server URL did not work anymore. This was used as a fallback if the DigiCert timestamp server URL did not work.
New features:
- Cross-platform Look & Feel with dark mode
- Auto-detection of dark mode and automatic switching between light and dark mode
- Added a "Dark mode switcher" form component that can also be used in styles
- Support for IntelliJ UI themes
- Added support for custom look & feels with look and feel handlers in custom code
- Added Amazon Corretto and Azul Zulu JDK providers
- Universal binaries architecture selection in the "Installation options" step of the macOS media wizards. Launchers then work with both x64 and aarch64 (Apple Silicon) architectures.
- Universal JRE bundle generation on macOS. If the Universal binaries architecture is selected, the generated JRE bundle will include universal binaries for both x64 and aarch64 if the selected JDK release contains those architectures.
- JRE bundling is now the default for new projects. The default JDK is set to the latest AdoptOpenJDK release in the LTS series at the time of the install4j release.
- The Java project version is now primarily taken from the selected JDK. Minimum and maximum versions can be overridden in the "Search sequence" step.
- Added support for using the latest JDK release in a selected major release with the syntax 11/latest or by selecting the major release folder node in the JDK release dialog
- Added a "Show all modules" button on the JRE bundles step to inspect all modules provided by the selected JDK. The "Show included modules" button continues to show only those modules that will be included in the JRE bundle.
- Use the selected JDK for the script editor and script compilation with automatic configuration of the Javadoc URL
- Introduced sharing IDs for shared JREs to limit the scope of sharing. In this context the installation directories for shared JREs have changed.
- Show a warning count at the end of the build with a hint on how to disable selected warnings
- In verbose mode, show warning suppression hints after each warning with hyperlinks to add the corresponding compiler variables
- Added a --fail-on-warning command line option for the compiler as well as corresponding properties for Gradle, Maven, and Ant tasks
- Script compilation warnings are now printed during the build
- Added a Maven plugin with the same functionality as the Gradle plugin
- The "hello" sample project now has a Maven POM that shows how to work with the Maven plugin
- Configurable setup application for macOS single bundle archives
- Configurable post-installation and pre-uninstallation applications for Linux RPM and DEB archives
- "Request privileges" action: Added support for Linux
- Search for IDs, names, property values, and comments in the Screens & Actions view, form component dialogs and styles
- The file mode of additional top-level files in DMGs on the "Installer options → DMG files and options" step in the macOS media wizards can now be overridden
- Added an "Extracted archive" entry type for additional top-level files in DMGs on the "Installer options → DMG files and options" step in the macOS media wizards
- Gradle plugin: Added a CreateBundle task to pre-create JRE bundles from installed JREs
- Separate JDK providers for AdoptOpenJDK with HotSpot and OpenJ9
- macOS code signing: Added a field for directories that should be excluded for macOS code signing, such as pre-signed application bundles
- Added an option to preserve internal symlinks for non-Windows media files on the Files → File Options step
- "Request privileges" action: Implemented encrypted communication between the installer application and its elevated helper process
- "Install a service action": Added the "Restart after milliseconds", "Maximum number of restarts" and "Reset failure count after seconds" properties to control the restart behavior of execution failures. These are child properties of the "Restart on Failure" property
- Optional display of alerts in unattended mode with progress dialog. This new mode can be activated with the "Show alerts" property for installer applications or the -alerts command line parameter.
- The Unix default directory mode is now used for manual directory entries in the distribution tree and can be overridden when editing a manual directory entry
- Custom installer applications: Added a "Create executable" property to prevent the creation of executables. In this case, the custom installer application can only be launched through the ApplicationLauncher API and launcher integrations.
- Write timestamps to the build log after build has finished and to the installation log before the installer exits.
- "Installation type" screen: Descriptions of installation type descriptions can now be shown in console mode
- When a file that is already present in the distribution tree is overwritten by another entry, a warning is printed at build time
- Using ~ for the home directory is now supported for launcher redirection files
- install4j config files, JRE caches, and pre-created JRE bundles are now stored in platform specific directories
- The custom base directory for installer media files now supports installer variables, making it easier to install into locations like ${installer:sys.localAppdataDir}.
- Check project errors when saving, offering an option to save anyway
- JDBC actions: Added a "Log warnings" property
- "Register Add/Remove item": Show installation size in "Apps & Features"
API changes:
- The callback in ApplicationLauncher.launchApplication/launchApplicationInProcess can now override Callback#createProgressListener to receive all progress information
- Added com.install4j.api.UiUtil to help with the look and feel, for example to find out if the desktop or the installer application is in dark mode
- Added com.install4j.api.laf.LookAndFeelEnhancer to help with custom UI creation. The singleton instance is available from UiUtil.getLookAndFeelEnhancer().
- Added com.install4j.api.laf.LookAndFeelHandler to integrate custom look and feels
- Added com.install4j.api.windows.SpecialFolder#LOCAL_APPDATA_LOW/PROGRAM_FILES/PROGRAM_FILES_COMMON
- Added com.install4j.api.Util#isArchive to check whether the installation is an archive media file
- Added FormComponentBeanInfo#setHideVisibilityScript to hide the visibility script configuration for form components that manage their own visibility
- Added com.install4j.api.contextProgressInterface#isUnattendedProgressDialog and ProgressInterface#isAlertsShown to detect the unattended mode with progress dialog and whether alerts are shown or not in that mode
- com.install4j.api.windows.WinRegistry could not read or write QWORD values
Bug fixes:
- "Install files" action: Removed "Update bundled JRE" property. Deselecting this property had the potential to create problems during updates, especially if the minimum Java version number changed
- "HTTP request" action: The installer variables configured with the "Variable name for response code" and "Variable name for response headers" properties were not set if the HTTP request failed.
- "Execute launcher" action: The launcher was always executed without elevation, even if the "Action elevation type" was set to elevate privileges.
- Ant task: disableNotarization attribute did not work
- The --add-modules option of the createbundle application did not support comma-separated lists of modules as claimed by the documentation
- New frames were not opened on the same monitor as the last active frame
- Installer applications now set the system property jdk.lang.Process.allowAmbiguousCommands=false to avoid cmd.exe injections. In unattended mode as well as in console mode, installers already behaved this way in previous versions.
- Pressing Ctrl+C did not work correctly when questions were asked while running an action
- Fail if the timestamp server returns an HTTP error code
- Unix launchers could fail when they were started repeatedly in quick succession
- Linux/Unix installers: The configured Unix directory mode was not used for the installation directory
- macOS: Fixed integer overflow for large DMG archives
- macOS: If the "Run executable action" was passed a DMG as the executable, it did not execute the contained installer on macOS 11+ under some circumstances. This affected the execution of the background updater.
- macOS: Drop-down lists in property tables would sometimes be placed in the top-left corner of the screen
Bug fixes:
- "Modify ZIP file action": The action did not preserve the ZIP entry compression method on recent versions of macOS
- "Check box" and "Single radio button" form components: Fixed stackoverflow when selecting coupled form components
- The JRE Version of pre-created bundles was not detected correctly. This could lead to warnings during the build and wrong DPI awareness settings for Windows launchers if a 1.8 JRE was bundled.
- Some PKCS12 files could not be read if no unlimited strength cryptography was present in the JRE
- If -Dinstall4j.language was passed to an installer to manually set the language, the initial progress dialog ignored that parameter and used the auto-detected language
- Recent OpenJ9 JVMs did not work on macOS with launchers generated by install4j
- Windows: Removed the default VM parameter -Dsun.java2d.noddraw=true for installer applications because it caused problems when used in remote desktop connections
New features:
- The install4j GUI and compiler now run natively on ARM macOS (Apple M1)
- Code signing: Added support for AES256 encrypted PKCS12 key files
- JetBrains JDK provider: macos-aarch64 platform can now be used and notarized
Bug fixes:
- Fixed notarization for Zulu Java 11 macos-aarch64 builds
- Older Java 11 and 8 releases were not shown for the AdoptOpenJDK JDK provider
- JetBrains JDK provider: Releases were not sorted correctly in the selection dialog
- Regression in 8.0.9: Under some circumstances, scripts and multi-line strings were not saved after closing the editor.
- Calling ApplicationInfo.getInstallerVariable() always returned variables for the first project it was used on
New features:
- Support for ARM macOS (Apple M1). The desired architecture (x64 or arm64) can be chosen in the media wizard.
- Added a "Custom fragment for Info.plist" property for installer applications
API changes:
- Added FormEnvironment#scrollComponentToVisible(FormComponent) to scroll the form panel to the specified form component
Bug fixes:
- "Installation type" screen and "Installation components selector" form component: If descriptions were expanded initially, the layout of the description could be broken
- "Default execution mode" property of installer applications: Compiler variables were not replaced.
- "Create program group" action: Modified settings could get lost when saving while the program group entries tab was visible
- "Install a service" action: On Unix, if systemd is not used and the link in /etc/init.d could not be created, the action did not fail
- "Console handler" form component: When hitting CTRL-D, instead of cancelling during a terminal prompt, an exception was printed and the installer application continued
- "Require installer privileges" action: Wrong failure message was displayed in the uninstaller (Regression in 8.0.8)
- Fixed layout of form components that are made visible and are not within the displayed viewport
- Dissolving a bean group did not mark the project as modified
- Changing a variable in the dialog for pre-defined installer variables did not mark the project as modified
- Regression: Changes in coupled form components would no longer be saved
- When using the dialog to insert a form component ID, the saved form components instead of the current form components were used
- When cancelling installer applications with CTRL-C in console mode while input was read from the console, execution continued for a short time in some cases
- In generated install4j launchers, runtime messages were always in English and not in the auto-detected locale
- When the installer icon was customized and no cross-platform images or ICNS file was specified, the fallback to the default macOS icon was announced in a warning, but the build failed subsequently
- In the Japanese translation, the product name install4j was translated by mistake
- "Choose" button in file chooser was not translated anymore
- Specifying relative path names to createbundle did not work
New features:
- "Modify an environment variable on Windows" action: Added a "Remove" option.
- The mouse navigation buttons now work in the view selector to navigate to previously selected views.
API changes:
- Added methods getException() and getLog() to InstallerActionEvent providing the exception for abnormal termination and the logging output of an action
Bug fixes:
- Regression in 8.0.4: Startup error dialog in launchers did not work anymore, instead the launcher would hang when an error in the main class was detected
- Liberica JDK provider did not download full JDKs with JavaFX for recent releases
- MSI UAC dialog now shows the application name instead of a generated MSI file name
- The JAR file resource/i4jruntime-dev-additional.jar was missing from the distribution
- Pre-created bundles caused an exception during build under some circumstances
- Fixed a memory leak when running in-process installer applications multiple times
- When pasting actions into action lists, the "Can be executed multiple times" and "Failure strategy" properties were not reset to the fixed values that are required in action lists
- Pre-signed JRE bundles that contain the CodeResources hashes file in binary form could not be notarized. This affects Oracle 8u261+.
- Exclusion of symlinks in the distribution tree did not work correctly because the target was excluded as well
- Symlinks that point to a target within an "include directory entry" in the distribution tree were duplicated as separate files. Define the compiler variable sys.ext.dirEntryFollowAllSymlinks=true to restore the previous behavior.
Bug fixes:
- Liberica JDK provider: New releases were not listed anymore
- Regression in 8.0.6: Custom localization files in .properties format could not override system messages anymore
- When using compiler variables, the "Java version" step could show a message "The minimum version must be lower than the maximum version" in some cases
- "Delete files and directories" action: Rollback was not supported for symbolic links to directories
- "Delete files and directories" action: Mode and modification time were not restored for directories on Unix
- macOS: Notarization now scans JAR and ZIP files for binaries recursively
- Linux: The uninstaller could change the mode of directories that were not removed
New features:
- "Delete files and directories" action: Support rollback for symbolic links
- Linux/Unix media files can now require a 64-bit JVM via the new "Bundled JRE → JRE search sequence options" step in the corresponding media wizards
API changes:
- API: Added Context#cancel and Context#runWithSuspendedActions to cancel the installer application programmatically and ask the user a question while the currently running actions are suspended
Bug fixes:
- Regression in install4j 8.0: An empty JRE search sequence was reverted to the default after opening the project again
- "Show URL" action: The action failed if the scheme was empty or contained spaces
- Eliminate warnings during build about Java 14 and 15 class file version numbers
- AdoptOpenJDK provider: The deprecated v2 API has become unstable, and recent major versions were sometimes missing. By using the new AdoptOpenJDK v3 API this problem is fixed.
- The install4j runtime development artifact did not include i18n messages, so some API calls failed when called from the IDE
- The UI froze during the build if a variable replacement error occurred during code signing
- The JRE Bundle wizard did not work for Java 14 because the jdk.pack module is now removed
- macOS: Font rendering in the install4j IDE had wrong kerning
- macOS: Notarization of JRE bundles did not work anymore
New features:
- In development environments, the API runtime dependency now automatically provides the native libraries that are required by some API calls
- In development environments, the .install4j runtime directory can now be specified with the system property -Dinstall4j.runtimeDir. This allows all API calls to work, including those that require access to the config file, such as Variables.getCompilerVariable(...).
- Multiple timestamp signing services are now tried in the case of a failure. The default is now DigiCert with a fallback to GlobalSign. This can be changed on a per-project basis as explained in the documentation.
Bug fixes:
- "Download file" action: If the digest file was created with an external tool that produces upper case letters, the check would fail
- "Execute SQL script" action: Regexp delimiters and compound delimiters with a line break like ";\n" did not work
- "Check for running processes" action: Prevent closing the process dialog with the window close button
- "Set the owner of files and directories" action: Leading and trailing spaces in the "owner" property were not trimmed and lead to an unhelpful error message
- The native log file of Windows installers was not deleted
- Fixed deadlock during auto-save or while saving the project when the floating license server connection was lost
- Fixed memory leak when running in-process installer applications multiple times
- When using the filter text field in the certificate selection dialogs, the wrong certificate was selected
- The check whether modules are used by launchers was not made for merged projects, so a non-modular runtime library could be generated leading to a runtime failure in a merged launcher
- Text mode overrides for bean properties did not work for elevated actions
- Installers could throw an LzmaException for large data files
- Arguments in .vmoptions files were not trimmed on macOS
- API: If a scheduled version has already been installed manually, return false for UpdateChecker.isUpdateScheduled()
- macOS: Command line executables could not use bundled JRE in macos folder archives due to notarization requirements
- macOS: The reported file sizes of notarized media files in updates.xml was wrong
- macOS: Fixed signing Java 9+ JRE bundles for macOS folder archives when the build runs on macOS or Linux
- Windows: The -manual command line option for selecting a JRE did not work as expected when the direct JRE download options was selected for the media file
- Windows: Could not use absolute locations for the Windows JRE search sequence when the build was not performed on a Windows machine
- Windows: PKCS11 code signing for multiple Windows media files could fail
- Linux: systemd service installation did not work correctly with rpm update
- Linux: Build would fail if non-ASCII characters were present in the install4j installation directory
- Linux: KillMode=process is now set in systemd files by default so additional processes started by a service will not be stopped. This is required for update downloaders that are started by a service.
- Linux: Installers running in console or unattended mode on Java 8u242+ throw an exception if no physical fonts are present on the system
- Linux: Menu entries did not work for installations with spaces in path
- Linux: File associations did not work with spaces in the installation path
Bug fixes:
- Regression in 8.0.2: Overriding the font for the UI did not work anymore
- Regression in install4j 8.0.3: Java 8 JRE bundles created by install4j 7 did not work anymore
- AdoptOpenJDK bundle generation did not work anymore for recent JDK releases
- Checksums were not updated after macOS notarization info was stapled to media files
- User-visible error messages in unattended mode were only written to the console and not to the log file
- JetBrains JREs were considered as beta releases
- Generated macOS and Unix launchers did not work with JDKs that only included the java.base module
- macOS: Launcher restart after an automatic update of a single bundle archive did not work when a JRE was bundled
- Windows: Argument files (@<file>) were not supported for launchers
- Linux: When running the IDE with Java 8u232+/11.0.6+, all whitespaces in the UI fonts were missing
- "Replacement script for language code" property did not work on macOS and Unix
New features:
- Notarization on macOS and the associated Apple ID can now be configured on the "General settings → Code signing" step. The notarization option in the "Build" step was removed.
- Added a "Provider short name" configuration option on the "General settings → Code signing" step to select the team for the notarization call if the credentials are associated with multiple teams
- Correctly handle Java 14+ where Pack200 compression has been removed
- Support for JDK releases that target only selected platforms. When linking a JRE bundle and the current platform is not found in an overridden JDK release of a media file, the compiler now checks the project configuration for the JDK release.
- Added a "Convert spaces to underscores" option for the media file name pattern on the "General Settings → Media File Options" step
- "Upload file" action: Added an "Upload method" property that can switch the HTTP request method between POST and PUT
Bug fixes:
- Regression in 8.0: "Write properties to file" action: Deselecting the "Replace installer variables" property had no effect.
- "Log file viewer" form component: Relative files were not resolved with respect to the installation directory
- "Log file viewer" form component: Write-protected log files could not be displayed
- "File associations selector" form component: In Unix media files, no file association actions were shown. As a consequence the "File associations" screen was always hidden.
- Additional entries for desktop and service files were not saved
- macOS notarization did not work with folder archives that included a JRE bundle
- A custom application ID could lead to a bundle identifier that was invalid for macOS notarization
- Fixed JRE bundle creation for AdoptOpenJDK 9.x releases
- The JRE bundle creation wizard did not work for Amazon Corretto 8
- Only use packages from the java.base module for the core functionality for generated launchers
- Fixed a problem when unpacking JAR files packed with Pack200 on embedded Linux systems with BusyBox
- Fixed compatibility issues with systemd on Ubuntu LTS releases
- When an undefined installer variable with an elvis operator was used in a bean property, it was always resolved to the fallback at startup.
- Properties of type java.io.File that had an initial non-null value were not serialized
- Fixed out of memory problems when building large MSI files
New features:
- "Create a file association" action: The "File extension" property now accepts a comma-separated list of file extensions
- When setting -Dinstall4j.logTimestamps=true, each message in the log file is prepended with a time stamp
Bug fixes:
- Regression in 8.0: The back button was not visible if a screen had the "Safe back button" mode enabled and a previous screen that could not be reached with the back button had actions that could be executed multiple times
- Regression in 8.0: Tabbed panes in form screens could no longer be added
- Regression in 8.0: When setting an alternative log file, some content from the top of the log file was truncated
- AdoptOpenJDK provider did not work for Java 13
- JDK provider JAR files for custom JDK providers were not present in the "resource" directory of the install4j installation
- The VM passthrough parameters prefixed with -J were not added after the .vmoptions file, so they would not override values in the .vmoptions file
- The value of the compiler variable sys.time could vary during the build
- If redirection files for launchers were specified with subdirectories, the relative paths could have the wrong path separator
- Component selection tree: If the changeability of a component folder changed because of the state of its child nodes, the checkbox was not updated until the mouse was moved over it
- Text form components: The "Key validation expression" and the "Key listener script" did not log exceptions
- Windows launchers: The -Xss VM parameter was not used for the main thread
- macOS: An additional entitlements file did not work when media files were compiled on Windows
Bug fixes:
- Regression in 8.0: Screens in merged projects could not have the same ID as screens in the main project anymore
- JRE bundle creation failed if the temporary directory was not on the same file system as the user home directory
- Compiler variables in JDK release text field were replaced with their value when the project was saved
- JetBrains Runtime Java 8 bundles did not work
- "Show all modules" button showed an empty list for non-modular JDKs
- File associations for install4j project files did not work on macOS
- The about dialog for the install4j IDE on macOS was broken
- On macOS the IDE would quit without asking if the project should be saved if CMD-Q was pressed
- Fixed problems with keyboard navigation in lists under macOS
- Using archives in class and resource paths with a wildcard in the file name did not work if the path was absolute
- Console mode: If the executable for a launched process did not exist, a stack trace was printed
- Console mode: With nested component folders, the user selection could be wrongly extended to include all components in a folder
- Values of disabled properties were not readable when selected
New features:
- Support for notarization on macOS
- Support for PKCS#11 hardware tokens and the Windows keystore for code-signing on Windows
- MSI wrapper for Windows installers
- New on-demand JRE bundle creation with automatic download from the OpenJDK providers AdoptOpenJDK, Liberica and JetBrains Runtime
- Cross-platform linking of Java 9+ JRE bundles with the module requirements of all modular launchers together with additional configurable requirements and external JMODs
- SPI for writing new JDK providers that can be used by the JRE bundle creation
- Added a cross-platform "Register a URL handler" action. This allows you to start a launcher from a link in a web browser and facilitates migrations from Java Web Start to install4j.
- File associations and URL handlers for macOS archives
- File associations for Linux/Unix desktop environments
- Linux/Unix: Task bar items of AWT/Swing applications now show the icon from the .desktop file. install4j now generates unique main class wrappers for Linux/Unix media files, so the WMClass property of AWT windows is unique.
- "Create start menu entry" and "Add a desktop link" action: Additional entries for the created .desktop file can now be specified.
- Linux/Unix: Additional content for the .desktop service file can be configured on the "Executable info → Unix options" step of the launcher wizard. This is important for archives and also applies to the "Create program group" action.
- "Install a service" action: If systemd is detected on Linux/Unix, a .service file is written. Additional content for the systemd service file can be specified on the action.
- systemd support for RPM and DEB archives: Additional content for the systemd service file can be configured on the "Executable info → Unix options" step of the launcher wizard.
- Added an "Overrides" tab to the compiler variable definition where overrides for all media files can be configured in one place for a single variable
- Compiler variables from merged projects are now shown in the compiler variable selector
- Compile-time environment variables are now available from the compiler variables chooser dialog
- Added "Insert file" and "Insert directory" path menu items in the variable chooser popup for compiler variables and other appropriate text fields
- Compiler variable syntax ${compiler:file("<path>")} to insert contents of text files
- Added compiler variables "sys.mediaFileId", "sys.mediaFileName", "sys.install4jVersion", "sys.jreBundleArch" and "sys.jreBundleVersion"
- Added the installer variables "sys.date", "sys.time", and "sys.timestamp" containing the start time of the installer application. The format is the same as for the corresponding compiler variables containing the build time.
- Non-text properties in configuration of screens, actions, and form components now have "Switch to text mode" action in the context menu where installer variables can be used.
- Default values for missing variable values in the variable text field syntax of the type ${installer:variableValue?:defaultValue}
- "Html or text display" form component: The component can now show changing content of an installer variable
- "Html or text display" form component: Added a "Caret position after update" property
- "Run executable or batch file" action: Added "Update variable after each line" child properties for the variable redirection setting
- If the same text is logged repeatedly, only output it once together with the number of times it has been logged.
- Live installer variable text binding on "Label" and "Key-value pair" form components
- Live installer variable text binding for the window title of custom installer applications
- Live installer variable text binding for the "Help text" property of form components
- Added a "Text file editor" form component
- Added a "Log file viewer" form component
- Improved alternative log file mechanism: With the VM parameter -Dinstall4j.log=<file> a log file is written at the specified absolute or relative path, and is not deleted or moved to the installation directory. Installer variables can be used in the path.
- Configurable error log file for Windows installers with the new "Log file for stderr" property of the installer
- New documentation that has been rewritten from the ground up
- Documentation is now also available as an eBook in epub and Kindle formats
- Context-sensitive help relating to UI elements is now available directly in the UI
- New light and dark look and feels based on IntelliJ IDEA with HighDPI support for Windows and Linux
- Less verbose and more human-readable project file format that does not write default settings
- Support version ranges in version-specific VM options for launchers
- File installation failures in unattended mode are no longer ignored unless the -nofilefailures command line option is set
- "Download file" and "Install files" actions: Check SHA-256 instead of MD5 checksums. SHA-256 checksums are written to the file sha256sums in the media file output directory. The old md5sums file is written as well.
API changes:
- Added UpdateChecker.isVersionLessThanOrEqual and UpdateChecker.isVersionGreaterThan to cover the use cases of checking whether a version falls into a range and whether an upgrade is available
- Added Util#moveLogFile
- Added ApplicationInfo#getCompilerVariable(String) and ApplicationInfo#getInstallerVariable(String)
- Added Install4JPropertyDescriptor#setEmptyMessage to show an in-place explanation for significant empty property values
- Added Install4JPropertyDescriptor#setSuggestedValues to provide auto-completion for text properties
- In properties with an array type, installer variables with collection values are expanded as separate array elements. Previously, this was only implemented if the installer variables had array values. In the API, this new behavior affects the AbstractBean.replaceVariables() methods with array parameters.
- FormEnvironment#getId(FormComponent) now returns the display ID instead of the automatic ID
Bug fixes:
- "Read text file" action: Relative paths were not supported
- "Write text to file action": A trailing line feed was always written
- "Redirection" step of the launcher wizard: Launcher runtime variables were not offered in the variable chooser for the redirection files
- Response files could override the persisted result of the "Request privileges" action so that the "Require admin privileges" action in the uninstaller and in installer applications assumed the wrong state contained in the response file
- Do not print title of form screens in console mode if a console screen change handler is set.
- Launching executables on Windows no longer involved an intermediate batch file in the %TEMP% directory which could lead to problems with anti-virus software
- For OSGI applications, the method to hide the splash screen could not work due to classloader issues
- Linux/Unix launchers: Command lines are now considerably shorter, because "Scan directory" entries in the class path are now implemented with the wildcard expansion of the standard Java launcher
- Executing launchers in a macOS folder archive with a packed JRE directly from the DMG failed silently
- macOS: Argument files (@<file>) were not supported for launchers
- IDs of ActionList properties were not migrated when a bean was copied and pasted. This affected the "JDBC container" and the "Modify ZIP file" actions as well as the "Button" and "Hyperlink action label" form components
- If a screen class could not be loaded, the bean selector became unusable for all beans
- Accessibility helpers on macOS could slow down mouse interaction with installers so that they became nearly unusable
- Version-specific VM parameters were not included in project report
- Windows launchers: If the best Java installation from the registry cannot be loaded, continue with the next possibility from the registry
- Message boxes did not show the installer icon in the task bar if no other window was shown
- Password dialog was always shown on the primary screen in multi-monitor setups
- A failure in an action group with the "On error break group" property selected did not propagate to a parent action group where the "On error break group" property was selected as well
- Using an action list in a "Button" form component in a style did not work
Bug fixes:
- "Single radio button" form component: In console mode, the selection script for a button was called twice if the button was not initially selected
- Since install4j 7.0.10, a security fix prevented launchers from running on unpatched Windows 7 installations. This has been fixed for Java 9+ and recent Java 8 versions.
- File installation options of files in the distribution tree that were also added on the "Installer → Custom Code & Resources" step were ignored
- The dialog for showing running processes did not have the install4j window icon
- Fixed NPE when a custom installer application was started in-process from a modular application
- Linux/Unix: When a service script was executed with the "start" parameter, the single instance check was not performed
- Background update downloader: Downloaded media files of previously successful updates could not be deleted if the API was used in a particular way. Now they are deleted by the "Schedule update installation" action.
- macOS: When using JavaFX and an automatic launcher integration that checks for visible windows, the AWT was initialized even if the update downloader was started as an external process which could lead to a deadlock for recent Java versions
- macOS: The installer variable sys.preferredJre could hold the wrong path
- macOS: Command line launchers in archives could not find bundled Java 9+ JREs
- Windows: Native install4j runtime files were not overwritten when an older installation was installed on top of a newer installation
New features:
- Added "Accept all SLL certificates" property to the "Install files" and the "Download and install component" action
Bug fixes:
- Fixed various exceptions when running installers with Java 12
- "Modify text file action": Search values whose encoded bytes contained values larger than 127 were not found
- Property modification actions discarded comments at the end of property files
- Dialogs in the install4j runtime including alert dialogs did not center correctly in multi-monitor setups
- Linux: Fixed exceptions in command line compiler on headless systems related to the Gnome accessibility bridge
- macOS: Modular applications could not be started by the generated launchers
New features:
- Windows launchers now support OpenJ9 JVMs
- Added the compiler variables sys.mediaFileSeparator and sys.mediaPathlistSeparator containing separators specific to the target platform of the current media file
- "Update alert" form component: Added an "Initially selected choice" property
API changes:
- Added Context#gotoScreen(Screen, boolean, boolean) for navigating to a screen while optionally checking the condition of the target screen and executing actions, similar to Context#goForward(int, boolean, boolean)
- Added InstallerActionEvent#getActionId() returning the ID of the action that triggered the event
- Added Context#getId(Action) and Context#getId(Screen)
- Added Context#isGui()
- JVMSelector#setPreferredJVM now also works in custom installer applications
- JVMSelector#getJVMLocations could not handle JRE locations ending with "jre" on macOS, so passing System.getProperty("java.home") as an additional location did not work
- JVMSelector#getJVMLocations now also considers the JRE set with the environment variable INSTALL4J_JAVA_HOME
Bug fixes:
- Security: Prevent DLL hijacking for Windows installers with Java 11+ on Windows 8.1 and earlier
- Regression in 7.0.9: When using merged projects, overriding a compiler variable in the main project with another compiler variable threw an exception
- Regression in 7.0.9: Compiler variables in styles could be replaced with their values if the preview functionality was used for a screen and the style was subsequently edited
- "Download file" action: Installer variables were not replaced in the "Optional md5sums URL" property
- "Windows user selector" form component: Show a more specific error message when a Windows user cannot be created because the user name is invalid
- "File associations selector" form component: The displayed file associations depend on which launchers are contained in the selected installation components. Going back to the installation components screen and changing the installation components would not update the list of displayed file associations.
- File and directory chooser form components: In console mode, if the initial value was set to an installer variable with an empty value, the suggested value was not empty but the working directory
- Form screens: If the "Screen can be reached" property was set to "Only with Back button", the screen was not shown when the user used the back button on the next screen
- Windows: Invoking the uninstaller directly from a mapped drive did not work correctly
- Windows: Fixed problems with Java 11+ and DLL loading when other JREs are in the PATH environment variable
- Windows: Java 11+ 32-bit installers did not work for users with different long and short path of their home directory
- Windows: Installers now try to write temporary files to %ProgramData%\install4j\temp if the user-specific temporary directory is not usable
- Linux/Unix: Made the workaround for running installers on systems where no fonts are installed more reliably and also cover custom installer applications as well as the uninstaller
New features:
- Spinner form components: Added a "Value change script"
- Layout groups: Added a "Border title" property
- "Modify ZIP file" action: The ZIP method of existing files is now preserved. A "ZIP method for new files" property was added.
- "Create a ZIP file" action: Added a "ZIP method" property
Bug fixes:
- Regression in 7.0.8: Default icon for installers was not used anymore on macOS
- Regression in 7.0.8: Migrated projects with updaters that were not saved in the UI threw an NPE during compilation
- Regression in 7.0.5: Installer did not work in the Turkish locale
- Regression in 6.0: When using compiler variables in executable names, they were expanded in the file selection trees for installation components
- The -help command line option did not work for installers on headless systems
- Fixed an IllegalAccessError when using static script methods
- Using the -splash command line option for unattended mode or a "Progress interface creation script" property caused an exception on headless machines
- macOS: Versions of recent openJDK installations were not always compared correctly in the search sequence
- File modification actions: If ".." was used in a path, the action could fail when intermediate directories did not exist
- Passing unsupported values for the messageType parameter in the message display methods of com.install4j.api.Util could produce an NPE
- Added a workaround for an InternalError when a bundled JRE could not find fonts on Linux
- RPM archives now include SHA-1 and SHA-256 digests to avoid warnings on recent Linux distributions
- If the environment variable _JAVA_OPTIONS was set, the version check for Java 9+ did not work on Windows
- Some actions without rollback functionality still wrote to the log during rollback and could trigger a rollback dialog even if otherwise unnecessary
- Compiler variables in linked installer elements that existed only in the merged project were not replaced
- Compiler variables from merged projects were not available from Context#getCompilerVariable at runtime
New features:
- Automation tasks on macOS have been re-implemented natively to avoid authorization dialogs on macOS 10.14+
- The password dialog displayed by the "Request privileges" action on macOS now shows the full name of the project instead of "install4 wants to make changes"
- -J-splash:none can be passed to launchers to disable the splash screen on Windows
- Environment variables are now supported for the custom installation base directory that is configurable in the media wizard
- Standard icons in i4jruntime.jar are now replaceable with a custom code JAR that contains image files with the same paths
Bug fixes:
- Regression in 7.0.7: Installers with bundled JREs required that the output streams were consumed
- Regression in 7.0: The "Next" button was visible in the "Update message" screen of the updater templates
- Launching an install4j executable with a splash screen from another executable created by install4j did not work with Java 11
- User-visible error messages in unattended mode were only written to the console and not to the log file
- Java 10+ JDKs could not be selected for the code editor
- The proxy dialog was shown when a URL with the file protocol could not be opened by a download action
- The "Base URL for installers" option on the "Installer → Auto-Update Options" step now disallows URLs that do not have a trailing slash because the last path component would be ignored in that case
- On macOS, an explicit update check could throw an NPE under some circumstances
- Deselecting the checkbox "Add icon to launcher" on the "Icon" step of the launcher wizard had no effect for macOS launchers
- Form styles were not always cloned at runtime which could lead to wrongly disabled navigation buttons in the installer
New features:
- Unix custom script properties for all installer applications, the existing custom script screen in the Unix installer media file wizard now overrides this setting
- Support for running the install4j IDE and its command line tools with Java 10 and Java 11
Bug fixes:
- Regression in 7.0: Properties with property converters were displayed with their toString() values by their renderers
- Regression in 7.0: Console mode did not work anymore in cygwin's default mintty console
- Regression in 7.0: Alt-Left and Alt-Right keyboard shortcuts for the Next and Back buttons did not work anymore
- Regression in 7.0: Keyboard shortcuts for control button components also worked if the component was disabled or invisible
- "Http request" action: response body was not saved to variable for mime type application/json
- Migrate the image anchor "Center" for banner images in install4j 6.x and earlier to "West", because "Center" sets the background for the whole screen in install4j 7.0+.
- When deleting elements from an installer application, links into other projects could mistakenly be detected as broken links that were then deleted as well
- JRE downloader did not ask for a proxy if the connection failed
- Resource files from the "Installer → Custom Code & Resources" step were added to the classpath for the script dialog and could break the code analysis engine under certain circumstances
- macOS folder media files: If a GUI launcher was in a non-default file set, the "Add a desktop link" and "Add an executable to the dock" actions did not work
- macOS: Volumes could not be ejected when no code-signing was used. Launchers are now adhoc-signed to avoid tccd from locking the executable.
New features:
- Support for stricter time-stamping validation for code signatures on macOS 10.14. This fixes the message that the app is damaged and should be moved to the trash.
- Automatic scaling of splash screen with HiDPI resolutions on Windows
Bug fixes:
- Under certain circumstances, an update installer started with UpdateChecker.executeScheduledUpdate was terminated prematurely on Linux/Unix
- "Replacement script for language code" property of the installer: The selected language was used in the installer but not reflected in the return value of context.getLanguageId() or the sys.languageId installer variable.
- Fixed a compilation error when using custom code in styles and style overrides where used
New features:
- Support OpenJDK installations when creating JRE bundles
API changes:
- Added UnixFileSystem#getShell and UnixFileSystem#findExecutableInPath
Bug fixes:
- Regression in 7.0: Changing text as well as enabled, visible, or focus state of control buttons via the WizardContext in pre-activation scripts of a screen threw an exception
- Regression in 7.0: The argument -help for the installer in GUI mode showed a message with HTML tags
- Regression in 6.1: "Replacement script for language code" of the installer did not work anymore, throwing a ClassNotFoundException
- Overridden styles were not used if the base style was used directly as well
- Scripts in styles and their form components did not work in the uninstaller because a parameter of type InstallerContext was expected. Now a parameter of type Context is expected.
- Images from merged styles were not displayed in the preview dialog unless the merged project was in the same directory as the main project
- If a style from a missing merged project was used for a screen, the property panel was broken
- Compiler variable overrides in the media file wizard were not propagated to merged projects
- Styles were not resolved correctly when adding new installer applications or pasting screens from other projects
- When including a merged project that merged extra files sets, the compilation of archive media files failed
- The --release arguments had no effect for merged projects
- Merged launchers were not supported for macOS single bundle media files
- Fixed the exception that was thrown when an installer event listener is added in another listener
- Fixed hanging UI when editing form components
- "File chooser" form component: The select button in the file chooser displayed an English text in all locales
- "Installation type" screen: In console mode, the variable "sys.installationTypeId" was not set
- On Debian-based Linux distributions, the installer is now started in the default terminal emulator instead of in an xterm
- The insets of all buttons in the installer were too small with the GTK look and feel
- The directory chooser showed an ugly focus border for the selected element with the GTK look and feel
- Windows: All actions that recursively operated on directories followed symbolic links
- Pre-defined installer variables in installer and uninstaller of merged projects were not present at runtime
- The "Failure strategy" property "Return to parent screen" added a navigation step to the screen history
- If an i18n message with arguments was overridden by a message without arguments, an exception was thrown
- In the preview dialog for screens, installer, compiler, and form variables in an i18n message could lead to an exception
- On Windows, stderr was written to error.log in the uninstaller. If that file was writable, its existence would block the success of the uninstallation.
- Updating a bundled Java 9+ JVM with the update downloader did not work because lib/modules was locked
- chmod expressions with multiple subjects were rejected
- The installer did not work when started from certain non-platform encoding paths
- The message that is shown when the removal of a previous program was not completed was always shown in English
- Control characters were expanded when editing custom localization files with a ".properties" extension
- Not all redirects were processed by HTTP downloads
- Progress bars were just one pixel high on Windows 2016
- Fixed the invalid signature error when .DS_Store files were included in a single bundle archive
- Under certain circumstances, an update installer that was started via a call to UpdateChecker.executeScheduledUpdate was terminated prematurely on Linux/Unix
New features:
- The install4j IDE and compiler can now run with Java 9
- Java 9 JREs and JDKs can now be used for code-completion and compiling scripts
- Form screens: Added a "Screen can be reached" property that allows the screen not be shown when the user reaches the screen with either the Back or the Next button. This is analogous to the isHiddenForPrevious() and isHiddenForNext() methods that are available in the custom screen API.
- Added the ability to specify dependencies for RPM archives on the "Installer options" step of the media wizard
- Added the VM option -Dinstall4j.helperDebugPort=nnnnn for debugging the elevated helper process
- Added a compiler variable "sys.timestamp" that contains the Unix epoch of the build time
- For non-OSGI SWT applications, the splash screen is now hidden automatically when the first window is shown
API changes:
- Added com.install4j.api.windows.WindowInfo with methods to get the top level windows, detect tablet mode, and wait for a maximizable window on Windows
- Added com.install4j.api.formComponents.FormEnvironment#isInitialized to check if the form panel has been fully constructed
- JVMSelector#setPreferredJVM did not work in the installer if a "Request privileges" action had been previously executed
- Added com.install4j.api.beaninfo.ActionListPropertyDescriptor#setConfigurableElevationType to suppress the "Action elevation type property" for actions in action lists
- Added com.install4j.api.update.UpdateDescriptorEntry#getMd5Sum. MD5 sums are now written to updates.xml, if MD5 sums calculation is enabled for the project.
- Added the constructor com.install4j.api.beaninfo.ScriptParameter(String, ParameterizedType) to support script parameters with generic types, like List<String>
Bug fixes:
- Regression in 7.0: The selection script in "Radio button group" and "Single radio button" form components was called while the form panel was being constructed
- Regression in 7.0: When an action with a confirmation checkbox was added to the "Installation" screen, the checkbox was added to the same screen instead of the "Additional confirmation screen"
- Regression in 7.0: "Update alert" form component: In console mode, the variable "sys.confirmedUpdateInstallation" was set to true even if the question to update the existing installation was answered with no
- Regression in 7.0: Setting -Dinstall4j.clearProxyCache=true produced an NPE
- Custom watermarks for the installer and installer applications were not migrated from install4j 6.x projects
- Compiler variable entries in the distribution tree could not be overridden externally
- Code completion in the static code section did not show other static fields and methods
- Calling HyperlinkLabel.setPassiveColor did not change the color of existing labels
- Classes produced by the Kotlin compiler can now be compressed with Pack200
- The main class selector in the launcher wizard did not search JAR files that were in file sets other than the default file set
- Unix scripts did not work if the "which" command is not installed. This is the default case for some Linux distributions.
- The message in option dialogs for file overwrite confirmation, and other instances was incorrectly split into title and message body
- i18n messages were shown as replaced in form component properties while the preview dialog was being displayed
- The wizard index could not be updated for the same screen, only for screen changes. Calling WizardContext#setWizardIndexKey and WizardContext#setWizardIndex in actions or form component event handlers now has the intended effect.
- When using a large number of custom code JAR files together with Pack200 compression, unpacking of some JAR files could fail
- "Program group" selector form component: Fixed an exception when shown on non-Windows platforms
- "JDBC container action": The action does not work in elevated mode, so elevation has been disabled, also for contained actions
- "Fall back to console mode on Unix" property for installer did not work under some circumstances
- macOS: For signing, only the Developer ID Application certificate is now accepted, for other certificates the build will fail. Gatekeeper does not accept third-party certificates, while it is technically possible to use them, it makes no sense and is nearly always an error. Should you really want to continue using other certificates, set the compiler variable "sys.ext.macosAcceptAllCerts" to "true".
- macOS: The "Add VM options" and "Modify classpath" actions did not work for included command line executables in single bundle archives
Bug fixes:
- macOS: Fixed the empty menu bar that could occur with macOS 10.13 in non-English locales
- macOS: SWT launchers did not work for some configurations
- Regression in 7.0: License screen did not display license text in console mode
- Regression in 6.1: Order of update descriptor entries in updates.xml was random instead of the configured order in the "Media files" step
- Installers did not work when they were located in a path containing certain Romanian diacritics
- It was not possible to use a literal variable string like {0} in i18n messages, now you can escape it like '{'0'}'
- When creating JRE bundles on macOS, the Java 9 tar distributions can now be used
New features:
- "File associations" form component: Added a "Position of selection buttons" and a "Fill vertical" property
API changes:
- Util#isWindows8() did not return true for Windows 8.1
- Regression in 7.0: Util.getParentWindows() could return windows that were not suitable as dialog parents
Bug fixes:
- Regression in 7.0: Tabbed panes in forms did not work anymore
- Regression in 7.0: Multi-language installer terminated when a different language was selected on Linux
- Regression in 7.0: Service status detection did not work reliably on Linux and macOS
- Regression in 6.1: Order of update descriptor entries in updates.xml was random instead of the configured order in the "Media files" step.
- "Uninstallation success" screen: When migrating from a pre-7.0 version, all form components for this screen were lost
- Automatic execution of background update at launcher start did not work when there was no installer application integration
- Unix installers: Under some circumstances, Pack200-compressed JAR files could not be unpacked
- Migration of projects with unknown screen classes threw an exception
- Under some circumstances, using a floating license server would create an evaluation warning at runtime
API changes:
- Added com.install4j.api.context.WizardContext#setWindowTitle to set the title of the application window even if the window is not yet shown, supports live binding of installer variables
Bug fixes:
- Regression in 7.0: Pack200 compression did not work with Java 7
- Regression in 7.0: The "Update Alert" form component set the "sys.confirmedUpdateInstallation" variable also for unattended installations
- Regression in 7.0: Properties that could contain variables with string arrays to build a list of variable length were not replaced correctly
- Class files compiled for Java 9 could not be compressed with Pack200 compression
- Pack200 compression could produce class files that were incompatible with the configured Java minimum version
- Installer applications: The obsolete property "Add install4j watermark to installer screens" was still shown in 7.0, but had no effect
- In the installation.log file, property names of actions were printed in an unstable order, now they are sorted alphabetically
- There was a fixed 5 pixel gap at the top of the screen content, so it was not possible to make the screen content fill the entire window
- macOS: Preview dialog for forms had an 11-pixel empty border at the bottom
- macOS: When selecting the "Windows console executable" property for the uninstaller or for installer applications, Unix console scripts were generated
New features:
- Support for running with Java 9. Only the "java.desktop" module is required for installers.
- Launchers can define a Java 9 module path in addition the class path
- Support for using and creating Java 9 JRE bundles
- Support for the new multi-resolution features in Java 9 for Windows and Linux, including multi-resolution splash screen support
- In the "Windows manifest options" of the launcher wizard, the new default "Java 9+" makes launchers DPI aware if Java 9+ is used as a minimum version
- Background auto-update functionality
- Flexible styling for installers
- Added a "File associations selector" form component
- Added an "Installation components selector" form component
- Added a "License agreement" form component
- Added a "PDF display" form component
- Added a "Program group selector" form component
- Added an "Update alert" form component
- Added a form variable system for coordinating between form components or its enclosing screen
- "Button" and "Hyperlink action label" form components: Script properties of actions contained in the action list now receive a formEnvironment parameter
- All form components can now export named sets of properties to the screen configuration to make them more easily discoverable
- Layout groups: Added "Background color", "Foreground color", "Image file" and "Border sides" properties
- Label and text components: The "Font" property now allows setting a derived font that just changes the style or the relative size of the font
- Separator component: Added a "Show enabled text" property
- "HTML display": Added "Variable name" property with the same functionality as the "Variable name" property on the pre-7.0 "Display information" screen
- "Directory chooser" form component: Added "Border title", "Standard directory" and "Only accept writable directories" properties like for the pre-7.0 "Directory selection" screen
- "Directory chooser" and "File chooser" form components: When the bound variable changes, the selection is updated accordingly
- "Progress display" form component: Added "Initial status message" and "Initial detail message" properties
- Added "Horizontal anchor" and "Vertical anchor" properties to form screens that are shown if "Fill horizontally" or "Fill vertically" are not shown respectively
- When double-clicking a form screen or a style, show the form component dialog
- Live text binding on labels and text component for text with unresolved variables
- Form templates instead of fixed customizable screens
- Form functionality in standard screens
- Native file chooser and alert dialogs on Windows and macOS
- Single instance mode for Linux/Unix launchers
- Suggest user-specific installation directory on Windows and macOS if the installer is run without "Request privileges" action
- "Request privileges" action: Added a "Fall-back to user-specific installation directory" property in order to set a user-specific installation directory if the installation directory is not writable after the action has run
- macOS: Added support for environment variable classpath entries
- macOS: Show installer in front even if a Gatekeeper dialog window was shown
- macOS: Implemented the "Execute previous uninstall" action for single bundle installers
- macOS: The Gradle plugin now also correctly handles the installation directory /Applications/install4j.app in addition to /Applications/install4j.app/Contents/Resources/app
- Unix installers now run on macOS as well, macOS JRE bundles can be used for Unix installers
- "Stop a service" action: Implemented rollback on Windows, macOS, and on systems with systemd
- "Install a service" action: Added a "Delayed Auto Start" property in the Windows section
- Added an "Extract a DMG file on macOS" action
- Added an "Extract a TAR file" action
- The "Rollback barrier" property of actions and screens now has an "Exit code" child property that can be used to set the exit code if the installer application terminates at that point due to an activated rollback barrier
- Improved the start mode for installer applications that are automatically started via a launcher integration: For services, unattended mode is used, on headless machines, console mode is used unless there is no associated console
API changes:
- Added com.install4j.api.formcomponents.FormEnvironment#getFormComponents(Class) and #getFirstFormComponent(Class)
- Added com.install4j.api.launcher.ApplicationLauncher#isNewArchiveInstallation() for determining if a newly extracted archive is used for the first time
- Added com.install4i.api.Util#isWindows2016()
- Added com.install4j.api.windows.service.WinServices, an API for querying and modifying Windows services
- Added many classes in the com.install4j.api.styles package for programmatically developing styles
- Added com.install4j.api.beaninfo.ScriptBeaninfo#setDefaultPreActivationScript and #setDefaultPostActivationScript
- Added com.install4j.api.beaninfo.ActionListPropertyDescriptor#setExtraScriptParameters for supplying fixed parameters to all scripts in the contained actions
- com.install4j.api.beans.AbstractBean#executeActionListSync and #executeActionListAsync now have trailing vararg parameters for fixed script arguments
- Added com.install4j.api.update.UpdateChecker#isUpdateScheduled and #executeScheduledUpdate to support background updaters
- Added com.install4j.api.update.UpdateDescriptorEntry#isSingleBundle and #isDownloaded
- Added com.install4j.api.context.WizardContext#setWindowSize to set the size of the window either before it is shown or while it is shown
- Added com.install4j.api.beans.VisualContainerBean as common parent for screens and styles with a new #getAnchor method
Bug fixes:
- Regression in 6.1: "Installation directory chooser" form component: Property "Validate application ID" was named "Check if directory is writable" and property "Check if directory is writable" was not configurable but always selected
- Regression in 6.1: Windows installer did not include shrunk and packed i4jruntime.jar
- Proxy handling did not work for actions that performed HTTP downloads and whose "Action elevation type" property was set to "Elevate to maximum available privileges"
- Properties of type "Anchor" without value restrictions did not show icons any more (since install4j 6.0)
- macOS: Do not use the AppleScript scripting engine in the JRE anymore, which could lead to runtime errors because of broken installations
- "Bundled JRE" step of the media wizard: The "Start download without user confirmation" option did not work as expected if "Disable JRE bundling" was selected as a build option
- i18n messages were shown as replaced in form component properties while the preview dialog was displayed
- FormComponent.formDeactivated() was not called in GUI mode for any form components
- Scrollable forms could shrink to zero width if there was not enough space for the preferred width of the contained components
- Calling screen change methods like context.goForward(...) from anywhere but the validation script had no effect in console and unattended modes
- Custom bean development: Exceptions from missing properties in BeanInfos were not printed
- "Add VM options" action: The VM parameters "-agentlib:", "-agentpath:" and "-javaagent:" could not be specified multiple times
- "Create program group" action: The action did not work with the default property values if the "Create program group" screen was not present
- "Radio button group" and "Single radio button" form components: The "Selection script" was not executed if the radio button was selected with the arrow keys
- "Request privileges" action: For debug and test installers, the action could not start the elevated helper process on macOS
New features:
- Windows: Create file associations for the current user if no elevated privileges are available
API changes:
- Added Util#loadNativeFromResources for loading a native library from the resource directory with the script classloader
Bug fixes:
- "Install files" action: The response file .install4j/response.varfile was not rolled back
- "Uninstall previous installation" action: Custom code jars were not deleted under some circumstances
- "Download file" action: Error handling properties were not used for the MD5 file download
- "Execute SQL script" action: Remove semicolon line delimiter when executing statements
- "Execute SQL script" action: Using a line break (\n) as the delimiter did not work
- "Execute SQL script" action: Multiple delimited statements per line did not work
- "Uninstall previous installation" action: Keep the response file when uninstalling for an upgrade
- Classpath wildcards did not work if an archive was located in a non-default file set
- For archives where links were used in custom installer applications, the shrinking of the runtime library did not take the links into account, potentially breaking the custom installer application
- File options: The "Keep original file modification times" did not work for JAR files packed with Pack200
- Windows icons generated by cross-platform icon images did not include the 256x256 size required for showing large icons in the explorer
- Windows launchers: Fixed an error detecting the Java version when GetShortPathName does not work
- Windows uninstaller: prevent DLL loading from PATH (CVE-2017-9817)
New features:
- "Password field" component: Added property "Show icon to toggle password visibility"
- "Create start menu entry" and "Add a desktop link" actions: Added an "Icon file" property in the "Unix" category that sets the icon for the generated desktop file
- Updated ICEpdf to 6.2.1 for PDF actions
- Windows services: Added a /restart command line option
Bug fixes:
- Regression in 6.1.4: It was no longer possible to use compiler variables in the executable directory for generated launchers
- Regression in 6.1: Overriding Screen.hasDefaultInsets() to return false did not remove all horizontal insets anymore
- "Add a desktop action": Links to launchers on Mac OS X did not work without appending .app to the file name.
- "Extract a ZIP file" and "Modify a ZIP file" actions threw an exception if they were used in the uninstaller
- macOS: Launchers did not correctly check patch version of newer 1.8 JRE installations
- macOS installers: Dynamic JRE downloads from non-TLS URLs did not work anymore
- macOS: JRE bundle creation wizard only worked for JDKs and not for JREs
- Unix launchers: Spaces in environment variable values were not supported for JRE search sequence
- Windows launchers: If a JRE could not be loaded, more than one error message was shown in sequence
- Windows services: Command line arguments were not passed correctly when starting a service from the command line with the /run option
- Windows: Detect and reject privilege elevation when users in the obsolete power users group elevate with their own account
- Windows: Add-on installer updated the file .install4j/i4jinst.dll
- If a non-existing compiler variable was used for an icon customization, the icon customization dialog could not be opened again.
- The context class loader of the startup notification thread was the bootstrap class loader instead of the system class loader
- Unix desktop files always called the executable by prefixing with /bin/sh which does not work for non-shell script executables
- Fixed context class loader problems for custom screens (for example when using Log4j)
- Startup failure in headless mode did not produce an exit code of 1
- With the "Keep original file modification times" option, time zone differences between the compilation locale and the runtime locale were added to the modification time
- com.install4j.api.windows.WinFileSystem#createShellLink only worked once
New features:
- Added a "File name encoding" property for all ZIP file extraction actions
- "Modify text files with regular expressions" action: XPath expressions that end in "/text()" can now also be used for matching empty nodes
- Ctrl-Shift-L shows log file in Explorer/Finder
API changes:
- Added Util#getLogFile
- Util#showPath did not select a file in the Finder on Mac OS X
Bug fixes:
- OpenJDK installations were not found
- Files → Define Distribution Tree: After changing the type of an existing entry, the wizard was broken
- Archive media files without any installer applications: Do not distribute custom code and improve runtime shrinking
- "Arguments" property of the uninstaller was not used.
- Native libraries added under Custom code & Resources could be loaded via System.loadLibrary only in the installer, but not in custom installer applications and the uninstaller
- Dialogs for multiple files, custom icons and scripts could hang if they were if invoked in certain ways
- Comments for pre-defined installer variables that were of a type other than String were not written to the response file
- Single apostrophes were doubled in unformatted messages
- PDF extension JAR was 3 times as large as necessary
- "I cannot find a suitable JRE bundle" link in the JRE download wizard was not working
- Portuguese localization was broken
- Mac OS X: PDF screen and action did not work
- Linux package media files: Check for existence of /bin/systemctl in RPM and DEB scripts
- Linux/Unix service launchers: A fixed VM parameter -Dinstall4j.daemonTimeout=nnn was not used when stopping a service
- Linux/Unix service launchers: systemd reported circular dependencies for service scripts generated by install4j on some Linux distributions
- Windows: Installers with elevated privileges could not be installed on mapped network drives
- Linux/Unix installers: When launcher directory names started with "./", the Unix file options were not set at runtime
New features:
- Mac OS X: DMGs files are now signed in addition to the contained launchers. This is necessary for folder archives to work on Mac OS X 10.12.
- Mac OS X: All signatures are now timestamped, and SHA-2 is used for signing, except when the old Apple JRE is used
- systemd support for services on Unix/Linux
- Implemented auto-start for services in Linux package archives (RPM/DEB). This only works with systemd and can be disabled in the launcher wizard under Executable info → Unix options.
- "Wait for HTTP server" action: Added a "Variable name for response code" property
- Added the possibility to place a ".packoptions" file next to a jar file, with options for the Pack200 packer. Currently only -P und --pass-file= are supported.
Bug fixes:
- "Show URL" action: The action did not fail if the browser could not be opened
- "Display text" screen: For unresolved variables in the "Info text" property, an exception was thrown instead of showing an error message in the displayed text
- "Display text" screen: Installer variables in the "Info text" property were not updated when the screen was activated
- "Installation components" screen: In console mode, it was not possible to only install mandatory components. Now "X" is used to mark mandatory components and can be given as an answer
- Mac OS X: Partially uninstalled JRE plugins were not detected correctly
- Mac OS X: If no AppleScript engine was found, an NPE was logged instead of a proper error message
- Windows: Fixed DLL injection prevention for the installer on Windows 7
- Windows: After a failed elevation restart, all files in the installer directory could be deleted
- Security enhancement: By default, the Windows and Unix installers do not read ".vmoptions" files anymore
- Custom code could be deleted too early during the uninstallation
- Linux: Calling an installer with the -help argument did not work if no X-server was present
- Actions lists did not work in unattended mode
- When action lists were executed by form components, a screen navigation history entry was created, so that the back button of the screen required multiple clicks to go to the previous screen
- context.getWizardContext().setNextButtonEnabled(...) and .setPreviousButtonEnabled(...) as well as changing the enabled state of other form components on the same screen did not work from action lists in form components
New features:
- "Override Java version" step in the launcher wizard below the "Java" invocation step. This allows you to set different Java version requirements for a specific launcher.
- "Radio button group" form component: Added a "Selection script" property for executing a script when a radio button is selected by the user
API changes:
- Added com.install4j.api.update.UpdateChecker#getUpdateDescriptor(UpdateCheckRequest) with the same configurable connection options as in the "Check for update" action
Bug fixes:
- The installer media file was deleted under some update circumstances (regression in 6.1)
- When using JAX-WS in scripts, ClassCassExceptions could occur because of context class loader issues (Regression in 6.1)
- "Customizable directory" screen: In console and unattended mode, the initially suggested directory was not the same as in GUI mode if the "Standard directory" property was selected
- "Display PDF file": Fixed a ClassCastException when used in installers
- "Display license agreement" screen: By using the cursor keys for selecting radio buttons, it was possible to proceed without accepting the license
- "Set the UNIX access mode of files and directories" action: The "Mode" property did not support leaving out an initial "a", as in "+x" instead of "a+x"
- "Uninstall previous installation" action: If the action was run unelevated, used files during uninstallation could be missing after update on windows
- Fixed problems with Unicode characters in title bars of native windows
- The script edit dialog could not be shown if an invalid class path entry was configured in the "Installer → Custom code & Resources" step
- Log level of console handlers of java.util.logging was set to SEVERE in generated launchers
- Mac OS folder archive: If the output format was configured as .tgz, a .DS_Store file was added at the root of the archive
- Mac OS single bundle media files: The custom name on the "Executable info → Mac OS X options" step of the launcher wizard could not be used to override the name of the launcher in the DMG
- Custom JRE bundle files created for Mac OS X did not have the correct prefix, so they would not be displayed in the IDE
Bug fixes:
- Regression in 6.1: "Uninstall previous installation" action: Fixed java.io.NotSerializableException
- Regression in 6.1: "Set the UNIX access mode of files and directories" action: chmod symbolic file modes were no longer supported
- Regression in 6.1: Link creation did not work correctly on Windows Vista
- Regression in 6.1: JDBC actions could not load driver classes on some systems
- Regression in 6.1: Installer could not find msvcr100.dll on some systems
- Regression in 6.1: Custom code jars that are also present in the distribution tree were included twice in archives
- Regression in 6.1: In some situations, an HTTP proxy was applied to plain sockets, not only to HTTP connections
- Fixed "Object expected" dialog box for PAC proxy detection on Windows
- JDBC actions: A variable with an empty name was set if an error occurred and the "Variable name for error messages" property was not defined
- "Password" form component: Regression in 6.1: An exception was thrown in the preview dialog.
- Changes in the "Sensitive information" check box when pre-defining installer variables were not saved when the variable was of type "Undefined"
- Windows launchers: Fixed display problem of non-ASCII error messages
- Fixed problem where AppleScript engine was not found for Oracle JREs
- Hidden variable values were logged when they were used in string properties of actions
- For pre-defined non-string variables, the hidden and response file settings were ignored
New features:
- Major compilation performance improvements
- RTL support with 2 new languages: Arabic and Hebrew
- Added a "Modify ZIP file" action
- Added a JDBC container action
- Configurable action lists for "Button" and "Hyperlink action label" form components
- Added a "Compiler variable" class path entry that can add an externally passed list of archives to the class path. Added the compiler variables sys.fileSeparator and sys.pathlistSeparator.
- Added a "Compiler variable" entry type for the distribution tree that can add an externally passed list of files.
- Windows installers: When an error occurred while extracting the installer to the temporary directory, fallback strategies are now attempted
- Windows installers: No extraction of DLLs into the temporary directory to reduce problems with anti-virus software
- "Uninstall previous installation" action: Log files from multiple instances of this action are now saved as .install4j/uninstallPrevious.n.log.
- "Uninstall previous installation" action: Added "Don't uninstall services" and "Installer variables" properties
- HTTP actions: Added a "Network failure script" property that is executed when the URL connection cannot be established
- "HTTP request" action: Support for custom request body when the request type is set to POST or PUT. For example, it's now possible to send JSON request bodies and not just form parameters.
- Improved system proxy detection, support for Windows proxy auto-config (PAC)
- Java version-specific VM parameters for launchers
- The JRE search sequence is now implemented on Mac OS X
- The "Suppress initial progress dialog" property for installers now also works on Mac OS X
- Support retina splash screen files for Mac OS X media files
- Windows service launchers: Print options when invoked with the argument /?
- Unix launchers: Check JRE version again if the JRE installation directory was modified since the last check
- Action groups that have "On error break group" set now also have a "Retry expression", a "Failure strategy" and an "Error message" property to handle errors on the action group level
- Retina support on Mac OS X
- Preferences actions: Dots and underscores in the "package name" properties can now be escaped to prevent them from being replaced
- JDBC Actions: Added a "Variable name for error messages" property that allows you to access the error messages from the execution of the action later on in the installer
- Installation directory selectors: Added a "Check if directory is writable" property, so you can accept non-writable directories and elevate privileges conditionally
- RPM and DB archives: Added a "Register files with overwrite policy 'Never' as config files" check box on the "Installer options" step of the media wizard
- "Create user" dialog: Added a text field for repeating the entered password
- Command line compiler: Support multiple --var-file (-f) and --define (-D) arguments. For the ant task, the "variableFile" attribute has been replaced with a contained element "variableFile", the Gradle task now has a "variableFiles" property.
- Support for relative installation directories in the -dir command line parameter. The directory will be resolved relative to the media file.
- Codes signing keystore files and for the location of JRE bundle file now support environment variables and a leading ~/ for choosing the home directory. The corresponding text fields now have an environment variable selector.
- Sign windows executables with SHA-2 by default
- "Set the UNIX access mode of files and directories" action: A "Perform on" property has been added to allow setting the mode on files or directories only.
- "Installation components" screen: In console mode, the indices that are shown for the available descriptions now match the indices of the installation components
- "Password" form component: Encoded variables values are now decoded immediately when the response file is read so that the password value can be used even if the password form component is not shown
- "Run executable or batch file" action: Added "Inherit parent handle" mode to the redirection properties to allow the called executable to use the terminal
- Command line compiler: Support the --license flag together with other options. Added a "license" attribute for ant and Gradle tasks.
- The directory where custom code and resources are extracted is now in the java library path, to make it easier to work with native libraries in the installer
- The install4j runtime is now published in a Maven repository. See the Javadoc overview for instructions.
- "Uninstallation failure" screen: Added a "Show directories" property
API changes:
- com.install4j.api.update.UpdateChecker#getUpdateDescriptor now has a version with an ErrorHandlingCallback argument that allows you to take corrective actions like applying proxy settings or canceling the connection before the built-in proxy dialog is shown
- Added com.install4j.api.Util#isDirectoryWritable to check if a directory can be written to with the current privileges
- Added com.install4j.api.macos.MacProcesses#areInstalledLaunchersRunning()
- Added com.install4j.api.beans.ActionList
- Added com.install4j.api.beaninfo.ActionListPropertyDescriptor
- Added com.install4j.api.beaninfo.ActionValidator
- Added com.install4j.api.beaninfo.Install4jPropertyDescriptor#setActionListHiddenKeys, #setActionListShownKeys and #setHiddenInActionLists
- Added com.install4j.api.beaninfo.ActionBeanInfo#setActionListInitializer, #setActionValidator
Bug fixes:
- "Run executable or batch file" action: Wide character output was not readable in stderr/stdout redirection
- "Uninstall previous installation" action: The log file uninstallPrevious.log was not saved to the .install4j directory on Mac OS X
- "Register Add/Remove item" action" and "Install files" action did not work when used in a merged project
- "Horizontal separator" form component: Background had the wrong color on tabbed panes
- "Reboot computer" action did not work for an uninstaller with a bundled JRE on Mac OS X
- The --preserve command line option was not documented
- "install4jc -L [license key]" returned successfully without an error message even if the config file could not be saved
- Setting -Dinstall4j.debug=true did not work for non-debug Mac OS X installers
- File choosers threw exceptions on some linux distributions
- Use Info.plist launcher config for install service action on OS X
- Unix service launchers: The "status" command did not work as expected for non-root users if root started the service
- Some messages in the uninstaller or custom installer applications contained the words "install", "installer" or "installation"
- The "Full name" text field in the "General Settings" step had no i18n variable selector
- If the updater is in unattended mode with a progress dialog, start the downloaded installer in the same mode as well. This is a change in the template and not applied automatically.
- Launcher integration mode "When first window is shown" now works for JavaFX windows as well
- References to launchers and installation components in media file configurations were still saved in the project file if the referenced elements were deleted
- The "formScreen" sample project did not work on Mac OS X
- Windows services: stdin could not be used if the service was started with the /run argument
- The keystore file cache did not reflect changes in the configuration or the file system
- Compiler variables in messages that were used by the native Windows and Mac launchers were not replaced
- The displayed build date was formatted erroneously
- In console mode, calling setVisible() on form components had no effect
- The "Test installer" action did not work correctly if the project had merged projects with files in non-standard installation roots
- RPM archives were not signable
- The failure strategy "Return to the parent screen" caused a stack overflow in unattended mode, now the installer quits instead
- Use the Windows display language by default for language detection in the native part of the launcher
- Mac OS X: The dock icon was not uninstalled if the installation path contained spaces
- Mac OS X: If a custom Info.plist fragment was configured for a service launcher, it was not inserted into the launchd.plist file
- Mac OS X: Launcher variables did not work for redirection files
New features:
- Text components: Added a "Key listener" script property that is executed each time a key is pressed. The "text" parameter contains the modified text unlike for the "Key validator" expression.
- It is now possible to use installer variables with array values in the arguments for launchers. Empty array elements are omitted.
API changes:
- Added a version of com.install4j.api.windows.WinFileSystem#createShellLink with a parameter of type "ShowCommand" that allows you to open a link with maximized or minimized window state
Bug fixes:
- "Single radio button" form component: If all radio buttons in a group were disabled, an exception was thrown in console mode
- "Single radio button" form component: In console mode, the selection script of the first radio button in the group was executed and not the one of the selected radio button
- "Load a response file" action: Non-string variables were not registered automatically as response file variables again and the "Overwrite strategy" did not work for them
- "Label" form component: & characters followed by a non-space character were not shown
- "Execute SQL script" action: Non-standard statement delimiters did not work
- Installation directory selector: Several settings were not respected in console mode
- PDF action and screen produced a file named error.log next to the installer
- Unix service launchers: Not all possible arguments were reported in the "usage" message
- Unix service launchers: More robust implementation for stopping the service
- Unix launchers: Use exec where possible to replace the shell script process with the java process
- Unix launchers: JRE search sequence entries that start with $ or ~ were interpreted as relative files
- Windows launchers: The current directory was appended to the end of the class path
- Mac OS X: Running process check did not work for single bundle installer
- Mac OS X: Installers did not pump stdin
- Mac OS X: Console and unattended mode were not set to headless for the Oracle JRE
- i18n: Single apostrophes were doubled in formatted messages
- Adding imports to the static members script marked the same imports in all other scripts as unused and broke auto-import and test compilation
- For wildcard classpath entries of type "archive", the shortest available match is now used
New features:
- The "Downloadable components" step in the media wizard is now also available for archive media files
- The "Downloadable components" step in the media wizard has a new option to statically include all downloadable installation components, which is selected by default for archive media files
Bug fixes:
- "Run executable or batch file" action: On Mac OS X, installer variables were not replaced in the "Specific environment variables" property
- "Selection change script" property of list form components: The "selectedIndex" parameter had an unspecified type
- "Display license agreement" screen: In console mode, "No" was the preselected answer. For multi-page agreements that could lead to an easy termination of the installer. Now no answer is preselected.
- "Add an executable to the dock" action did not work on Mac OS X 10.10
- The install4j API did not work with the eclipse "jar in jar" class loader
- Default Unix directory mode was not always used if the directory mode was not overridden
- Posix permissions for backed-up files were not restored in the case of a rollback
- Invoking the go... methods in the context object did not work reliably in screen validation scripts
- ApplicationRegistry.getApplicationInfoById did not return all installations of the other bitness (32-bit/64-bit) on Windows
- New compiler variables did not appear in the selection dialog until the project was saved
- Windows: The installer could crash if a very large number of custom code files were included
- Windows: When no JRE was found by the installer and then one was manually located, a subsequent language restart or elevation action failed
- When console mode did not work due to a misconfigured DISPLAY environment variable, an unhelpful error message was displayed
- When copying a launcher, the Unix options, Mac options, and VM options were shared between the original and the copy until the project was reloaded
- Fixed problem with AppleScript scripting engine throwing an NPE on some Mac OS X installations
- The output directory for downloaded component files was reused for media files with the same base name but different suffixes, creating multiple issues
- Append _32 or _64 to the shared JRE directory in the user home directory to avoid conflicts between 32-bit and 64-bit installers
- In-process installer applications could add the current directory to the class path
New features:
- Added a "properties" sample project that shows how to use the "Properties files" actions
- "Read a properties file" action: Added the "Merge into existing variable" property
- "Execute SQL script" action: Gzipped files are now automatically detected and uncompressed on the fly
- Incremental test execution is now also available from the command line compiler with the command line option "--incremental"
- If the install4j command line compiler does not use a bundled JRE, print Java version and home directory
Bug fixes:
- "Execute SQL script" action: If "Script source" is set to "File", the entire file was read into memory
- "Download file" action: If the parent directory of the selected file did not exist, it was not created
- "Installation location screen": The displayed required disk space did not include the safety margin added in the validation
- "Single radio button" form component: Console mode did not work correctly if some radio buttons were invisible or disabled
- Externally packaged files were still packaged even if the property was hidden, for example, by a checkbox parent property
- Wildcards in archive names did not work on the "Installer → Custom Code & Resources" step
- RPM archives did not contains MD5 signatures
- When a build was canceled, temporary files were not deleted
- After running an installer application, a temporary file was not deleted
- If import statements in static fields and methods were used, the code editor for all other scripts showed an error bar in the gutter
- When calling JVMSelector.setPreferredJre, the installer variable sys.preferredJre was not updated
- Windows launchers: Fixed crash for very large classpaths
- Mac OS X: Do not write JRE bundles into the directory [app directory]/jres, but only into $HOME/.install4j6/jres
- Mac OS X: Update installers could not be unmounted from the desktop under Mac OS X 10.10
- Mac OS X: The "Start a service" action printed an error message in the log file even if the action was successful
- Linux/Unix: The launcher variable launcher:sys.jvmHome was sometimes not correctly resolved
- Linux/Unix: Print launcher name in daemon status messages instead of using "daemon". This is useful if several status commands are executed.
- Linux/Unix: A logging message from the java.util.prefs subsystem could be printed at the beginning of the installer
New features:
- When choosing actions, screens, or form components, pressing the down or up keys in the text field now jumps to the filtered tree
- Added example build files for Gradle and ant in the "hello" sample project
API changes:
- Added com.install4j.api.events.EventType#DIRECTORY_CREATED and com.install4j.api.events.InstallerDirectoryEvent to listen for directory creation events
Bug fixes:
- Regression in 6.0: Unix: The restart of the installer due to a different language selection could fail under certain circumstances
- Regression in 6.0: com.install4j.api.update.UpdateChecker did not ask for proxy password anymore
- Regression in 6.0: "Anchor" property of form component groups was not saved
- Mac OS X: Using compiler variables in the executable name of installer applications produced an invalid name for the generated ICNS icon file
- Mac OS X: "Add VM options" action did not work for folder installers when "Target file on Mac OS X" was set to "Next to application bundle"
- Mac OS X: An initial progress window was shown if the installer was started in unattended mode
- "HTTP request" action: Fixed NPE if the content type is unknown
- For installer applications that were launched in-process, JAR files in the custom code were not added to the class path
- Temporary directory was not deleted if a DMG was compiled
- Installers did not work with BusyBox on embedded Linux distributions
- If installer variables were used in the installer VM parameters, the "Request privileges" action would fail
- If all launcher integrations were removed during an update installation, the old launcher integrations would remain in place
- When installing the command line launcher links, /usr/local/bin was not created if it did not already exist
New features:
- Added a gradle plugin
- Added properties file actions: "Read a properties file", "Remove keys from properties file" and "Write properties to file"
- Added JDBC actions: "Check JDBC connection", "Execute SQL query" and "Execute SQL script"
- Added XML modification actions: "Insert XML fragment into XML files" and "Remove nodes from XML files"
- Added HTTP and network actions: "HTTP request", "Upload file" and "Wait for Socket"
- The new "Test installer" tool bar button just recompiles scripts, screens, and actions and updates an existing media file for a fast edit-compile-test loop.
- Support for very large installers: 4GB on Windows, no limitations on Mac OS X and Unix, and on all platforms with external media files
- Ability to write compressed DMGs, Mac OS X archives are now written as DMG by default
- The DMG volume name and the installer name in the DMG are now configurable in the media wizard
- Ability to add additional top-level files into DMGs making it possible to style the Finder window
- I18N for launcher names on Mac OS X by using installer variables in launcher names
- Installer applications: Added properties to specify a different executable name for Mac OS X. Uninstaller name on Mac OS X is not hard-coded anymore.
- Possibility to configure a different application bundle name for Mac OS X on the "Mac OS X options" step of the launcher wizard
- Command line and service launchers are now generated for Mac OS X single bundle media file types as well
- Debug log for Mac OS X launchers can be created by specifying the environment variable INSTALL4J_LOG=yes
- ICNS icon for Mac OS X launchers is now generated from cross-platform images if no ICNS icon is specified
- Retina icons in installers, image properties also support retina resolution
- JRE bundle creation wizard and command line executable on Mac OS X, with the option to create unpacked JRE bundles.
- "Check for running processes" action now works on Mac OS X as well
- Updater templates have been adjusted to support archive media file types on Mac OS X
- Many UI fixes for Mac OS X
- "Reboot computer" action and com.install4j.api.context.Context#triggerReboot now work on Mac OS X as well
- The installer variables "sys.appDataDir", "sys.localAppdataDir", "sys.docsDir", "sys.fontsDir" and "sys.programsDir" are now also implemented on Mac OS X
- Util#showPath now mounts and opens DMG files on Mac OS X
- Support for comments on variable definitions in response files, configurable in the IDE and via the API.
- Installer variable configuration: Added a "Response file" tab to configure response file properties.
- When loading a response file, all variables are now registered as response file variables. For the "Load a response file" action, a "Register variables for response file" property has been added to make it possible to revert to the previous behavior of not registering any variables as response file variables.
- "Load a response file" action: Added an "Overwrite strategy" property that allows you to select in what cases existing variable definitions should be overridden. New is the option for not overwriting the variable definitions that were passed on the command line.
- Response files are now sorted alphabetically
- Added a "Modify response file" action.
- "Create a response file" action: Added a "Variable selection mode" property to either exclude or include response file variables
- Java editor: Add stubs for abstract methods when completing an interface or abstract class
- Java editor: Optional auto-import during code completion
- Added a script that contains static fields and methods for all scripts, configurable under "Installer → Custom Code & Resources"
- Show line numbers of user input in compiler errors and stack traces, lines outside user input in the generated source are prefixed with "*"
- install4j script classes are not in the default package anymore. This fixes problems with in-process installer applications and signed jar files that contain classes in the default package
- Support DPI scaling for Windows launchers with a setting on the "Executable info → Windows manifest options step" of the launcher wizard
- Added "/run" and "/run-redirect" parameter for Windows services, "run" and "run-redirect" parameters for Unix services to start a service in command line mode from a terminal
- Windows launchers no longer poll the file system for the internal single instance and splash screen communications
- Splash screen API now works for the Java splash screen as well
- Use the Java splash screen on Mac OS X and Unix instead of the fallback implementation necessary before Java 6
- Optimized JRE search sequence for Unix launchers
- "Download file" and "Check for update" action: Added "Connect timeout", "Read timeout", "Accept all SSL certificates" and "Request headers" properties
- "Wait for HTTP server" action: Now supports HTTPS. The URL configuration is now a single string, eliminating the common problem of a variable port.
- "Installation location" screen, "Installation directory chooser" form component, and "Installation components" screen: Added a "Standard validation" property that allows you to switch off the default directory validation.
- "Register Add/Remove item": Added an "Icon source" property. The installer icon is now used by default.
- Native file choosers and alerts in the install4j IDE
- New failure strategy for actions: "Return to parent screen"
- Installer variable configuration: Added a checkbox for not writing variable values to the log file (same as Context#registerHidden)
- Replacement for PDF action and screen based on ICEpdf
- Added cross-platform installer variables "sys.desktopDir", "sys.docsDir" and "sys.downloadsDir"
- Linux RPM media files: Added "operating system" and "architecture" settings
- Required and free disk space are now displayed in GB if the size is large enough
- Added a "Disable JRE bundling" build option, also available from the command line and the ant and gradle integrations
- If an exception occurs while instantiating a custom screen, action, or form component in the install4j IDE, show the stack trace in the configuration panel
- Added a "Rollback on failure" property for all installer applications that makes rollback optional
- The installer variable selector now shows on which platforms installer variables are defined if they are not defined for all platforms
- There now is a global "Show IDs" tool bar button which toggles ID display in all views instead of multiple view-specific buttons
- Scripts can now use Java 8 language features if the minimum Java version or the project is set to 1.8
API changes:
- Added com.install4j.api.macos.MacProcesses
- Added WinEnvVars#getFromRegistry to get environment variable values as set in the registry which is especially useful for retrieving the raw value for PATH
- Added com.install4j.api.context.Context#registerResponseFileComment
- Added com.install4j.api.beaninfo.FailureStrategy#RETURN_TO_SCREEN
- Added com.install4j.api.beaninfo.ActionBeanInfo#setDefaultMultiExec
Bug fixes:
- Window menu was always empty on Mac OS X
- Windows registry actions: Show an error at compile time if there is a leading backslash in the key name
- Never access system preferences root if the installer is not running as root on Unix
- If an out-of-bounds proxy port was specified on the command line, the resulting failure did not show the proxy dialog
- In formatted i18n messages all apostrophes were removed
- Sort order in directory chooser did not take localized names into account
- Tilde was not resolved in -include-options directive in vmoptions files on Mac OS X
- Mac OS X: Use "KeepAlive" instead of "OnDemand" for launchd config
- Mac OS X: Error messages for missing JRE did not work for archive media files types
- It was not possible to use the context parameter in a RemoteCallable passed to Context#runElevated
- The selected principal language could also be added as an additional language
- FormComponent#checkCompleted is now only called for visible components. Invisible form components are not checked anymore when the user clicks on "Next".
- "Run executable or batch file" action: Some special characters in the user name would cause the action to fail
- Removed usage of a method that is removed in Java 9
- A 64-bit installer should not suggest the previous installation directory of a 32-bit installation and vice-versa
- Warnings were displayed during compilation if the launcher classpath contained JAR files that were compiled with target 1.8.
New features:
- "Add VM options" and "Modify classpath" actions: Added a "Target file on Mac OS X" option property for selecting either the .vmoptions file inside the application bundle or the .vmoptions file next to the application bundle
Bug fixes:
- Mac OS X: Service installations did not work on Mac OS X 10.10
- Mac OS X: Services were not always started as root
- Mac OS X: Desktop links were not overwritten on Mac OS X
- Mac OS X: Command line launchers did not find Oracle JREs, except if the JRE was the default JRE
- "Install files" action: After downloading installation components, the status message did not switch back to "Extracting files"
Bug fixes:
- Regression in 5.1.13: Java 6 splash screen did not work under some circumstances
- Regression in 5.1.13: Fixed "i4jinst.dll could not be loaded" on some Windows XP installations
New features:
- Implemented required V2 code signing for Mac OS X 10.9.5 and Mac OS X 10.10
- install4j IDE and command line compiler can now run with Java 8
Bug fixes:
- "Text field with format mask" form component: An exception could be thrown when the form was displayed and the initial content was empty and invalid
- File and directory chooser form components: "Initial browser directory" property was only evaluated at startup and not when the screen was initialized
- Fixed exception during project report
- If -c is passed to an installer in addition to -h, show the help on the terminal, even if an X-server is available
- Unix/Linux installers: Removed the warning message on the terminal when the installer name contains parentheses
- "Write to a text file" action: Created files were not deleted during a rollback
- Linux DEB archives: Fixed "bad quality" warning due to lintian bug on ubuntu
- Fixed problems with non-default code page characters in class path
- Mac OS X: Elevated "Run executable or batch file" action did not always run as root user
New features:
- "Combo box", "Drop-down list" and "List" form components: The "Selection change script" property now has a "selectedIndex" parameter in addition to the "selectedItem" parameter.
Bug fixes:
- Linux/Unix installers: Scan classpath entries were broken if GNU grep 2.19 was used
- Linux/Unix installers: Unpacking the bundled jre did not work on some UNIX systems
- When creating a custom JRE bundle in install4j, signed JARs were packed as well. This caused an error at runtime.
- Windows services: Fixed a problem where the service would not shut down
- Linux DEB and RPM archives did not work correctly with recent JRE bundles
- DEB archive compilation was slow
- "Run executable or batch file" action: When using redirection, the "Show console window" property may not be selected
New features:
- Java 8 JRE bundles. Older versions of install4j will not offer these and updated JRE bundles anymore.
- "Load a response file" action: Added an "Overwrite already defined variables" property
Bug fixes:
- "Welcome" screen: "Alert for update" had no effect if the installation directory was changed in a script before the screen was shown
- Fixed problems with non-default code page characters in installation directory
- Mac OS X: JRE installation was not found for the current Java release
- --disable-signing command line argument for install4jc was not recognized
- Fixed a rare problem when invoking the uninstaller from the Windows control panel
- The "sys.platform" compiler variable could not be used in "URL for updates.xml" text field on the "Installer → Auto-Update Options" step
Bug fixes:
- Windows installers: Fixed problems with characters in the installation directory that are not in the default code page
Bug fixes:
- Regression in 5.1.8: Installed JREs could not be found on Windows any more under some circumstances
- Unix services: After terminating a service with -SIGKILL, the unix daemon did not handle the status and stop command correctly
- Mac OS X Java 7 launchers: The minimum version of Mac OS X was set to 10.7 instead of 10.7.3 as required by Java 7
- Mac OS X Java 7 launchers: The generated VM options file defined in the launcher wizard was not created under Contents/vmoptions.txt
Bug fixes:
- Critical: Unix installers could delete the working directory if a CDPATH environment variable was defined and did not include the current directory
- Wide character support in Windows launchers. This solves problems with characters from outside the default code page in user home directory names
- Mac OS X: When Java 7 was used on an unsupported OS version (10.6 or lower), no warning was displayed and the installer would crash
- Mac OS X: JRE download progress was not always correct
- Mac OS X: environment variable replacement in launcher properties like class path and VM parameters did not work
- Mac OS X: .vmoptions file was placed before default VM parameters which prevented overriding
- Mac OS X: the installer variable sys.preferredJre did not include the trailing "Contents/Home/jre" directories
- Code signing: Compilation did not abort when countersigning failed
- If the system property "install4j.noLoggingFix" is set, do not initialize the logging subsystem of the JRE for launchers
- "Directory chooser" and "File chooser" form components: If the file or directory name was empty, there was a space character in the text field
- "Installation type" screen: Component folder selections were ignored in in the installer
- "Change cancel button state" action: Fixed NPE in unattended mode
- "Directory chooser" form component: Fixed NPE when pressing enter
New features:
- Launchers: expand launcher variables and environment variables in the configured working directory of a launcher
- Mac OS X: Implemented Java splash screen functionality for Oracle VMs
- Added the HTTP header "X-Client-Application: install4j" for all HTTP request made by install4j
- "Install a service" action: Added a "Windows Custom Display Name" property for setting a different display name than the name of the launcher
Bug fixes:
- Spaces in the value of the -dir command line arguments to an installer were not trimmed
- Add-on installers did not include certain files referenced by screens, actions, and form components, such as icon images
- Custom code was not on the classpath for elevated actions in the startup node of the uninstaller
- Custom icon configuration for launchers and installer applications: If compiler variables were used in the file name, the size was shown as "unknown"
- If a code signing certificate file did not exist, the compiler reported that the password was wrong
- Form components with leading labels could not be hidden completely, they always took up some space
- The tree in the directory selector scrolled when a directory was selected
- Version numbers with number parts larger than Integer.MAX_VALUE could not be compared by install4j
- Long file names in JRE bundles were not supported on some platforms
- An in-process installer application that was canceled could not be called again
- Mac OS X: The order of the custom code class path entries was not preserved at runtime
- Fixed warning when description was not specified for DEB archives
- Fixed formatting of DEB archive description
- Mac OS X 10.8+: "Add a startup executable" action did not work anymore
- Fixed wrong height of progress bar on Windows 2012
- Could not use Context#gotoScreen in startup node
- Fixed a crash with the no_NO_NY locale
- Linux RPM and DEB archives: Files were removed before the custom pre-uninstall script
- Mac OS X: Forbidden characters were not replaced for the bundle name
- RPM archives did not work on Fedora 19
- Launchers with an install4j splash screen showed the splash screen again when invoking an in-process installer application
- Instances of InstallationComponentSetup could not be modified from elevated actions
- "Wait for HTTP port" action did not replace installer variables
- File chooser component: File filter was not selected by default, installer variables were not replaced for file filter name and extensions
- The console screen change handler that can be configured for the entire installer application was not called for customizable screens
- Custom code: Associated actions and screens could not be loaded if the bean was added on the Installer → Custom code & Resources tab
- "Show URL" action: No error was displayed if an URL could not be shown
New features:
- "Directory selection" screen and "Directory chooser" form component: Added a "Standard validation" property that can be used to switch of basic validation of the directory name
- "Welcome" screen: If the update question is visible, show a tooltip icon that displays the installation directory
- Debian media files: Added an "Architecture" option on the "Installation options" step of the media wizard
API changes:
- API: added Util#isWindows2012
- API: FormEnvironment#makeParentGroupVisible did not work if the form component was contained in nested layouts
Bug fixes:
- "Install a service" action: Spaces after commas in the comma-separated list of Windows dependencies were not supported
- For scripts of form components in uninstaller screens, the editor assumed a context parameter of type InstallerContext instead of UninstallerContext
- Fixed an NPE when installer variables were used in archive launchers
- Increased window sizes of the "Running processes" window and the native installer splash dialog on Windows
- Debug installer did not work if external installer data files were selected
- Fixed an exception when Pack200 was used and no user scripts where present in the installer
- Custom code was not added to the elevated helper process of the uninstaller
- Running services could block unattended update installer
- Fixed problems with old Xerces implementations in java extension directories
- Config files could be garbled when opening and saving multiple config files on certain Linux systems
- Updater templates: In console and GUI mode, the updater template did not adjust the installation directory to that the invoking installation. This could be a problem if there were multiple installations with the same application ID.
- Mac OS X: Fixed exception when an application bundle directory was used as an external launcher
- Mac OS X: Messages installer splash dialog (Java 7 only) were not displayed correctly in some languages
- Mac OS X: Installed Oracle JRE was not found for recent JRE versions
- Linux/Unix: Return 0 when stopping a non-running service
- Linux/Unix: The directory lib/ext in bundled JREs was not used as an extension directory
- Linux/Unix: Logging from the java.util.prefs subsystem was printed on the command line for installers running with Java 7
Bug fixes:
- "Create a Zip file" action: The action could not be run in elevated mode
- Fixed an IllegalStateException for downloads
- Mac OS X: Fixed an AccessControlException that would occur for silent installers with a bundled Java 7 JRE
- Mac OS X: Only the first file association was installed (regression in 5.1)
- Windows code signing: No error was shown if the Windows certificate file did not contain the complete certificate chain
- Code samples in help were compressed to single lines
- File selectors for the distribution tree showed spurious check boxes when hovering with the mouse over the tree
New features:
- Code signing: Windows executables are now hashed with SHA1 instead of MD5 which prevents problems with some anti-virus software
- "Set the owner of files and directories": It is now possible to change only the group ownership by prefixing the "Owner" property with a colon
- "Modify text files", "Modify text files with regular expressions" and "Replace text in XML files" action: The "Replacement" property now has a multi-line editor
API changes:
- Added com.install4j.api.context.Context#getDefaultInstallationDirectory
Bug fixes:
- "Installation components" screen: The first click into checkbox trees had no effect if Java 7 was used
- "Installation location" screen and "Installation directory selector" form component: Aligned required and available space on the right to facilitate comparison
- Fixed a memory leak in the installer
- vmParameter elements in the install4j ant task did not work
- When no JRE was found on Mac OS X, the displayed download URL for the JRE was wrong
- Moving backwards through screen loops was broken
- Fixed Windows 8 certification problems
- Fixed an NPE that could occur when file association were uninstalled
- Fixed a problem when upgrading install4j that resulted in a NoSuchMethodError when compiling a project
- Fixed a java.lang.UnsatisfiedLinkError on uninstallation with a bundled Java 7 when recursive file actions were used after the "uninstall files" action
- Calls into com.install4j.api.ApplicationRegistry could fail if invoked from outside the installer
- JRE bundle creation: If the packing operation failed, no detailed error message was shown
- Fixed NPE in unattended mode that could occur when form screens were contained in screen loops
- Mac OS X: It was not possible to call a "Start a service" action from an installer application that was executed by a service
- Mac OS X: When a downloaded installer was mounted as root (for example by an updater started from service), it could not be executed
- Mac OS X: Added support for app store certificates
- Mac OS X: Custom localization file was not used for the installer (OpenJDK only)
- Mac OS X: Launcher variables were not replaced (OpenJDK only)
- Unix: The file mode of the uninstaller was always set to 700
- Unix: The jre/.systemPrefs directory of a bundled JRE was not removed on uninstallation
- AIX: Java 7 JRE installation was not found
- Windows: Under some circumstances, installed applications were only registered in the install4j application registry on a per-user basis and not system wide
- Windows: Do not add the VM parameter -Dsun.locale.formatasdefault=true as default
New features:
- Generated executables now pass Windows 8 certification
- Mac OS X launcher wizard: On the "Executable info → Mac OS X options" step, you can specify an entitlements file for code signing (relevant for App Store deployments)
- Mac OS X: Installer applications have a "Mac OS X Entitlements file" property
- Mac OS X media file wizard: On the "Installer options" step, you can enable signing of all installed launchers (relevant for using certain OS features such as iCloud storage)
- Mac OS X: Support VM passthrough parameter (prefixed with "-J") like on Windows and Linux/Unix (OpenJDK only)
- Mac OS X: Support -include-options directive in VM parameters (OpenJDK only)
- Mac OS X: Also read .vmoptions file next to the application bundle (OpenJDK only)
- Mac OS X: install4j IDE now works in full screen mode
- "Run executable or batch file" action: Added a "Wait for output streams" property below the "Wait for termination" property which can be deselected so that the action does not wait for child processes to terminate
- Support for non-ASCII path names in tar files
API changes:
- Added Util.isWindows8()
- JVMSelector now finds Oracle JRE on Mac OS X
Bug fixes:
- "Installation type" screen: If the IDs of installation components were customized, the initial installation type could not be set by a response file
- "Directory selection" screen: Fixed NPE if the initial directory was empty
- Floating licenses: Setting the license server on the command line with "install4jc --license FLOAT:server" was not documented, added the new options --windows-edition and --multi-platform-edition to change the desired edition
- Rollback of file installation was always executed at the end. This could lead to wrong results in combination with "Delete files and directories" action.
- "Download file" action: Deselecting "Show progress" did not completely disable progress messages
- Actions that were executed through a link to a single action were never elevated
- Proxy dialog was sometimes not shown when downloading a JRE in the install4j IDE
- Setting -DproxyAuthPassword did not work, the proxy dialog was always shown if a password was required
- The selection of a JDK for the code editor on the General settings → Java version tab was not saved in the project (regression in 5.0)
- Build hung in command line mode when wrong keystore password for code signing was entered
- Linux: Localized desktop directories were not supported
- Custom JRE bundles: JavaFX JAR file was not unpacked
- Fixed a race condition with the install4j splash screen
- Windows code signing: Also handle SPC files in PEM format
- Mac OS X code signing: Allow non-Apple certificates
- Mac OS X: install4jc did not work when Java 7 was set as the default
- Mac OS X: Java 7 could not be used for code editor
- Mac OS X: Avoid duplicate classpath entries
- Mac OS X: An installed Oracle JRE was not found
- Mac OS X: -include-options directive was not supported in .vmoptions files (OpenJDK only)
- Mac OS X: environment variables were not expanded in .vmoptions file (OpenJDK only)
- Mac OS X: File encoding was wrong when OpenJDK was used
New features:
- Project compilation now produces a file "output.txt" that list all generated media files, their IDs, display names and platform types
- "File chooser" and "Directory chooser" form components: Added a "Initial browser directory" property
API changes:
- Install4JPropertyDescriptor.CONTEXT_NO_INSTALLER_VARIABLES now also works for properties of type java.io.File
- In addition to .utf8 files, .properties files are now supported as extension localization files
Bug fixes:
- context.getInstallationComponents() could not be called from an elevated action (regression in 5.1)
- Moving back and forth through screen groups could cause the installer to fail (regression in 5.1)
- "Install files" action: Fixed exception when "delay if necessary" was used for elevated an "Install files" action (regression in 5.1)
- "Hyperlink action label" action: variables in the hyperlink text were not replaced in console mode
- "Hyperlink action label" form component: Show label text in console mode if defined
- "Install files" action: If "Show file names" is deselected, the unpacking progress for packed JAR files was still shown which did not make any sense to the user
- "Leading label" form component: If only an icon and no text was configured, the icon was not shown
- "Start a service" action on Mac OS X: Removed printing of an uncritical exception
- "Single radio button" form component: In console mode, the installer could hang under some circumstances
- Mac OS X code signing: Automatically add Apple certificates if .p12 file contains no chain. The "certificate export" functionality is no longer necessary and has been removed.
- Mac OS X code signing: Fail during build if an unsuitable certificate is provided
- Mac OS X: com.install4j.api.JVMSelector did not return the real home directory of the JRE bundle
- Mac OS X: Mark all launchers as high resolution capable for retina displays
- Linux/Unix: Fixed problem where file modes could not be changed during update installations
- Linux/Unix: com.install4j.api.unix.UnixFileSystem.setMode did not work under some circumstances
- Updaters would throw an NPE in the "Finish" step if the downloaded media file was an archive
- Custom installer applications: external files (such as icons) in were not loaded
- Custom installer applications: An empty working directory lead to an error during build
- Progress operations would not work if a screen with a progress interface was executed through a link
- Compiler variables could not be used in custom localization files
- Linking to screen groups in the same installer application was broken
- In console mode, when cancelling an installer, the subsequent prompt on the terminal could be indented
- Using links in custom installer applications that were contributed from merged projects did not work
- The ID of the uninstaller launcher at runtime was not "uninstaller", but a generated and non-configurable ID
- Do not add custom code jar files to the class path more than once in the installer
- Cached proxy information was never used if the auto-detected browser config was wrong
- Unbalanced quotes for arguments were not handled correctly by launchers
New features:
- Mac OS X launchers: On the Executable info → Mac OS X options step of the launcher wizard, you can now specify a custom bundle identifier
- "Read value from XML file" action: Added a "Variable name for node" property to save the org.w3c.dom.Node value of the match
- Support for compiler variables in pre-defined installer variables of type string and string array
Bug fixes:
- Several command line options were broken (regression in 5.1)
- Javadoc formatting of the API documentation was broken (regression in 5.1)
- Generated installers did not work on OS X 10.5 (regression in 5.1)
- Windows code signing corrupted various 64-bit executables
- Run executable action could not be elevated
- When setting a wizard index for a particular screen, it could not be changed again when showing the screen for a second time
- The installer variable "sys.installationDir" was not written to the response file if the "Installation location" screen was not present in the project
New features:
- Integrated code signing for Windows and Mac OS X
- Support for OpenJDK on Mac OS X
- Support for JRE bundling on Mac OS X if OpenJDK is used
- New privileges architecture where the installer GUI always runs in unelevated mode and actions are elevated on demand, depending on the new "Action elevation type" property of installer applications, screens, groups and actions
- "Run executable or batch file" action: "Timeout" property that can be set if "Wait for termination" is selected. If the timeout is exceeded, the process is killed.
- "Run executable or batch file" action: Added a "Use rollback executable" property to optionally specify an executable that is invoked in the case of a rollback
- "Run executable or batch file" action: In addition to file redirection, the action now supports stderr and stdout redirection to installer variables or to the log file and stdin redirection from a string
- Added a "Require installer privileges" action that is now used in the "Startup" node of uninstallers for new projects by default
- "Add a desktop link" and "Create start menu entry" actions: Added a "Run as administrator" property
- "Directory chooser" form component and "Directory selection" screen: Added an "Allow empty input" property to disable validation if no directory is selected
- Added a "Leading label" form component with no central component
- "Label" form component: Added an "Add empty leading label" property
- Define distribution tree: In the wizard for adding and editing single files, the file names can now be edited
- Launcher wizard: Added the "Executable Info → Mac OS X options" step where an additional fragment for the Info.plist file can be entered
- Loop index for screen and action groups: Loop index variable in loop expression, configurable start index and increment, optional loop index installer variable
- Log execution times of all actions
- Added "Count nodes in XML file" action
- Much faster LZMA compression during build
- Much faster modification of file rights on Linux/Unix/Mac OS X if Java 7 is used
- Faster installation of large files
- Better implementation of Util.showPath on Linux that uses the default file manager if possible
API changes:
- Added com.install4j.api.beaninfo.ActionBeanInfo#setUninstallerStartupAction
- Added InstallerContext#installDirectory(File, UninstallMode) to create empty directories that will be removed by the uninstaller.
- Added com.install4j.api.events.InstallerActionEvent
Bug fixes:
- Multiple directory choosers on the same form screen did not work correctly
- "Display text" screen: Installer variables were not replaced in title, subtitle and info text properties
- Mac OS X: Generated launchers did not work in installation directories with parentheses
- Customizable forms: Pressing CTRL-End would move the form contents for scrollable forms that were not large enough to show a scroll bar
- Project file contents were not stable when saving under some circumstances
- Windows: When removing a service dependency, the change was not propagated to the installation during an update
- "Run executable or batch file" action: If "Wait for termination" is selected, the redirection streams might not have been fully read after the process had finished
- Windows launchers: Remove temporary files if no JRE can be found
- Screens: "Background image" property for wizard index did not have a variable selector
- Compiler variables in external launchers were not replaced during compile-time
- New projects were opened in the background
- Fixed exception when uninstalling file associations
- Windows launchers: Temporary directory creation is now more robust
- Fixed wrong behavior when going back in the screen history where screen loops were present
- "Delete file or directory" action: The action could be unsuccessful under some circumstances
- Fixed XML-related AbstractMethodError on Java 6
API changes:
- Fixed NPE when an error message was show in com.install4j.launcher.ApplicationLauncher
- Return null for special folder API when used on non-windows platforms instead of throwing an exception
Bug fixes:
- Fixed locale regressions in 5.0.10
- Distribution file choosers were not shown if the install4j IDE was run with Java 7
- "File version" property for uninstaller and custom installer applications had no effect, the product version was always used for the Windows version resource
- Unix installers were broken on some systems
- Windows: If the user was changed during UAC, the program groups were not created for the original user
- Installation directory chooser form component: Disabling the form component did not disable the chooser button
New features:
- Added progress feedback for unpacking JAR files that were packed with Pack200 as a percentage number after the file name in the status line
- Windows: The auto-detected language is now the "Display language" setting defined in the "Region and Language" Windows control panel, independently of the used JRE
- Support Java 7 for the install4j IDE and the command line compiler (launchers and installers have already supported Java 7 before)
API changes:
- Added ProgressInterface#setSecondaryPercentCompleted to add progress feedback for secondary tasks in the status line
- UpdateChecker.getUpdateDescriptor threw an NPE instead of an IOException if the connection could not be made to the server
Bug fixes:
- "Directory chooser" and "File chooser" form components: The validation script was not executed when the user clicked on the Next button, so manual changes were not validated
- "Installation type" screen: If custom IDs were defined for the installation types, the installer variable "sys.installationTypeId" was still set to the numeric ID of the selected installation type in console mode
- "Write text to a file" action: Line separators of the runtime platform were not always used in the written file
- "Installation directory chooser" component: A duplicate existing directory warning was displayed in console mode at the end of the form
- "Installation directory chooser" form component: Validation was run even if the component was not visible or not enabled
- "Download and install component" action: The action could only be added once to a project
- All "Spinner" and "Text field with date format" form components: Value initialization was broken for response files
- "Add Windows file rights" and "Add access rights for a key in the Windows registry" actions: Installer variables were not replaced in the "SID or account name" property
- "Display progress" screen: Installer variables in the "Initial status message" property were evaluated at startup and not when the screen was activated
- "Hyperlink URL label" form component: Installer variables in the displayed URL were nor replaced in console mode
- "Add a desktop link" action: The specified icon had no effect for links to a .url file
- ant task: If the "buildids" parameter was specified with an empty value, no media files were built
- Creating a file association could throw an exception
- A hidden installation component that was initially selected was not installed in console mode
- Surrounding white space in answers to multiple choice questions in console mode was not ignored
- Generated service launchers were not compatible under Red Hat Linux
- Mac OS X: Packed custom code jars that are not in the distribution tree were not used for the uninstaller
- Updater applications did not work if they were launched in the same process
- Launchers on Mac OS X and Linux: Native library path entries containing environment variables to an absolute path did not work
- The update descriptor file could contain duplicate <comment> elements for the principal language if it was also added as an additional language
- Mac OS X: A preference store bug in Mac OS X 10.7 broke the detection of previous installations
- Some operations in SWT applications could be slow due an application manifest entry
- Automatic launcher integration did not work in MAC OS X single bundle media files
- Single instance mode for launchers was broken if there were spaces in the name of the executable
- Updaters that were started by launcher integration in the same process at startup did not switch to the native look and feel
- Language auto-detection did not work in unattended mode
- Fixed a Debian package warning
- Linux/Unix installers: If the environment variable GREP_OPTIONS was defined, the installer could break
- Closing the language selection dialog with the window close button could leave the installer hanging
- "Bundled JRE" step in the media wizard: A change in the 32-bit/64-bit selection in the previous step was not considered for the choice of bundled JREs
New features:
- Installer applications: Added a "Progress interface creation script" property to customize the display of progress information for unattended installations
- Installer: Added a "Replacement script for language code" property. This can be used to change the auto-detected language or to implement custom auto-detection of the language that should be used.
- Installer applications: Added a "Help customizer" for modifying the displayed help on the available command line arguments
- "Set a variable" action: Added a "Register for response file" property
- Added a "Hide help button" option on the "Description" tab of the installation component property sheet
- Added a launcher variable "sys.tempDir"
- Added a compiler variable "sys.time"
API changes:
- Added com.install4j.api.context.(Default)UnattendedProgressInterface for the "Progress interface creation script" property of installer applications
- Added Context#getVersion() to get the version of the installed application
- Added Context#getMediaFileId() to get the media file ID of the installer
- Added Context#getExtraCommandLineArguments() to get command line arguments that were not processed by the installer
- Added FormEnvironment#reinitializeFormComponents() to re-run the initialization of all form components
- Variables#getInstallerVariable(String) and Variables.getInstallerVariables() do not throw IOException anymore. If the automatically created response file cannot be read (as is the case for archives), system variables are still available from these methods
- Calling UpdateChecker.getUpdateDescriptor with ApplicationDisplayMode.GUI would throw an NPE if the proxy dialog had to be displayed
- Script properties could not have array return types
Bug fixes:
- Prevent PCA mitigation ("This program might not have installed correctly”) for Windows 7
- Fixed exception when running an installer with certain layouts with Java 1.5
- "Help text" tool tip labels in customizable forms were focusable
- Text form components on tabbed panes: If validation failed with an error message, the parent tab of the text form component was not shown
- Encoding in displayed HTML files was not detected correctly
- "HTML display" form component and screens showing HTML text: For direct entry, installer variables were not replaced in the HTML
- "Installation components" screen: Fixed flickering when toggling the help buttons in the tree
- "Installation components" screen: Only show tree lines if the component tree has component folders
- "Create program group" action: On Unix, the default value of the "Directory for links" property did not use the user input from the "Create program group" screen
- For a wizard index that was defined in the IDE, installer variables were not replaced in the keys and step names
- Fixed NPE when writing a response file with a string array variable value containing a null value in one of the array elements
- Util.showOptionDialog did not show default value in console mode and numeric keys were displayed. This was inconsistent with questions from form components. Keys are now taken from the first letters of the supplied options and can be set explicitly by prefixing the letters with '&'.
- Links to screens or actions in merged projects could fail at runtime under some circumstances
- For certain network errors, downloads would not time out and hang the installer
- If no initial text was set for the status and version lines in the splash screen configuration of a launcher, subsequent updates via the API has no effect on Unix and Mac OS X
- Generated .vmoptions files were not preserved by the "Uninstall previous installation" action
- Installer variables could no longer be used when overriding system messages (regression in 5.0.8)
- System installer variables were not available for archives
- PDF screen and actions did not work anymore
- Using installer variables with numeric values as arguments to i18n keys in expressions like ${i18n:myMessage(${installer:myNumericValue})} did not work
- For launchers in archives, installer variables in system properties and arguments were not replaced with "null" if no response file was available. This was inconsistent with the behavior of launchers in regular installers
- The error output of install4j command line tools was redirected to a file and not displayed on the terminal (regression in 5.0.8)
- If an error occurred during script compilations, lots of warnings regarding serialVersionUIDs were printed as well (regression in 5.0.8).
- Media wizard: In the "Exclude components" screen, if a folder was excluded, the component tree was not displayed the next time that the project was loaded
- Media wizard: When pack200 compression was activated, file exclusions did not work for JAR files that were also used in custom code
- The "createbundle" command line tool did not work in headless mode
- File exclusions for directory entries in the distribution tree were not saved when "Add to subdirectory" was selected for the entry
- Windows registry: Strings stored without null termination were not read correctly
- Windows service shutdown did not work correctly when user code redirected System.in
- Windows user creation failed under certain circumstances
- Mac OS X: An unnecessary test file remained when the installer process was elevated
- Mac OS X: It was not possible to use very long installer names
- Mac OS X: No text field was shown for certain file chooser dialogs in the install4j IDE
- Unix: Installers and launchers did not work if the $HOME directory was not writable
- Unix: Several actions would fail to operate on files whose names contained a dollar sign
New features:
- "Install files" action and "Download and install component" actions: In console mode, file names are now shown on the same line to avoid a long scrolling list of file names
- In console mode, HTML tags are now removed in all text output. Multi-line messages use an HTML to plain text conversion that conserves line breaks, lists, and similar layout tags.
- "Create program group" action: Windows program group entries now have an additional "Run as administrator" option
- Added a "Read text from file" action that reads the contents of a file and saves them to an installer variable
API changes:
- ProgressInterface#setDetailMessage: In console mode, repeated invocation of this method overwrites the current line. This prevents a long scrolling list of temporary information.
- Added Screen#hasDefaultButtons() for hiding the navigation bar at the bottom of the screen
- Context#isUpdateInstallation was not updated when the installation directory was changed by the "Installation location" screen in console mode
- Added WinFileSystem#createStartMenuEntry method with an additional runAsAdministrator parameter
Bug fixes:
- Regression in 5.0.7: File selection for installation components was not saved
- Regression in 5.0.7: Using installer variables in custom localization files did not work as expected anymore, all variables were replaced at startup instead of at the time of usage
- "Create a file association" action: On Mac OS X 10.6, the action did not have any effect until the next reboot
- In console mode, "Downloading ..." was displayed even if no component data files were actually downloaded
- "Multi-line HTML label" form component: In console mode, blank lines were printed before and after the text
- "Fix line feeds" action: The file property was lost when reading a project saved by install4j 4.x
- "Uninstall previous installation" action: An already installed JRE bundle was deleted, which could cause problems
- It was not possible to insert i18n messages which contained installer or compiler variables by using the variable selector
- Unix: Unwanted logging output of the java.util.preferences subsystem was not switched off early enough
- Unix: Installing directly into the home directory did not work. This could be the case if a dedicated user was created whose home directory was set to the installation directory.
- Windows launchers: Error messages about invalid environment variables in the search sequence contained an unresolved variable
- "Fix line feeds" action: In console mode, exceptions were printed if a file or directory did not exist
- "Directory selector" and "File selector" components: In console mode, if the bound variable was defined before the screen was shown, the selector did not show the defined value as the default value
- Updater templates did not force unattended update installers to use the current installation directory which could be a problem if multiple installations of the same product existed
- Max OS X: The code editor dialog would not appear the first time a script was edited
New features:
- Windows installer: Language auto-detection is now also implemented in the native initial progress dialog. If the user language is configured for the installer, it will be used with a fallback to the principal language.
- Windows launchers: Make executable name available for JVM discovery, for example in VisualVM
- Support for .properties files in the editor for custom localization files (ISO-8859-1 encoding and java.util.Properties-style escaping)
- Improved version comparison for auto-updates. Sequences like 2.0 beta 2 → 2.0 rc 1 → 2.0 are now compared correctly
- "Uninstall previous" action: The log file of the uninstaller is now written to .install4j/uninstallPrevious.log
API changes:
- Added com.install4j.api.screens.Screen#hasDefaultInsets which makes it possible to develop custom screens that take up all available space
- com.install4j.api.context.Context#runElevated(...) and #runUnelevated(...) were broken
- UpdateChecker#getUpdateDescriptor did not ask for proxy information if a connection was refused
- AbstractBean#replaceVariables methods did not replace installer and compiler variables when called during the initialization phase of a bean
- InstallerContext.isUpdateInstallation() returned true for any installation if it was called for the first time after the "Install Files" action had already run
Bug fixes:
- "Request privileges" action on Mac OS X: Pack200 compression did not work correctly if the main installation process was elevated
- "Vertical spacer" form component: No space was added in console mode
- "Welcome" screen: Form components with a horizontal size that exceeded the available space broke the layout
- "Create program group" action: Menu integration on Linux/Unix was not always removed during uninstallation
- "Windows user selector" form component: Any SIDs already contained in the bound variable were not displayed in the user selector and discarded on "Next". This prevented the pre-definition of SIDs with response files.
- "Run executable or batch file action": Redirection files were not closed immediately after a successful execution
- "Welcome" screen: Form components were not displayed in console mode
- "Finish" screen: No message was printed in console mode
- "Hyperlink label" form component: Nothing was printed in console mode
- "Create program group" action: The "Display icon" property of URL links did not have any effect in modern Windows versions
- Windows: Fixed UnsatisfiedLinkError during some installations
- Windows launchers: In the fixed VM parameters for launchers and installers, a "\n" was replaced with a newline character
- Windows: When running processes were detected in console mode, an exception was thrown
- Windows: When starting an installer with the -h argument, a corruption warning was shown for the next start
- Windows services: Do not report an error for service uninstallation when the service is already marked for deletion
- Windows services: Do not report an error when stopping a non-active service
- Windows services: The /status command line argument did not work under some circumstances
- Mac OS X daemons: The service actions could fail if an 3rd part plist file with an error was present in /Library/LaunchDaemons
- Mac OS X archives: Command line executables did not have the executable flag
- Mac OS X: The elevation helper processes showed an extra dock icon when INSTALL4J_ARGUMENTS was defined for a GUI installer
- Linux DEB files: Empty dependencies could cause problems with repositories
- Some classes from the install4j API could not be used in scripts, because the compiler did not find them
- Hosts name exceptions in browser proxy configuration were not respected for downloads in install4j
- Proxy information for downloads was not always applied immediately when changed in the browser
- Proxy information in the browser was used even if the proxy was disabled in the browser
- Proxy dialog was not shown in unattended mode with progress dialog
- The variable "sys.programGroupDir" was not available if the "Create program group" screen was not displayed
- Excluding file sets in the media wizard from merged projects caused an NPE in installer
- vmoptions files: "-include-options" command did not work correctly with relative files
- If the "Do not delete temporary directory" build option was selected, generated script sources were still deleted
- At runtime, missing keys in custom localization files did not fall back to the principal language
- Sometimes the installer unnecessarily asked the user about replacing icon files on Linux/Unix
- Prevent multiple error dialogs if auto-saving does not succeed
- Quick search in the list of bound installer variables did not work
- HTML tags were shown for some messages in console mode
- Some file modification actions printed exceptions in console mode
- Hiding an installation component had no effect in console mode
- The language selection in console mode was not presented in the user language, but always in the principal language
- Non-error messages were printed to stderr instead of stdout in unattended mode
New features:
- "Install a service" action: Added a "Windows arguments" property for arguments that are passed to the main class
- "Write text to a file" action: Added a "Log text" property for preventing the replaced text to be written to the installation.log file
- "Run executable or batch file" action: In the redirection properties, /dev/stdout, /dev/stderr and /dev/stdin connect to the default streams of the installer application
- "Check for running processes on Windows" action: For relative files in the "Additional executables" property, only the names of the executables are used for comparison. This enables checking for executables with an unknown location.
- Installer applications: Added a "Disable console mode on Windows" property
- Use a better file choose dialog in the install4j IDE on Mac OS X (from the Quaqua Look and Feel)
API changes:
- Added Context#unregisterResponseFileVariable(String) to reverse the effect of Context#registerResponseFileVariable(String)
- Added WinUser#getUserName(String sid) to get the unqualified user name
- Added Win32UserInfo#getUserProfileDirectory(String sid, String password)
- Added WinFileSystem#getDriveType() to check for removable drives
Bug fixes:
- "Run executable or batch file" action: On Mac OS X, the "Wait for termination" property had no effect if an application bundle was started
- "Run executable or batch file" action: On Windows, use fewer quotes for arguments to avoid issues with programs that do not expect quoted arguments
- "Run executable or batch file" action: If the .exe extension was missing, the executable was not launched on Windows under certain circumstances
- "Run executable or batch file" action: In the installation log file, the values of the redirection files properties were reported without variable replacements
- "Run executable or batch file" action: If a redirection file was set to an installer variable, and that variable contained the empty string, the execution failed
- "Run executable or batch file" action: On Windows, AutoRun commands defined in the registry were not ignored
- "Request privileges" action: On Windows, the action did not work with normal users when UAC was disabled
- "Request privileges" action: On Mac OS X, external media files and elevation of the main process did not work together
- "Add VM options" action: On Mac OS X, the action would fail under certain circumstances
- "Install Files" action: Files were extracted before the user was asked whether an existing file should be overwritten. For large files, this would waste time for the user.
- "Uninstall Files" action: The file classes.jsa of a bundled JRE was not deleted for server VMs
- "Uninstall files" action: In certain cases, shared files were not uninstalled as expected
- "Read a key from the Java preference store" action: The property "Preference root" could not be changed in the install4j IDE
- "Installation components" screen: If multiple hidden installation components were on the same level in the component tree, only the first one was actually hidden.
- "Delete files and directories" action: The action resulted in an error if a file did not exist, which conflicts with the behavior in install4j 4.x. Now the action returns with success even if the file that is to be deleted could not be found.
- "Set a variable" action: Exceptions were not reported in the installation.log file
- Add-on installers installed their own install4j runtime, which could lead to broken uninstallers if runtime library shrinking was enabled
- Regression in 5.0.5: project reports were not opened immediately in browser
- It was not possible to exclude the uninstaller in the "Customize project defaults → Exclude installer elements" step of the media wizard
- Fixed a FileNotFoundException when JAR files were used in the custom code and multiple media files were built
- Single class custom code entries did not work when compiling on Mac OS X
- Windows: The silent installer did not automatically download a dynamic JRE bundle when the direct downloading option was selected on the "Bundled JRE" step of the media wizard
- The "Uninstallation failure" screen was always shown for the installation dir on Mac OS X
- Windows: When msvcrt71.dll was not present in windows\system32, a bundled jre was used, and a launcher was started after installation, the installer always asked for a reboot
- The "Global exclude" pattern under Files → File Options was not saved to the project file
- When changing between different project windows, the file chooser could show the wrong distribution tree under some circumstances
- Fixed a rare string corruption problems with installer settings that were saved to the Windows registry
- Public JREs on HP-UX were not found
- Using links in the same installer application led to ClassCastExceptions at runtime under certain circumstances
- The "preserve" option of the command line compiler was not available on the ant task
- If a download URL was specified on the "Bundled JRE" step of the media wizard, it was used even if the "Don't bundle" a JRE option was selected
- The -wait command line option did not work with unattended mode on Windows. Unattended updaters were mainly affected by this bug.
- Form components: The tool tip help label from the "Help text" property was not shown under some circumstances
- Unix launchers: Using installer variables for redirection files broke the launcher script
- Choosing the "According to update schedule registry" mode on the "Launcher integration" tab of installer applications did not work
- Windows: Services were uninstalled when the service path was changed during an update
- A rollback could leave the file .install4j\response.varfile in the installation directory
- Unix installers did not work with some IBM JREs
- Partially downloaded files were not deleted
- Mac OS X: Pack200 compression was not applied for JAR files in custom code
- Mac OS X: Console launchers could only find the default JRE
- Compiler variables could not be overridden for merged projects from the command line or the ant task
- AIX: Exceptions were printed when an installer was executed
- Mac OS X: The system menu was changed for in-process execution of custom installer applications
- Do not write the default chkconfig info to unix daemon scripts if the custom script for the launcher already contains a chkconfig header
New features:
- Installer applications: Added new execution mode "Unattended mode with progress dialog" and child property "Title for progress dialog". This is the same functionality that is available from the command line with the -splash [title] arguments.
- System installer variables such as "sys.userHome" are now available for launchers, for example, in redirection file names and the in com.install4j.api.launcher.Variables class
- The build options in the Build step of the IDE are now persistent
Bug fixes:
- Under some circumstances, the proxy dialog was not displayed and an exception was thrown instead
- Installer variables could not be used for redirection files of generated launchers
- Under some circumstances, privilege elevation did not work for normal users on Mac OS X
- Installer variables were not resolved when executing a launcher from the installer, because the response file was not yet written
- Update detection did not work for Mac OS X single bundle installers
- Custom code entries with spaces in the path could not be found by script compiler
- If -Dinstall4j.keepLog=true was passed to the installer, the temporary log file was not preserved if the installation was successful
- Windows launchers: Service arguments embedded in the registered binary path did not work correctly
- unpack200 failed on some Windows machines
- "Run executable" and "Execute launcher" actions: On Mac OS X, application bundles were not executed with /usr/bin/open, so it was possible to start them multiple times
- The command line compiler hung on Mac OS X when a vmoptions file without a trailing line feed was processed
- Fixed NPE with launcher integration
- Generated vmoptions files were not included when launcher was selected directly in the component selection
- Custom code jars were not copied to the final destination when selected directly in the component selection
- -Dinstall4j.debug=true was not set in debug scripts, so stack traces were not printed to stderr
- installer variables: In properties with array values (like the arguments of a "Run executable" action), empty array values resulting from empty installer variables were not pruned from the resulting array
- Unix launchers: Installer variables in fixed VM parameters and arguments were always replaced with empty strings
- If there was a fatal error while writing the update descriptor, the build process in the install4j IDE would hang
- Unix installers: Since JRE 1.6.0_17, the workaround for hiding annoying messages from the java.util.prefs subsystem did not work anymore
Bug fixes:
- Custom icon for the installer was not used for the wizard window (regression in 5.0.3)
- Clicking on the "Finish button" in install4j IDE wizards closed the wizard immediately (regression in 5.0.3)
- "Create a ZIP file" action: Installer variables were not replaced in the "ZIP file" property
- Definitions in a response file that was specified with the -varfile command line option were overridden by predefined installer variables
- Fixed a deadlock for Windows launchers
- Fixed deadlock while saving a project
- Mac OS X: The content of a vmoptions file specified in the launcher wizard was not added to the static VM parameters for command line and service launchers
- Windows: Invisible windows could have the name "Default IME" or "theAwtToolkitWindow" which was displayed by the check for running processes. Now, the file name is used in these cases.
- Auto-saving of a project file was not stopped after a frame was closed
- Text form components: If "Prevent empty user input" was selected, disabled components produced a warning message, too
- Transparency in customizable banner form screens was sometimes incorrect for the classic Windows Look and Feel
- It was not possible to use ampersand characters in custom message files
- Could not pass "-e" to unix scripts when VM pass-through parameters were enabled
- Starting services with "For Auto start installations only" selected did not work for services generated by install4j
- Custom installer applications in archives did not work when runtime shrinking was enabled
- Using compiler variables for fixed installer arguments or VN parameters did not work when debug installers were generated
New features:
- "Welcome" screen: The screen is now a container for form components
- Media file wizards of installers: Added a project customization step to statically include selected installation components that have been marked as downloadable for the whole project
- When invoking unattended installers with the "-splash" options, there is now a cancel button.
- Added a "Change cancel button state" action
- "Run executable" action: Added a "Variable name for return code" property (nested property of "Wait for termination"), so you can use the return value later on.
- Added an installer variable sys.workingDir
API changes:
- Added com.install4j.api.context.InstallationComponentSetup#isDownloaded()
Bug fixes:
- Media file wizards of installers: Excluding the default file set broke the build
- Copying and pasting into text fields did not mark the project as modified
- Line endings in debug installers for other platforms than the current platform were incorrect
- Scripts in form components are now passed the actual context interface (InstallerContext or UninstallerContext) instead of the parent Context interface
- The installer variable sys.windowsDir did not contain the system wide directory when using terminal services
- The command line compiler only allowed a single concurrent instance
- "Run executable or batch file" action: If the executable did not exist, the action did not fail
- Mac OS X: Background of some form components in configurable banner screens was gray, if they were contained in layout groups
- Project report: "Allow 64-bit" setting was inverted
- Too much memory was used when writing the files log
- Custom icon for uninstaller was not shown as frame icon
- Custom banner image of configurable banner forms was not shown in preview dialog
- Custom banner image of configurable banner forms was not firmly anchored to "North" and "South" if the image height was greater than the maximum available height in the window
- The installer variable sys.tempDir returned the wrong value
- Elevation of privileges did not work correctly on Mac OS X 10.5
- The -splash command line argument in unattended mode did not work when a custom installer application was launched in process
- Fixed arguments for custom installer applications were ignored when the application was launched in process
New features:
- Windows: Add a window entry to the task bar if a dialog box is shown while the main installer window is not visible
Bug fixes:
- Pack200 compression was not applied
- Display output of code signing post-processor in order to help with debugging configuration problems
- Installer applications: Variables in the "Custom watermark text property" were not replaced
- The check for update action of the install4j IDE would crash under certain circumstances
- Including certain JAR files in custom code lead to a "No disk space left" error in the installer
- "Create program group" screen: Installer variables in the "Program group name" and "Directory for links" properties were not replaced
- "Copy files and directories" and "Move files and directories" action: Single file-to-file operations did not work as in 4.x.
New features:
- Improved the preview dialog for configurable forms to make it more like the actual screen at runtime
- Allow a * placeholder in classpath archive entries to support frequently changing version numbers of JAR files like in maven projects
API changes:
- Added methods in com.install4j.api.windows.WinRegistry to access the 32-bit and 64-bit registry views on 64-bit systems
Bug fixes:
- For multi-language installers, the "Request privileges" action did not work on Windows
- Fixed UnsatisfiedLinkError when installer was started from an updater that was generated with install4j 4.x
- Mac OS X: Some form components had a gray background on banner screens
- Unix and Mac start scripts for debug installers and debug uninstallers were broken
- Formatted text field form components: "Initial text" property was ignored
- Formatted text field form components and password form component: The "Enter goes to next screen" property was ignored
- Installation directory chooser form component: An exception was thrown when previewing the form
- If installation component folders were used and none of the contained installation components were selected, the installer would throw an exception on startup
- "Copy files and directories" and "Move files and directories" actions: If the target directory was a relative file, the actions did not work
New features:
- The new "Request privileges" action replaces the "Require admin user" action. It can elevate the main installation process or create a helper process with full privileges and works on Windows and Mac OS X.
- "Run executable or batch file" action: The "Execution account" property allows you to run the executable as the original user or as an admin user
- Service actions and actions that add rights on Windows will be executed in the helper process with full privileges if the "Request privileges" action was configured accordingly
- The "Show URL" action, the "Show file" action, and the "Execute launcher" action will be executed as the original user if the "Request privileges" action has elevated the main installation process
- "Install files" action: Use original user rights when parent directory of an installed file belongs to the original user. This is relevant if the installer has been elevated with a different user account.
- The variable selection dialog was redesigned. It supports filtering and shows default values and descriptions for all variables
- Many new system variables were added
- Compiler variables can now be organized in a tree and have descriptions that are shown in the variable selector
- Installer variables can be pre-defined similar to compiler variables
- When inserting variables, the correct expression is inserted for text fields, scripts and variable name properties
- Installer variables that are bound to beans are detected and displayed in the variable selector
- Bindings of installer variables are detected and displayed with back traces for each installer application
- Custom localization files can now be created and edited in the install4j IDE, an action for overriding system messages is available in the editor.
- All elements that have IDs can now be assigned custom IDs. The automatically assigned IDs continue to be valid.
- The script editor now offers a dialog that lets you choose an ID by listing all available elements with IDs
- Actions that operate on files now accept multiple files where appropriate
- Actions that operate on multiple files now have "File filter" and "Directory filter" properties to control file processing with scripts
- A launcher integration tab has been added to custom installer applications where you can configure automatic invocations when launchers are executed. This is particularly useful for updaters.
- On the "launcher integration tab", an integration wizard for calling custom installer applications from Java code is available
- All features of the update descriptor (updates.xml) are now exposed on the new Installer → Auto-Update Options tab
- Some features of the update descriptor can be set on a per-media file basis in the Customize project defaults → Auto update options step of the media wizard
- Updaters templates now reference the URL for updates.xml with the new compiler variable sys.updatesUrl
- Comments in the update descriptor are now localizable
- Added a "Windows user selector" form component that also has the ability to create new users
- "Install a service" action: The "Account" property has an "Other" option that lets you set a specific user to run the service
- "Add access rights for a key in the Windows registry" and "Add Windows file rights" actions: The "Trustee" property has an "SID or Account name" option that lets you set a specific user
- Service actions now support service executables that were not generated by install4j. If you set the "Service" property to "Other executable", an executable and a service name can be configured.
- Service options can now be configured for each "Install service" action instead of the previous per-launcher configuration in the launcher wizard
- "Install service" action: Added a "Windows priority" property
- "Install service" action: Added an "Account" property
- "Install service" action: Added a "Keep current account" property to preserve account changes by the user that were made manually after the installation
- "Install service" action: Added a "Restart on failure" property
- "Install service" action: Added an "Interactive" property
- "Install service" action: Added a "Mac OS X identifier" property
- Services on Mac OS X now use the more modern "launchd" subsystem
- Custom code: The single user JAR file will only be created for directory and single class file entries. JAR files and resource files will not be packed into the single user JAR file anymore, they will be extracted to the .install4j/user directory. This directory is available from the sys.resourceDir installer variable.
- Custom code will never be packaged twice. If the same JAR file should be installed, it will be moved from the .install4j/user directory where the custom code has been initially extracted.
- Improved corruption detection and error messages in generated installers
- MD5 checksums are calculated during the compilation
- For downloadable installation components, the download integrity is checked with MD5 checksums
- "Download file" action: Added a "Check for md5sums" property
- Added a "Check for running processes on Windows" action that optionally allows the user to terminate those processes automatically
- "Install files" action: If running processes are detected, the corresponding window titles are presented in a dialog
- The new Files → File Options tab allows you to define global options for the distribution tree that can be overridden for each entry in the distribution tree
- Launchers now have a configurable overwrite mode for launchers on the Executable info step of the launcher wizard.
- Launchers now have a configurable unix file mode on the Executable info → Unix options step of the launcher wizard
- Distribution tree: Option to add a directory entry into a subdirectory
- Common external content files for downloadable components and external data files. On the General Settings → Media File Options tab, you can enable this feature which is particularly useful for DVDs with multiple media files.
- External data files are now also supported on Mac OS X
- File definition tree: Support for multiple selection, copy mode for drag and drop, quick search, and copy and paste
- Runtime is now shrunk to exclude all unused classed. On the General Settings → Media File Options tab this feature can be disabled.
- Added a command line JRE bundle creation utility (createbundle) and a corresponding ant task (com.install4j.CreateBundleTask)
- The JRE bundle creation wizard (Project → Create a JRE Bundle) has been improved in several areas
- "Bundled JRE" step of the media wizard: Added a button to copy a JRE bundle file in a default storage directory to another directory and use a "manual entry" for the copied JRE bundle file.
- "Bundled JRE" step of the media wizard: Added an option to install a statically bundled JRE only if no suitable JRE exists
- Use a private JRE bundle of an existing installation with the same application ID as a fallback if no other JRE can be found
- Added a "Create Windows URL link" action
- Added a "Read value from XML file" action
- Added a "Read a key from the Java preference store" action
- Added a "Read a value from the Windows registry" action
- Added a "Wait for HTTP port" action
- Added a "Download and install component" action
- Added a "Create a ZIP file action"
- Added an "Extract a ZIP file" action.
- Added an "Add an executable to the dock" action
- Added an "Add a startup executable on Windows and OS X" replacing the Windows-only "Add an executable to the startup folder on Windows" action
- Layout groups and tabbed panes in form screens
- All form components with leading labels: Added a "Help text" property. If set, a tool-tip label with a help icon will be added on the right side
- Text field form components: Added a "Prevent empty user input" property that shows a default error message if the user input is empty
- Keyboard shortcuts for form components with user input. Label text can contain mnemonics prefixed with "&" like in "&User" in order to activate the platform-specific keyboard shortcut.
- Form components with user input: Added a "Request focus" property. If selected, the form component is focused each time the form is activated.
- Text field form components: Added an "Enter goes to next screen" property
- Added an "HTML Display" form component
- Installer Applications: Added a "Size client area" property. If selected, the specified size refers to the usable client area of the window and not to the outer dimensions of the window.
- Installer Applications: Added an "Icon can overlap text" property. Now you can use the title bar icon to provide a background for the entire title bar.
- Installer Applications: Added an "Icon anchor" property for the title bar icon.
- Installer Applications: Added "Background color for title bar" and "Foreground color for title bar" properties
- Installer Applications: Added a "Unix mode" property
- Installer Applications: Added properties to customize the Windows version info
- Custom installer applications: Added "Show message when user cancels" and "Cancel message" properties
- Merging of other projects allow the modularization of your installers
- Index pane for the installer that is configurable in the install4j IDE and via the API
- Support for creating Debian archives
- New icon set for Windows Vista/Windows 7 and all other non-Windows XP platforms
- Remember window sizes for install4j frames
- Use configured window size for preview dialogs of form screens
- Multiple projects can be now opened at the same time in separate windows. The file association for .install4j project files now works on Mac OS X as well.
- "Display license agreement", "Display information" and "Display text" screens: Files with text are now localizable and can be edited directly in the install4j IDE
- More lenient error handling for the replacement of installer variables where a text is displayed to the user. Instead of throwing an exception for undefined variables, embed an error message in the replaced text
- Quick search in file choosers
- Added new failure strategy for actions: Ask user on failure whether to retry or quit on failure
- Added a "VM options file" step to the launcher wizard to generate a vmoptions file for a launcher. On Mac OS X, the contents are merged automatically with the static VM options.
- Allow URLs in Javadoc configuration
- "Use online documentation" option in Java editor settings dialog to eliminate script warnings with Internet Explorer
- Cross-platform icons can now be defined more flexibly with multiple arbitrary sizes. Note that the icon configuration of installer applications is now in a regular property instead of a separate tab.
- Installation components: The "Mandatory" option has been changed into a "User can change selection state" option for more flexibility
- "Installation components" screen: Added a "Selection change script" property
- "Set the modification time of files" action: Added a "Recursive" property
- "Create program group" action: Configurable menu name for the uninstaller
- "Create program group" action: Added support for URL entries
- Decoupled "Create program group screen" and "Create program group" action, so that multiple "Create program group" actions can be added. Variables are now set by the screen and the action uses those variables.
- "Create program group" and "Program group selection" screen: Added an option to emit a warning if the selected program group already exists
- "Copy files and directories" action: Added a "Show progress" property
- "Display license" screen and "Display text" screen: Added a "Variable name" property to save the actually displayed text to a variable.
- Banner screens: Added a "Banner image anchor" property
- "Install files" action: Added a "Save downloaded files" property to save downloaded installation components for later reuse
- "Install content of ZIP file" action: Added a "File filter" property
- Changed the installation log file format to be less verbose and more readable
- Help argument for installers (-h or-help or /?) that shows the user which common options are available
- Installers: On a fatal error, try to copy the error log file to the media directory and offer the user a button to show the log file immediately
- Add the possibility to see component descriptions in console mode
- Replace installer variables and environment variables in VM parameters and arguments for all generated launchers
- Update installation detection in "Welcome" screen. Added the variable sys.confirmedUpdateInstallation for the user selection in the "Welcome" screen. The "Installation location" and "Create program group" screens are skipped if this variable contains Boolean.TRUE.
- Added a /create-i4j-log command line parameter for generated Windows executable to easily create and show a native debug log file
- Installation components can now be hidden from the user. They can be configured in the install4j IDE so that they are initially hidden.
- Unix launchers: Added a INSTALL4J_JAVA_PREFIX environment variable to allow the use of sudo or similar in custom scripts
- VM passthrough parameters (like -J-Xmx512m) are now supported on Unix as well
- Added a checkbox on the build section to disable LZMA and Pack200 compression for faster builds
- LSB support for service scripts
- The "customCode" sample project now includes an action ManyFeaturesAction that shows most features of the BeanInfo API
- A "mergedProjects" sample project has been added
API changes:
- Custom installer applications can now be executed from your own code in the same process with com.install4j.api.launcher.ApplicationLauncher#launchApplicationInProcess(...)
- Descriptions in BeanInfo classes can now contain HTML tags for formatting and hyperlinks
- Support for editable text and HTML files, see com.install4j.api.beaninfo.FilePropertyDescriptor#setFileContentType(FileContentType)
- Added com.install4j.api.beans.LocalizableExternalFile for file properties that can be localized by the user in the IDE
- Support for properties with type File[] in all beans, allowing users to select multiple files from the distribution tree
- Java 5 enum properties are now supported without having to use com.install4j.api.beaninfo.EnumerationMapper
- Added com.install4j.api.beaninfo.Install4JBeanInfo#setCategoryOrder(String[]) to override alphabetical category ordering
- Added com.install4j.api.beaninfo.ActionBeanInfo#setFullPrivilegesRequired(boolean)
- Added com.install4j.api.beaninfo.ActionBeanInfo#setComplementaryStartupLink(boolean)
- Added com.install4j.api.beaninfo.Install4JPropertyDescriptor#CONTEXT_COMPONENT and #CONTEXT_DOWNLOADABLE_COMPONENT for receiving installation components IDs in a String property
- Added com.install4j.api.beaninfo.Install4JPropertyDescriptor#CONTEXT_VARIABLE_NAME for properties that hold a variable name. The install4j IDE will offer a selector of pre-defined variables.
- Added com.install4j.api.beans.Anchor
- Added com.install4j.api.beans.LocalizableExternalFile
- Added com.install4j.api.beaninfo.Install4JPropertyDescriptor#CONTEXT_ANCHOR_CORNERS, #CONTEXT_ANCHOR_SIDES, #CONTEXT_ANCHOR_HORIZONTAL, and #CONTEXT_ANCHOR_VERTICAL for properties of type com.install4j.api.beans.Anchor
- Added com.install4j.api.formcomponents.LayoutGroup
- Added com.install4j.api.formcomponents.FormEnvironment#getDesignTimeName(LayoutGroup) and #makeParentGroupVisible(FormComponent)
- Configurable error handling for the replace(...) methods in com.install4j.api.beans.AbstractBean. The com.install4j.api.beans.VariableErrorHandlingDescriptor can be used to configure error handling for the replacement of installer variables, localization keys, and compiler variables at runtime.
- Added com.install4j.api.context.Context#isRebootRequired()
- Added com.install4j.api.context.Context#getContentDirectory()
- Added com.install4j.api.context.Context#getResourceDirectory()
- Added com.install4j.api.context.Context#runElevated(RemoteCallable, boolean) and #runUnelevated(RemoteCallable)
- Added com.install4j.api.context.Context#isUpdateInstallation() indicating if an update installation was chosen in the "Welcome" screen
- Added com.install4j.api.Util#log(Throwable t)
- Added com.install4j.api.Util#isAdminGroup()
- Added com.install4j.api.Util#hasFullAdminRights()
- Added com.install4j.api.windows.WinUser
- Added com.install4j.api.windows.WinProcesses
- Added com.install4j.api.context.InstallationComponentSetup#setHidden(boolean) and #isHidden
- Added com.install4j.api.context.WizardIndex
- Added com.install4j.api.context.WizardContext#setWizardIndex(WizardIndex) and #setWizardIndexKey(String)
- Added installer events for downloading of files com.install4j.api.event.EventType#BEFORE_DOWNLOAD and #AFTER_DOWNLOAD as well as the event object class com.install4j.api.event.InstallerDownloadEvent with the possibility to get URL, download file, download size and download progress.
- Added com.install4j.api.screens.Screen#isCreateLazily() to avoid screen creation at startup. This is useful if you want to add JAR files with the new method com.install4j.api.context.Context#addToClassPath(File file) after the "Install files" action has run.
- Added com.install4j.api.context.Context#initializeLazilyCreatedScreens() to create all lazily created screens at once.
Bug fixes:
- "Integer text field" form component: For extremely long input, a Double and not a Long was returned
- "Customizable banner" screen: Installer variables were not replaced in "Info text" property
- Launcher wizard: "Check -console parameter" check box was always unselected, regardless of actual configuration
- Fixed problems with service shutdown
- Do not make paths with contained variables relative when saving the project
- Paths of manual entries in the "Bundled JRE" step of the media wizard were not made relative when the project was saved
- Only offer x86 JRE bundles for 32-bit Windows media files and amd64 JRE bundles for 64-bit Windows media files
- Abort instead of printing a warning if the media file output directory cannot be created
- The running processes warning message was wrong for add-on installers
- sys.platform now resolves to "windows-x64" for 64-bit media files (previously "windows")
- Bean development: Visibility discriminators of nested properties had no effect
- Do not prevent continuing in the file wizard of the distribution tree if a variable expression does not exists
- Debug installers now work with both 32-bit and 64-bit JREs
- Debug launchers are now made executable on Unix and Mac OS X
- Add -d32 to debug launchers on Mac OS X if 64-bit JREs are not allowed
- Add configured VM parameters and arguments to debug launchers
- Print installation directory in unattended mode if installation directory selector is shown and include directory in "no write permission" message.
- "Create program group" screen: The program group name was not checked for invalid characters
- For custom installer applications, the title bar icon was always taken from the installer configuration
- After a project export, sometimes an NPE was thrown when showing a script edit dialog
- If files could not be deleted or installed and a reboot is required, no other installers can run until the reboot has been performed in order to avoid the corruption of new installations on subsequent restarts
- Stable naming of external data files for the installer
- Omit .install4j directory for Unix archives if no generated launchers or custom installer applications are packaged
- The displayed required sizes were wrong under some circumstances
- An environment variable that did not exist and was created by the installer was not deleted on uninstallation
- Delete empty parent folders even if they were not created by the installer
- Show the initial progress window if the -splash option is specified for an unattended installer
- The -dir command line option did not override the installation directory in a response file
- The locale was not set correctly for locales with a country part like pt_BR
- Fixed Javadoc anchors in script edit dialog on Windows 7
New features:
- New locale: Romanian
- Comma separated lists are now supported in archive classpath entries, this is useful if compiler variables are used
- API: Added a new event type EventType.FILE_INSTALLATION_STARTED with an event object com.install4j.api.events.InstallerFileInstallationEvent that gives access to total installation size and file count
- API: Added com.install4j.api.events.InstallerFileEvent#getFileSize
- Support for OpenJDK on Windows
Bug fixes:
- "Install Files" action: Stop services before checking for running processes
- "Installation components" screen: Dependency chains of installation components were not getting updated properly in the tree
- "Run executable or batch file" action: Sometimes a single zero-length string argument was passed
- "Uninstall previous installation" action on Mac OS X: The action did not work correctly when the "Require admin user" action was present
- "Installation location" screen: Validation error messages were displayed twice if the directory was selected with the chooser button and the user wanted to proceed anyway
- "Progress display" form component: Fixed a StackOverflow error
- When saving a project to a new location, paths that started with variables were mistakenly prepended with a relative location
- i18n messages were not replaced in splash screen text lines
- Selected and unchangeable components were not installed in console mode
- Fixed internal error 7 when a lot of processes were started at the same time
- Environment variables were not replaced in directory entries of the JRE search sequence
- "Registry and standard locations" search sequence entry did not always choose the newest JVM
- Windows: Creating a 64-JRE bit bundle from a 32-bit install4j IDE did not work correctly
- Windows: Launching media files from the build section in the install4j IDE did not work correctly if UAC was turned on
- If paths in the Installer → Custom code tab contained compiler variables, those variables could not be overridden from the command line
- Classes in extension JARs could not be accessed in scripts
- Unix installers: Improved error message if the unpack200 executable fails
- Set java.library.path explicitly to fix problems on some Windows Server 2003 machines
- JRE bundles: Run -Xshare:dump only for Sun VMs
- Use system language instead of principal language on Mac OS X for the system menu and dialogs
New features:
- API: added com.install4j.api.Util#isWindows2008()
- API: Added com.install4j.api.Util#is64BitWindows() to test whether the Windows is a 64-bit Windows regardless of the currently used JRE
Bug fixes:
- "Register Add/Remove item" action: The version was not displayed in the installation details of the software registry
- "Register Add/Remove item" action: Entries from HKEY_CURRENT_USER which were created if an installer did not run with admin privileges were not removed by the uninstaller
- "Run Executable" action: Do not replace path separators in environment variables
- "Run executable" and "Execute launcher" actions: On Windows Vista or higher, launching executables in locations with non-ascii characters did not work anymore
- Multi-language installers could hang after language selection under certain circumstances
- Error dialog "Could not open message file" could not be displayed in headless modes
- Under certain conditions, the navigation buttons in the installer were re-enabled before the next screen was shown
- Mac OS X: Absolute paths for launcher redirection files were not supported
- Mac OS X: Under certain conditions, a newly mounted installer could not be executed by the updater
- Mac OS X: Fixed problem with non-ascii characters in description when using multiple file associations
- Mac OS X launchers: environment variables with the syntax ${VARIABLENAME} were not replaced in redirection files and system properties
- Windows launchers: fixed hanging processes in single instance mode when the parent process exits immediately and many processes were started
- Some splash screen image files were mistakenly reported as broken by the compiler
Bug fixes:
- Regression in 4.2.5: Validation in directory chooser validated content in text field instead of user selection
- Regression in 4.2.5: Directory chooser was sometimes not opened if user clicked on "Browse"
- Improved the error message that is displayed when the JVM cannot be started.
- Launchers: Sometimes, the launcher icon was compiled even if the "Add icon to launcher" check box was not selected
- Installer applications: The cross-platform icons were packaged even when "Customize icon" was deselected
- "Run executable" action: Setting and clearing the arguments property value lead to the executable being called with a single zero-length argument
- Custom icon of installer applications: The settings were not saved reliably
- Installation components that were set to "not changeable" via the API were still displayed by the console installer
- Installation component folders that contained only mandatory components were not shown with a disabled checkbox
New features:
- "Load response file" action: Added an "excluded variables" property for variables in the response file that should be ignored.
- "Create a file association" action: Added a "Role" property for Mac OS X to make the file association role configurable as "Viewer or "Editor"
- "Bundled JRE" step of media wizards with dynamic JRE bundles: Added "Start download without user confirmation, if necessary" check box
- Added an "Arguments" property to installer, uninstaller and custom installer applications that allows fixed arguments to be passed to the installer application
- Directory chooser improvements: Rescan when directory is collapsed, new folder button at the bottom, context menu, dragging a file int the tree sets the current selection
- File and directory chooser components: dragging files to the text field is now possible
- Installation directory choosers and "customizable directory" screen: Added a "Manual entry allowed" property
- "Directory selection" screen: Added "Validation script" property
- All beans with directory choosers: The "validation script" property is now also executed in console mode and when the screen is validated, not only when for chooser button is used
- Separate field for product name in the Windows version resource info step of the launcher wizard
- Added VM parameter -Dinstall4j.suppressStdout=true to prevent status messages from being written to stdout in unattended mode
- Added VM parameter -Dinstall4j.detailStdout=true to print installed file names to stdout in unattended mode
- Added VM parameter -Dinstall4j.suppressUnattendedReboot=true to prevent a reboot in unattended mode
Bug fixes:
- "Password field" form component: do not trim leading and trailing spaces of passwords
- Mac OS X install4j ant task did not work with Java 1.6
- "Add desktop link" action: The action will now try to append .exe on Windows if the destination file does not exist
- Changed the desktop file in order to prevent the "untrusted application" message on GNOME
- Installation directory selectors: In console mode, it was not checked correctly if the selected directory is suitable
- "Installation type" screen: Variable sys.installationTypeId was not set in console mode
- Fixed execution of downloaded update installers with bundled JREs on Unix
- The generated file classes.jsa of a bundled JRE was not removed when the installer was canceled
- Fixed compile exception for launchers in excluded file sets
- Mac OS X: The date in the DMG file was wrong
- If "Insert after selection" was selected in a bean registry dialog, some beans were inserted in a wrong position
- Compiler variables could not be used when overriding the message key UninstallerMenuEntry
- Fixed backspace handling in console mode when using Putty 0.5 and AIX
- "," is not a bad character for program group names
- The previous JRE was not restored on rollback
- API: com.install4j.api.SystemInfo.getPhysicalMemory() did not work for Linux 2.4 kernels
New features:
- Launchers: Added option in the redirection step of the launcher wizard to append output to existing redirection files
- Added a "Console handler" form component
- Added a "Console screen change handler" property to all installer applications. With this script it is possible to insert a header or custom messages at the beginning of each screen in console mode.
- Mac OS X media types: Added a "64-bit settings" step that allows you to force the use of a 32-bit JRE. This is necessary on Mac OS X if your application loads 32-bit libraries.
- All screens and form components with a directory chooser: Added an "Allow new folder creation" property. If selected, a button for creating new folders will be displayed in the chooser dialog.
- "Replace text in XML files", "Modify a text file" and "Modify a text file with regular expressions" actions: Added "Log replacement text" property that can be disabled for security reasons
- "File chooser" and "Directory chooser" form components: Support leading ~ for home directory
- Windows service launchers: Added the option non-interactive after /install to register services that should not be allowed to interact with the desktop.
- Custom localization files can now contain references to compiler variables, installer variables and other i18n keys
- Added the capability for extensions to contribute localization files (see the "Extensions" help topic)
- Added an "Arguments" property to installer, uninstaller and custom installer applications that allows fixed arguments to be passed to the installer application
- API: Added com.install4j.api.windows.WinRegistry#getValueNames
- API: Added version of com.install4j.api.windows.WinFileSystem#createStartMenuEntry that allows arguments
- API: Added com.install4j.Util#isAix
- API: Added com.install4j.api.InstallationComponentSetup#setChangeable(boolean) and isChangeable. With these methods the user can be prevented from changing the selection state of an installation component.
Bug fixes:
- Control characters at the beginning of variables that are read from the command line were not removed
- Fixed a problem when uninstalling file associations for well known file types
- A listener registered with com.install4j.api.launcher.StartupNotification was not called reliably for a rapid succession of invocations
- "Key value pair" form component: Missing line break in console mode
- "File chooser" form component: Leading label was not baseline-aligned
- "File chooser" and "Directory chooser" form components: The "Validation script" property was not passed a "file" argument
- "File chooser" form component: If initial directory is empty, the file chooser opened in the temporary directory, this has been changed to the directory where the installer media file is located
- "Show URL" action: On Unix, the browser was sometimes not shown if the action was added to the "Finish" screen
- "Register Add/Remove item" action: The keys InstallLocation, VersionMajor, and VersionMinor for the uninstaller entry were not set
- "Execute launcher" action: The action failed on Mac OS X with Java 6 update 4 when "Restart as root" was selected for a preceding "Require admin user" action
- Fixed starting of elevated launchers on Windows 7
- Added a workaround for an undefined TMP environment variable
- "Single radio button" and "Check box" form components: Selection scripts were not executed in console mode
- "Download file" action: Status label could wrap for long file names and damage the screen layout
- A log file was left in the temporary directory after installation
- Formatted text field components did not work correctly in console mode
- install4j version and build number are now included in the installation log file
- "Installation type" screen: Component selection could be wrong due to component dependencies
- The value in a focused form component with formatted text was sometimes not transferred to the bound installer variable when an input validation expression was present
- Multi-line label form components did not wrap in text in console mode
- Response files could not have a UTF-8 byte order mark
- The input validation expression of invisible or disabled text components was always executed when the form was validated
- Visibility expressions were not executed in unattended mode
- Canceling a console installer could print an exception
- Custom installer applications on Mac OS X could not be executed before the "Install files" action had run
- API: com.install4j.api.windows.WinFileSystem#createStartMenuEntry was not rolled back
New features:
- Added a "Visibility script" to all form components that determines if a form component is shown or not, invoked in both GUI and console modes
- "Install files" action: Added an "Update bundled JRE" property that allows to prevent the update of an already installed bundled JRE
- Mac OS X: If defined, use the environment variable INSTALL4J_ARGUMENTS for the command line arguments
- Installer, uninstaller, and custom installer applications: Added "Windows console executable" property to create executables that open a console and support installations via rsh
- "Directory chooser" and "File chooser" components: Added a "Validation script" property that can reject user selections performed via the chooser button
- Unix installers: If the environment variable INSTALL4J_TEMP is defined, it is used as the base directory for self-extraction
- "Create a file association" action: Added an "Additional parameters" property for additional arguments to be passed to the launcher if invoked via the file association
- API: Added com.install4j.api.beans.ReplacementMode#PROPERTIES_FILE
- API: Added com.install4j.context.Context#getMessage(String, Object[]) to avoid explicit use of java.text.MessageFormat
- Installer applications: Added "Custom watermark text" property
Bug fixes:
- Critical: The 1.6 JRE contained in Mac OS X 10.5 Update 4 does not work with installers created by previous versions of install4j. This affects all projects with a minimum Java version of 1.6.
- File and directory chooser form components: An empty initial value for the file was displayed as the working directory in console mode
- com.install4j.api.screens.Screen#willActivate() was called before the "Pre-Activation" script
- Non-existent parent directories in -Dinstall4j.alternativeLogfile were not created
- "Register Add/Remove item" action: Use current user registry for add/remove entry if system registry is not writable
- "Installation components" screen: Fixed default selection in console mode when screen was shown multiple times
- "Installation components" screen: Wrong tooltip was shown if help button was not shown
- "Installation components" screen: Improved deselection behavior of component folders containing components that depend on each other
- "Installation components" screen: Selection state of component folder containing dependent components was not always correct
- "Save installer variables to the Java preference store" action: Package name containing underscores were not supported on Unix
- Add short name of the project to the log file names in the TEMP directory so they can be identified more easily
- Form components with labels: Custom icons were not displayed in the uninstaller
- Form component screens: Relative external files were not correctly resolved in preview
- Calls to com.install4j.api.context.WizardContext#setNextButtonText(String) and similar methods did not enlarge the button if necessary
- "Replace installer variables in a text file" action: Property "Escape for properties file" had no effect
- Installation directory selector: On Windows, if the drive letter or the UNC share did not exist, the error message shown to the user mentioned a permission problem
- Files that were not overwritten due to an overwrite policy were logged as an error in the installation.log file
New features:
- "Execute launcher" action: added "Arguments" property
- Unix installers: If the environment variable INSTALL4J_KEEP_TEMP=yes is set, the temporary files are not deleted
- Added an $OUTFILE variable for code signing in case the signing command cannot overwrite the original executable
Bug fixes:
- "Display progress" screen: Installer variables in title and subtitle properties were not replaced
- "Show PDF" action and "Display PDF file" screen: PDFs were shown with a red cross
- "Register Add/Remove Item" action: Multiple installations of the same installer into different directories would only produce a single item in the software registry
- "Display text" screen: If "Info text" property was empty, a blank space was left above the text area
- "Install Files" action: Do not check for running processes if "Install runtime" is not selected
- "Execute launcher" action and "Show URL" action: On some Linux distributions the launched process could be killed if the installer was terminated immediately
- Screens could not be added to an empty screen group in the uninstaller
- Files in file sets that were excluded for a media file were accessed at compile time
- Code editor: JDKs installed directly under c:\ on Windows could not be used for code completion
- Fixed class cast exception at runtime that occurred when using action groups under certain circumstances
- Fixed FileNotFoundException at runtime that occurred when the installer exited under certain circumstances
- Unix: Installer did not terminate correctly if gunzip does not exist
- Windows: Temporary installer log files were not deleted when an error occurred
- Windows: If the GUI cannot be displayed due to a broken JRE, a message about an "X-server" was displayed
- Windows 98: Automatic proxy detection lead to a runtime error
- Windows 98: Setting an environment variable could lead to a runtime error
- API: Mac OS X: com.install4j.api.SystemInfo.getPhysicalMemory returned the wrong result for machines with more than 2 GB RAM
New features:
- Create program group action: Added a "Fail if symlinks are not created" property
- "Uninstall previous installation" action: Added properties "Installation directory" and "Only if the same application ID is found" to be able to use the action for different and multiple previous installation directories.
Bug fixes:
- Do not show the "Create program group" screen on Unix if the "Create symlinks on Unix" property in the "Create program group" action is not selected
- A ClassNotFoundException could be thrown in the uninstaller on Linux when no mouse movement was made before the bundled JRE was deleted
- "Run executable or batch file" action: Do not quote arguments without special characters in them (regression in 4.2). This affects batch files only.
- If the -include-options feature introduced in 4.2 was used, launcher scripts did not work on Solaris
- "Modify an environment variable on Windows" action: Fixed various problems on uninstallation
- "Update schedule selector" form component: No question was asked in console mode
- Unix: Always prevent error messages from the preference store subsystem from being logged to the console
- The debug attribute of the install4j ant task as described in the documentation did not work
- Uninstallation of installer files from a sibling directory of the installation directory whose name starts with the name of the installation directory did not work
- Additional localization files with java.util.Properties format (ending in .properties) were locked while the install4j IDE was open
- Using backslashes in file names on Unix could lead to an error while saving the project
- For long-running startup actions, the installer could exit with a timeout
- Compiler variables did not work correctly in the executable name and executable directory properties of the uninstaller
New features:
- Support for including other .vmoptions files with the new -include-options [path to .vmoptions file] VM parameter. This works in the fixed VM parameters as well as the .vmoptions files.
- Added a "Save installer variables to the Java preference store" action that saves selected installer variables that can be encoded as strings
- Added a "Load installer variables from the Java preference store" action
- Launcher API: com.install4j.api.launcher.Variables offers methods to get compiler and installer variables in the launcher and to load and save installer variables from the Java preference store
- Launcher API: com.install4j.api.launcher.Variables offers methods to access the installer and compiler variables of the installer
- Added a "Load response file" action
- Default installer template: Added a "Load response file" action to the "Installation directory" screen to load user input from a previous installation
- Default uninstaller template: added a "Load response file" action to the startup sequence to load user input from the installer
- The proxy settings of the default browser are now used on Windows for all downloads
- "Check for update" and "Download file" actions: Added "Ask for proxy if necessary" property. If deselected and the download fails, no proxy dialog will be displayed.
- Added installer parameters -Dinstall4j.clearProxyCache=true and -Dinstall4j.showProxyConfig=true to control the proxy cache
- Server side authentication for downloads is now supported. A dialog for entering user name and password is displayed if the web server requires authentication.
- Windows GUI launchers: Added an optionally recognized -console parameter that connects stderr, stdout, and stdin to the console from which the launcher was invoked
- Added the option -splash [title] for installer applications that brings up a small progress window if unattended mode is selected with the -q option
- Added a -wait [timeout in seconds] command line option for installers. In unattended mode on Windows, the installer application will wait for all launchers and installer applications to shut down before starting the installation. If the timeout is reached, it will exit with an error message.
- Added a filter field in registry dialogs for screens, actions and form components
- Tool bars now show icons with text. This setting can be changed by right-clicking a tool bar.
- Show missing files in the distribution tree and on the custom code tab in red
- Mac OS X: The principal language is now written to the Info.plist file
- Added a "Missing files at build time" option to "General Settings → Media File Options" that determines the action if a file or directory in the distribution tree is missing. The default setting is now "Print a warning and continue".
- Added a "Scan directory" entry type on the Installer → Custom code tab
- All signed JAR files can now be packed with the Pack200 compression (with a lower compression ratio due to a single segment being used)
- If the "Safe back button" policy is set for a screen, a back button is also displayed if all actions in the previous screen are configured for multiple execution
- Updater templates: Execute downloaded installers in unattended or console mode depending on how the updater was invoked.
- Do not set native look and feel for installer applications if the -Dswing.defaultlaf VM parameter is set
- Added an installer variable sys.preferredJre that is set after the "Install Files" action has run and contains the path to the JRE that will be used by the installed launchers.
- Added a compiler variable sys.applicationId that contains the application ID of the project
- If possible, the language selection dialog of a multi-language installer is now displayed in the system language rather than the principal language. There is a new option on the "Languages" tab to always use the principal language.
- Redirection files of launchers: Absolute paths and environment variables are now supported
- "Single radio button" form component: Added "Selection script" property to execute code when the user clicks the radio button
- Added "Default execution mode" property for all installer applications to be able to configure console or unattended execution as the default mode.
- Added "Fall back to console mode on Unix" property for all installer applications. This is selected by default and switches to console execution mode if no X server is available.
- Added a "Replace installer variables in a text file" action. Compiler variables and i18n keys are also replaced by this action.
- Added a "Fail if no replacement occurred" property to all actions that modify files
- "Copy file" and "Move file" actions now also work with directories and have been renamed accordingly
- "Run executable or batch file" action: Environment variables can now be set or modified
- "Run executable or batch file" action: Added "Show windows console" and "Keep console window" properties for Windows in order to show a console window with the output or the executable and optionally keep the console window open
- "Create program group" action: Added separate options to disable the creation of Unix symlinks and Unix menu entries
- The "Create start menu entry" action now also works on Linux/Unix
- "Modify an environment variable on Windows": The changes are now reverted on uninstallation, this behavior can be controlled with the new "Revert on uninstallation" and "Only if not modified" properties.
- API: com.install4j.api.context.WizardContext now has methods to set the text of the navigation buttons
- API: added com.install4j.api.UpdateUpdateDescriptor.checkVersion(String version) to check if a version is compatible with the minimum and maximum versions of an update descriptor entry
- API: Property customizers can now be built with the new classes com.install4j.api.beaninfo.PropertyConverter and com.install4j.api.beaninfo.PropertyCustomizers
- API: Properties of type java.util.LinkedHashMap get a default editor in the IDE if they are registered with the Install4JPropertyDescriptor.CONTEXT_STRING_TO_STRING_MAP context
Bug fixes:
- Help text in property pane on Screens & Actions tab was black on some Vista installations
- Using a splash screen image in PNG format with an alpha channel lead to a compilation error
- .vmoptions files on Unix: leading spaces on a line were not ignored
- Actions could sometimes not be added to screens in the uninstaller
- Mac OS X: Service were started as the original user if "Restart as root" was selected in the "Require admin user" action
- The directory name for the uninstaller was sometimes not saved to the project file under some circumstances
- The uninstaller used the "Custom image for title bar" property from the installer
- Fixed "Run executable" action on Vista when a path contains special characters
- "Run executable" and "Execute launcher" actions: stderr and stdout were not consumed by default
- Version comparison for com.install4j.api.updateUpdateDescriptor.getPossibleUpdateEntry() has been improved
- "Show URL" and "Show file" actions did not always work on Finish screen on Linux / Unix
- Line endings in .vmoptions files were not adjusted correctly for Windows media files
- "Single radio button" form component: installer variables were not replaced in the "Radio button label" property
- Proxy dialog was not big enough in some look and feels
- Do not warn or fail during a build if a missing file or directory has been excluded for the media file
- "Create program group" action on Unix: Do not create symlinks in the same directory as the destination file, thereby overwriting the destination file
- Downloads failed if the wen server reported an unknown file size
- "Modify an environment variable on Windows" action: If "prepend" or "append" were selected for the "Modification type" property, the variable separator ";" was not inserted if the environment variable already contained a value
- "Create program group" action on Unix: Symlinks were also created for launchers for which menu integration has been disabled
- Fixed performance regression in code editor on Windows if JRE 1.6.0_10+ is used
- Improved error reporting in installation log for actions that modify files
- The -c and -console parameters did not have any effect on Windows for installer applications other than the installer itself
- "Delete a node or key in the Java preference store" action: If the key or node did not exist, the action did not fail
- Added an installer variable "sys.responseFile" that contains the path of the response file if a response file has been specified on the command line with the -varfile option.
- Windows program group was always set to default value even if a response file was specified on the command line
- "Installation directory chooser" form component: In console mode, the installation directory was not changed
- "Installation type screen": The associated label was not selected if the radio button was selected
- Multi-line string properties could sometimes not be reset to an empty value
- Mac OS X. CMD+Q was not handled in the installer
- Pack200 compression could produce archives with a Java 1.6 version number for some archives even if the minimum version of the project was set to 1.5
- If there were multiple media output directories, the update descriptor updates.xml was only copied to the last one
- Java editor: There were empty entries in the completion popup for constructor parameters
- "Radio button group" form component: The initially selected index was not applied from a response file
- Running the command line compiler with a relative path name for the config file did not correctly resolve resources
- Java 5 syntax was underlined as an error in the editor on Mac OS X even if the Java minimum version for the project was set to 1.5 or higher
New features:
- "Installation components" screen: An installation directory chooser can now optionally be displayed on this screen
- Added an "Installation directory chooser" form component in the "Special selectors" category
- Compiler variables are now also supported in the media output directory and in custom code entries
- "Install files" action: Added "Installation size calculator" script for changing the minimum required size for the installation. This value is also reported by the "Installation directory" screen.
- "Install files" action: Added "Install runtime" property. If you deselect this option, the installation directory will not be created and the runtime will not be installed. This is useful for installers that just modify some existing directories.
- "Directory selection" screen: Added "Allow spaces in directory name" property for Unix installers
- "Display license" screen: Added "User must scroll to bottom" property
- It is now possible to user compiler variables that are only defined in an external variable file (passed to the command line compiler with the -f or --var-file parameter) and that are not defined in the project
- The -f or --var-file command line parameter now supports a list of variable files, separated with semicolons, e.g. --var-file=one.properties;two.properties
- "Check box" form component: Added "Selection script" property to execute code when the selection is changed
- Added VM parameter -Dinstall4j.alternativeLogfile=[path] to copy the installation log file to an arbitrary location after the installer has finished without moving the log file to the installation directory
- Added "Create log file for stderr output" property for installer. stderr redirection can now be switched off by deselecting this property.
- The file name and the directory of the uninstaller are now customizable
- Leading labels in all form components are now baseline-aligned with the center component when Java 6 or higher is used
- API: Added support for organizing properties in a tree with com.install4j.api.beaninfo.Install4JPropertyDescriptor#setParentProperty
- API: Properties can be hidden depending on the value of their parent property with com.install4j.api.beaninfo.Install4JPropertyDescriptor#setVisibilityDiscriminator
- API: added focusNextButton() to the com.install4j.api.context.WizardContext
Bug fixes:
- Setting the program group via the API did not work correctly multiple times when the "Create program group" screen was also present
- Windows exe version information: The legal copyright was not set for installer, now it is set to the publisher
- Windows exe version information for uninstaller and custom installer applications was not set
- The uninstaller executable was installed even if the uninstaller was disabled on the screens & actions tab
- Linux/Unix: Fixed startup failure with OpenJDK 1.6.0_10 or higher when compiz is running
- "Install Service" Action: When adding this action, the icons in the screens & actions tree could disappear under some circumstances
- "Modify class path" action: Installer variables were not replaced in the class path entries
- "Recent Projects" menu was always empty on Mac OS X
- Many keyboard shortcuts were not suitable on Mac OS X
- Linux/Unix services: The output from nohup is now redirected to /dev/null
- Newly added screens in the uninstaller were added above the "Startup" sequence
- Workaround for erroneous virus definition in CA Anti-Virus 2009
New features:
- It is now possible to access environment variables at build-time with the syntax ${compiler:env.variableName}
- Improved output of com.install4j.api.Console.more(). This also affects the "Display License agreement" and similar screens in unattended mode.
- Do not append or prepend a value to environment variables on Windows if the appended or prepended value is already contained in the environment variable. This affects API methods in com.install4.api.windows.WinEnvVars as well as actions that modify environment variables.
Bug fixes:
- "Modify a text file with regular expressions" action: "Escape for property file" property did not work for chars > 127
- "Add a desktop link" and "Create quick launch icon" actions: Installer variables were not replaced in "Arguments" and "Tooltip description" properties
- "Replace text in XML file" action: Fixed NPE if system ID in doctype oft the XML document was not set
- Custom uninstaller icon was not used
- Exceptions in "Run script" actions were not annotated with the bean path
- Launching the install4j IDE from an upgrade installer could fail if used with a floating license
- The uninstaller of a 4.0 installation did not work after 4.1 add-ons were installed
- Help texts in property panes were not readable if the Windows classic look and feel was enabled
- Language auto-detection did not work if principal language was any language other than English
- Fixed Pack200 compression of JAR files that contain other JAR files
- Adding additional locales to the resource/messages/languages file required addition of new locale names to all used i18n properties files for multi-language installers to work
- Fixed NPE for single radio button form component in console mode when there was no initial selection
- Group conditions were not re-evaluated when moving back and forth
- Installer log files were not created after canceling the installer if there no actions were executed after a rollback barrier
- Custom installer applications always showed language selection dialog for multi-language installers
- Variables at the start of a download URL were not accepted in the "Bundled JRE" step of the media wizard
- Unix: Links for launchers were also created if they were contained in unselected installation components
- Mac OS X: "Execute Launcher" action: If the installer required admin privileges, the launcher was started as root and not as the original user
- Mac OS X: If the installer required admin privileges, daemons were started as root and not as the original user
- Mac OS X: Buttons on password dialog were not localized
- Mac OS X: Fixed detection of Java 6 when it was not selected as the default JRE
- Mac OS X: Fixed problems with startup items when the installation path contained spaces
Bug fixes:
- The updater templates "Updater with silent version check" an "Updater without version check" were broken
- Fixed regression with launchers in subdirectories for folder installers on OS X
New features:
- API: added com.install4j.api.Util.isWindows2003()
Bug fixes:
- "Display text" screen: The "Screen subtitle" property instead of the "Info text" property was used for the label above the text area
- "Services" screen: Launcher file paths displayed on Linux/Unix could have wrong file separator character
- "Check box" form component: Initial selection and text were set after the initialization script ran. This has been reversed.
- "Apply an XSLT transform" action: Source file did not refer to its installed location
- "Create program group" screen: If a program group was selected in the list and the "Create shortcuts for all users" check box was toggled, the list was not updated with the new content
- "Create program group" screen: Multiple selection was possible in the list of program groups
- "Create program group" action: Installer variables were not replaced in arguments of additional program group entries
- Screens displaying HTML text: Some HTML files could make the installer hang
- Fixed problems when defining installation components with non-default file sets
- Included JRE was not used for language restart
- Code editor: Exception was thrown when opening the code editor, and the custom code contained duplicate entries
- Code editor: Keyboard shortcuts on Mac OS X inserted additional character
- Generated launchers in non-default file sets did not work correctly
- Fixed problem with missing JRE extensions on AIX
- Could not delete additional languages under General settings → Languages
New features:
- Added VM parameter -Dinstall4j.logEncoding=... for installers to set the encoding of the log file to something other than the default encoding
- Added a "--faster" command line and ant task option for disabling LZMA and Pack200 compression
Bug fixes:
- Main class selector in the launcher wizard did not work anymore
- Code editor did not work with the Java look and feel (Metal)
- Code editor: When completion popup was shown more than once, mouse selection was not possible
- Code editor: accepting a code completion proposal with a double click was not possible
- Script compiler used default encoding, so that all characters in scripts that were not representable by the default encoding were replaced with question marks
- "Execute launcher" action: Did not work for external launchers with installer variables in the path name
- "Create program group" action: Links for external launchers with installer variables in the path name were not resolved correctly
- "Delete a file or directory action": If the "recurse into directories" option was selected, and the temporary and target directories were on different volumes, all directories were not deleted
- Fixed exception on Mac OS X for launchers installed with older versions of install4j
- Design time JDKs were not supported on Mac OS X
- When clicking the window close button on a screen with the "Quit after screen" property selected, the installer was not finished just like when clicking the "Finish" button
New features:
- New Java code editor with code completion, Javadoc and problem analysis
- Auto-update functionality
- Custom installer applications
- Action and screen groups
- Redesigned screens & actions tab
- Code gallery with example scripts
- File sets in the distribution tree
- Support for Java 6 splash screens
- Optional comments on all installer elements
- Installation types
- PDF screen and action
- Actions for changing Windows access rights
- New form component "Single radio button". You can configure coupled form components that are enabled or disabled depending on whether the radio button is selected.
- New form component "Multi-line HTML label". This component supports http and file links.
- New form component "Key value pair" form component". This consists of a leading label and a center label.
- New form component "Hyperlink action label". Instead of showing a URL, you can configure an action script that is executed if the user clicks on the link.
- New form component "Progress display". This form component can show the progress of actions attached to the containing form screen.
- New action "Sleep". Do nothing for a specified number of milliseconds.
- All installer elements can now be disabled. Disabled elements will not be included in the build and will not be validated.
- Improved error reporting: At run time, if a script throws an exception, the property name, the name of the bean as well as the names of any enclosing beans are reported.
- XML actions: Added XML parser properties "Validating" and "Download external entities" for XML actions
- Design time JDK: The same JDK/JRE that is configured for the Java code editor is used for script compilation. This only applies to the runtime library rt.jar, the compiler is bundled with install4j.
- "Create program group" action: Redesigned configuration of Windows program group entries
- Installer variables with array values in all string list properties are expanded as separate arguments. See the "List" form component in the jdkSelection sample project for an example.
- "Installation Location" screen and "Directory chooser" form component: Added property for allowing spaces in directory name for Unix/Linux installers.
- "Install files" and "Install contents of ZIP file" actions: Added "Delay if necessary" and "Trigger reboot if required" properties for installing on top if used files in Windows.
- "File associations" screen: Added "Show selection buttons" property for showing buttons that select and unselect all associations.
- "Display text" and "Display information" screens: Added HTML preview tab in editor
- Java 6+: Use Java 6 Console API for reading passwords in console installer
- All installer elements including single actions can now be excluded in the "Customize project → Exclude installer elements" step of the media wizard.
- Font properties in form components: Possibility to use "0" as font size to get default size. Font name "dialog" yields the default label font.
- "File chooser" and "Directory chooser" form components: Added property "Manual entry allowed"
- "Set a variable" action: added "Fail if null" property
- "Display progress" screen: Added "Initial status message" property
- Improved many messages in the launcher and the installer
- "Installation directory display": Display free disk space
- Windows launchers can now request heap sizes (-Xmx values) of the same maximum size as the default java launchers if the built-in splash screen is not used. Previously the maximum size was reduced due to fragmentation of the address space.
- Custom localization files are now reloaded in the IDE when they are changed externally
- Consistent keyboard accelerators in the install4j IDE
- Consistent display of IDs in the install4j IDE: If ID display is enabled for a view, the ID is shown in brackets after the element.
- ID display settings are persistent across restarts of the install4j IDE
- IDs can be printed in the project export by selecting the "Export IDs" check box in the file chooser
- "List", "Drop-down list" and "Combo box" form components: Added "Selection change script" property that is invoked when the user changes the current selection
- Added "Scrollable" property for customizable form screens. After deselecting this property, you can assign remaining vertical space to vertically scalable components such as text areas or lists.
- "Text area" and "List" form components: Added "Fill extra vertical space" property
- Scripting: Added methods to wizard context to make selected navigations buttons invisible
- Scripting: Added formEnvironment script parameter to all script properties of form components
- Scripting: Added context.goBackInHistory(Screen targetScreen) to move back to a specific screen in the history rather than in the screen sequence
- Scripting: A reboot can now be triggered with context.triggerReboot()
- Scripting: Added formEnvironment.resetFormComponents() in order to reset components in loops
- Scripting: Added formEnvironment.saveFormComponents() to validate and save form components, for example, for a button form component which needs current values of variables.
- Scripting: Incompatible change (very low impact): Script parameters are now final, which allows them to be used directly in anonymous classes.
- Scripting: Added "Pre-activation" and "Post-activation scripts" to screens.
- Scripting: Added ApplicationRegistry.getAddOnApplicationInfoByDir() to get information about installed add-on installers
- Scripting: Added method requestFocus() method to FormComponent interface
- API: Incompatible API change (very low impact): Introduced FormPanelContainer to make form panels more configurable. This replaces the Screen#hasFormPanel() and Screen#setFormPanel(...) methods.
- API: Form components can request remaining vertical space by returning true from the new interface method FormComponent#isFillCenterVertical()
- API: Added Install4jPropertyDescriptor#setPropertyChangeListener(...) to listen for property changes in the IDE. Changes on other properties are reflected after the listeners have been called.
- API: com.install4j.api.FileOptions has a new constructor for delaying file installation on Windows if necessary
- API: Added ReplacementMode I18N_ONLY for use in the AbstractBean#replaceVariables(...) methods
- API: Added context Install4JPropertyDescriptor.CONTEXT_HTML for string properties that contain HTML
- API: Added Install4JBeanInfo#setNoticePanel that lets you add a fixed panel at the top of the property editor
- API: Added context FilePropertyDescriptor.CONTEXT_EXTERNAL_OR_INTERNAL for ExternalFile properties. When the file chooser is invoked, a dialog is shown that explains internal and external files.
- API: Added com.install4j.api.launcher.ApplicationLauncher
- API: Added new package com.install4j.api.update for auto-update functionality
- API: Added Util.getAnnotatedStackTrace() and Util.printAnnotatedStackTrace() to add the bean origin of a stack trace
- API: Added Util.showPath() to open a file manager for a certain file
Bug fixes:
- JRE bundles that only included the client VM did not work on server class Unix machines
- After renaming a root in the distribution tree, the edit button was not enabled
- Project was not properly synchronized in some cases when opening a new project
- When editing a property and opening a new project, the save button could be disabled
- Mac OS X: CFBundleGetInfoString in Info.plist did not contain the application version
- XML actions: output files were not closed
- XML actions: Existing DOCTYPE was not written
- XML actions: output was not indented
- Do not execute -Xshare:dump for JRockit JREs
- Fixed NPE in unattended installer
- Fixes file deletion problems on Linux
- Fixed NPE when hitting Ctrl-C while actions are executed in console mode
- "Show URL" action: URLs with anchors could not be opened
- "Directory chooser" form component: Tree scrolled if user selected directories near the bottom of the tree
- Fixed wrong file times for rollback
- Catch more errors for preference store manipulations
- "Check box" form components that were not initially selected were not correctly restored by a response file
- Fixed proxy authentication problems on Linux
- "Quit after screen" property was not honored by console and unattended installers
- Console installers and unattended installers did not check the isHidden() and isHiddenForNext() methods of a screen
- Installer variables were replaced directly when beans were loaded in the runtime, this lead to different behavior in the GUI and console installer
- "Text area" form component: Editor for initial text was not multi-line.
- "Append text to file" action: "Text" property was not multi-line.
- context.goBackInHistory(...) now supports the parameter 0 to loop back to the current screen
- Compiler variables in i18n messages were not replaced
- Customizable screens: Installer variables in "Screen title" and "Screen subtitle" properties were not replaced
- Customizable banner screen: Installer variables in "Info text" property were not replaced
- Mac OS X: Add bundle identifier to prevent file associations to be connected to different install4j applications on newer OS X 10.4 versions
- Linux: Exclude shared extensions from java.ext.dirs VM parameter for installer and uninstaller to prevent XML AbstractMethodError due to incompatible library versions
- The file logger now saves files and directories as relative entries if the path starts with the installation directory. This allows the uninstaller to work for the installation directory even if the user moved the directory.
- For multi-language installers, Util.getParentWindow() always returned the language selection dialog
- Project Java versions lower than 1.3 crashed the build
- Console handler for from screens did no correctly initialize form components. As a consequence, coupled form components were not correctly disabled or enabled in some situations
- Chains of coupled form components are now supported, meaning that if a form component is disabled, all its coupled form components are disabled as well
- String properties were always trimmed
- Linux: Application registry on Linux did not always work with bundled JREs
- Mac OS X: "Scan directory" class path entries were not dynamic
- Console installer did not ask for proxy information if no direct internet connection is available
- Accelerators for next and previous screen (ALT-Right and ALT-Left) did not respect whether the corresponding button was enabled and visible.
- Using variable expressions of the type ${...} in Regexp properties that were not install4j variables produced an NPE at runtime
- Selecting the "Installation directory" node in the definition of an installation component did not work
- Installer variable sys.programFilesDir was only defined on Windows
- Linux: When compiz is enabled, use MToolkit rather than the default XToolkit in order to avoid blank windows.
- Temporary files created by Windows launchers are now deleted immediately after exit rather than on the next launch
- Next and Previous buttons as well as all form components that take user input are now disabled when actions are executed
- "Installation Directory" screen: Suggest user home if the standard installation directory cannot be written
- Project export: scripts were not exported with proper indents and line breaks
- The return code for Unix installers was always 0 even if the installer terminated with an error
- API: JVMLocator.getJVMLocations() could return duplicate entries
- A bundled JRE is now installed before other files in the distribution tree, so you can modify the bundled JRE with files in the distribution tree
- "Install files" action: The AFTER_INSTALL_FILE event did not have the correct success value
- "Installation components" screen: Component folders were always initially selected in console mode
- "Directory selection" screen: console mode looped if "Only accept writable directories" property was selected
Bug fixes:
- IMPORTANT: When closing the preview window of a form screen other than through the close button, all usages of compiler variables in the project were replaced with their default values
- Fixed problems with ampersands in application and launcher names on Mac OS X
- Fixed exception on Mac OS X, when "Finish" was clicked without running the "Install Files" action
- "Run executable" action: Installer variables were sometimes not replaced for redirection files
- "Text field with integer format" form component: variable could not be saved to the response file.
- Fixed problem with rolling back replaced files
- Variable chooser button was missing on the code signing step in the media wizard.
- Fixes some messages in the French translation
- Several UI fixes for Mac OS X 10.5
- Fixed several problems when overriding system actions, screens, and form components provided by install4j
- Fixed problem when jai-imageio was used in custom code
New features:
- "Check box" form component: added option for inverse coupling on the "Coupled form components" tab
- "Run executable" action: redirection of stderr, stdout and stdin files
- "Installation location" screen and "Install files" action: added "Insufficient disk space warning" property
- Option in registry dialogs and custom class selectors for adding new items after the current selection
- In addition to 16x16 icons, use 32x32 frame icons for installer frame when Java 6 is used
- Report origin of script compilation errors in build output
- Print media file size in build output
- API: Added FormEnvironment.getScreen() to get access to the enclosing screen from a form component
- API: Added Context.registerHiddenVariable(String variableName) for variables whose values should not be logged
- API: formEnvironment is now a parameter for the initialization script of form components
Bug fixes:
- [SECURITY] "Password field" form component: variable value was logged to installation log
- "Run executable" action: if executable is a relative path, and the working directory is set, try to find the executable in the combined path
- "Require admin user" action displayed the wrong error message when used in an uninstaller
- "Directory selection" screen: Changing the variable value did not update the displayed directory value in all cases
- "Create program group" screen: Changing the installer variables sys.programGroup.allUsers and sys.programGroup.enabled did not update the screen in all cases
- "Execute launcher" action and "Run executable" action: arguments with spaces were not supported
- "Hyperlink label" form component: Installer variables in "URL" property were not replaced
- "List", "Drop-down list" and "Combo box" form components: installer variables were not replaced in list items
- File installed with an uninstallation policy that excluded updates were not deleted by the uninstaller after updates were installed
- Menu entry for uninstaller was not localized for multi-language installers if the selected language was not the principal language
- Fixed NPE in console installer
- Some special characters in fixed launcher arguments were transformed incorrectly
- With some Java versions, the installer froze when a shortcut to the desktop directory was placed on the desktop itself
- Fixed layout problem with the list form component and very log entries
- Form components could not be edited after project reload under some circumstances
- Context class loader for custom code was set is such a way, that it was not possible to load resources via the custom class loader
- Workaround for problem with some graphics cards that displayed an empty installer window with JRE 1.5 on Windows
- Overriding a system variable that could not be overridden lead to inconsistent behavior
- It is not longer a fatal error if the path of a file entry in the distribution tree does not exist. A message is printed in verbose output if this condition occurs.
- Do not check URL property of hyperlink label component for validity if it contains a variable
- Custom scripts in Unix launchers had wrong line feed if installers were built on Windows
- Icons and descriptions of file associations on Windows were not set correctly if multiple file associations were already present
- Removed erroneous "create program group" question in non-Windows console installers
- Fixed errors in French translation
- No error message for class format error when selecting screens, actions, and form components from custom code
- Insertion sequence for copy-paste in uninstallation mode was incorrect
- There was no default web browser on Unix/Linux. Now, the installer tries to launch firefox as the browser executable before asking for an executable.
- If a custom 32x32 icon was defined for the installer, it was not used in the body of the language selection dialog
- No warning was printed if the custom localization file was not used due to a probably unintended override of the principal language in the media file definition
- Fixed NPE if installation root was set to an undefined installer variable. Now this root is discarded.
- Since 4.0.6, the first argument to a service launcher was the service name. This has been reverted.
New features:
- "Install files" action: added option to validate the application ID for situations where no "Installation location" screen is present.
- "Start a Service" action: added option to start the service only if it was installed as an auto-start service
- "Installation location" screen: added option to suppress the insufficient disk space warning
- Added a "Button" form component in the new "Action components" category.
- "Project → Open Sample Project" gives quick access to bundled sample projects
- Also use 32x32 frame icon for installers if Java 6 is used (visible in lists of open Windows like ALT-Tab on Windows)
- API: added com.install4j.api.Windows.WinFileSystem.moveWithDelayUntilReboot() to install files after a reboot on Windows
- API added com.install4j.api.events.InstallerEvent and VARIABLE_CHANGED EventType to listen for changes of installer variable values
Bug fixes:
- "Create start menu entry action": multiple instances were not supported
- "Create a quick launch icon" action: Do not throw an exception if the target file does not exist
- "Create a file association" action: file associations are now selected by default
- "Modify a text file" action: file rights were not preserved
- "Installation location" screen: selection is now updated when user code calls context.setInstallationDirectory()
- Fixed issues with uninstallation policies "If created, but not for update" and "Always but not for update"
- Service status command on Unix did not work with the installed script if the service was started with a differently named symbolic link
- Editing the project while a build was running could lead to a build failure
- Invalid characters like slashes in installer and uninstaller files names are now replaced with spaces automatically
- Fixed problem with very large number of installer configuration files in DMG archives
- Changes in environment variables were not broadcast correctly
- If Pack200 compression was selected, the unpacker was still run on JAR files that were excluded from Pack200 compression. This could break JAR signatures.
- Removal of screens, actions, and form components had to be confirmed twice
- Text form components were collapsed to minimum size when width of initial text was longer than available horizontal space
- Caret position in text form components was not set to 0 after the text was initialized
- Always suggest previous program group for add-on installers
- Locales with country code were not properly auto-detected for multi-language installers
- Added 24x24 image to install4j default icons to fix long wait times for Norton AV on remote drives
- Using different JAR source files for the same target file for different media file definitions did not work when Pack200 compression was enabled
- Desktop links did not support Unicode characters
- File associations were not installed properly on some Windows installations
- Edits in multi-line string dialog and script edit dialog were lost when auto-save was running at the same time
- Added -Dinstall4j.logToStderr=true to debug installer/uninstaller scripts
- FormComponent classes without associated BeanInfo class did not work
- Screens classes without associated BeanInfo class exposed context parameters
- Form component dialogs: label icon with relative path was not displayed in preview dialog
- Media files are now written to the temp directory if the media file output directory is not writable
New features:
- New locale: Brazilian Portuguese
- Added a "Hyperlink label" form component
- Added option to exclude all signed JAR files from Pack200 compression (General Settings → Media File Options)
- Placing an empty *.jar.nopack file next to any JAR file will exclude it from Pack200 compression
- Support environment variables in the names of redirection files
- Added option to suppress the initial progress dialog of the installer (Installer → Installer Options>Advanced)
- Window media wizard: added option to fail if the signing command returns an error code
- Installer: show the last selected directory in any directory selector if the associated text field is empty
- -Dinstall4j.logToStderr=true makes installers and uninstallers print the log to stderr as well
- "Run executable" action: added option to log arguments
- Modify text file actions: added option for escaping the replaced value for usage in a Java property file
- "Add an executable to the startup folder on Windows" action: added "Create for all users" property
- "Install files" action: added option to disable file name display during the installation
- "Add a desktop link" action: added "Arguments", "Icon file" and "Tool tip description" properties
- API: Added com.install4j.api.beans.PropertyLoggingInterceptor to allow beans to customize the logged values for their properties
- Improved custom code sample project, shows enumerated properties and sample form component
Bug fixes:
- Formatted text field form components: if no input validation expression was defined, these components did not work
- If compiler variables with path names were used in installation roots, the path separators were not adjusted for the target platform
- "Install content of a ZIP file" action: ZIP files were not closed, which could prevent the origin ZIP file from being deleted
- "Installation location" screen: do not append suggested application directory if the selected directory contains the same application
- Script compiling was very slow, especially if a project contained many scripts
- When compiler variables were used in a script, backslashes were not quoted
- The component directory in the media output directory was not emptied at the beginning of a build
- Window media wizard: fixed problems with spaces in $EXECUTABLE variable used in code signing command
- Installer: closing the installer wizard on a finish screen offered an option to rollback
- Size of the splash screen was not updated before compilation
- Fixed display problems with Windows Vista in both IDE and installer
- If the running process check was canceled, the "Uninstall success" screen was shown instead of the "Uninstall failure" screen
- When an action threw a runtime exception, there was no rollback and the uninstallation did not work
- Installer variables were not supported in parameters for localization keys (e.g. ${i18n:myErrorMessage(${installer:errorCode})})
- Fixed NPE when "Install service" action acted on an excluded service launcher
- Client VM was not mandated if the JRE bundle was a bundle that contained only the client VM (*_client_only.tar.gz)
- Fixed problem with multiple concurrent splash screens on Unix
- "Configurable banner form" screen: custom banner image property was missing
- "Create start menu entry" action: do not prepend start menu root directory if the target file is absolute (for example when using ${installer:sys.programGroupDir} in the target file)
- Mac OS X: do not write installer language into Info.plist
- Mac OS X: fixed problem with volume detection
- Mac OS X: fixed problem with application registry and single bundle installers
New features:
- Actions that use regular expressions: option for quoting values of variables in match and replacement expressions
- "Add a desktop link" action: added "Create for all users" property
- "Create a quick launch icon" action: added "Icon file" and "Arguments" properties
- "Create Program group" action: added "Application categories" property for UNIX desktops
- "Run executable" action is now called "Run executable or batch file" action and can also execute Windows batch files directly
- Added installer system variable (sys.logFile) for temporary log file
- Keep the temporary log file if installer quits because of action failure
- Allow delayed setting of install4j.keepLog system property in the installer
Bug fixes:
- SECURITY: the password field form component saved clear text to the response file, now this is optional, disabled by default and encrypted
- "Create program group" screen: program group list was not re-populated when the "all users" property was changed
- "Installation location" screen: selection in directory selector was not synchronized with text field each time it was opened
- "Installation location" screen: required disk space was not synchronized with selected installation components
- "Install content of a zip file" action: progress bar information was not correct
- "Run executable or batch file" action: stdout and stderr streams were not consumed, executables with lots of output would hang
- "Run executable or batch file" action: installer variables in "Executable", "Working directory" and "Arguments" properties were not replaced
- "Run executable or batch file" action: if the working directory does not exist, its parents are tried
- "Show file" action: installer variables in "File" property were not replaced
- "Show URL" action: installer variables in "URL" property were not replaced
- "Display text", "Display license agreement" and "Display information" screens: installer variables in text were not replaced
- "Radio button group" form component: installer variables in "Labels" property were not replaced
- If the condition expression of the "Finish" screen returned false, the installer did not quit
- Failure to write a file did not create a corresponding installer log entry
- Stdout and stderr streams were not consumed when starting installer from build console, installers with lots of output would hang
- Executing a service launcher with the /start argument on Windows did not return with an error code if it failed to start the service
- Workaround for some Windows 98 installations where the Windows LAF crashes the 1.4.2 JVM
- -q and -c installer arguments for quiet and console modes do not have to be the first arguments anymore
- arguments with quotes in the argument like arg="1 2" were not supported by Windows launchers
- launchers in archives with spaces in the top-level directory name did not unpack a bundled 1.5+ JRE when started for the first time
- Custom icon was not displayed for Unix desktop links
- Mac OS X: the installer variables sys.mediaFile and sys.mediaDirectory now return the location of the DMG archive rather than its mount point
- External files could be overwritten by add-on installers
- Icons in update installations were not refreshed on Windows
- Custom localization keys were not replaced in the preview for form screens
- Customizable "Program group selection" screen did not work in unattended mode
- Files for the installer icon were not made relative to the project file
- Configured custom code could not be used in the Java editor of script properties before building
- Windows AMD64 JRE bundles were not offered for Windows media files in the "Bundled JRE" step of the media wizard
- Previous contents of variables of text field components were only used if they were of type "String". Now toString() is invoked on the variable value.
- Mac OS X: .command file was not included automatically when launcher was included in a component
New features:
- Support JRE bundle paths relative to the project file for the "Manual entry" option in the media wizard
Bug fixes:
- Loading of extensions was broken
- Fixed stack overflow error when building or saving a project with a specific use of custom code
- If Pack200 was enabled for the project, it was also used for archive media files
New features:
- Create response files to allow running installers with pre-defined user input
- Ability to specify a zip file containing language-specific texts for info and license screens
- Added an "Only if Undefined" property for the "Set Variable" action
- Allow escape sequences for the "append text" action
Bug fixes:
- Fixed issues with multi-language installers
- Call screen validation expressions and input validators for unattended installers
- Call input validators for text and combo box form components on next
- Fixed a SecurityManager issue with shutting down services
- Fixed a library dependency problem with Java 6 on older Windows versions
- Fixed customizable banner screens
- Service actions added to the service screen itself were executed with default values
- Fixed issues with recompiled custom code files
- Compiler variables in action failure error messages were not replaced
- Fixed an issue with the removal of uninstaller entries in the Windows software control panel
- Program group entries for console launcher were not created
- Fixed small layout issues for form screens
New features:
- Added "Remove on uninstall" option to the "Create a symbolic link" action
Bug fixes:
- If a component folder was not set to "initially expanded", its selection state was not checked correctly on startup
- Copying and pasting beans did not work correctly, newly pasted instances could not be renamed, and no new ID was assigned to them
- Non-numeric components in the 4th level of the application version caused an exception in the uninstaller
- Installer log file was lost if the temp directory was on a different partition than the installer directory
- "Modify a text file" action did not work if the temp directory was on a different partition than the installer directory
- Console uninstaller on Unix did not work correctly if a JRE was bundled and not all files were deleted
- Paths of custom localization files were not made relative if the corresponding project setting was enabled
New features:
- Free configuration of installer and uninstaller screens, see the feature list for a list of available screens
- Free configuration of actions for each screen, see the feature list for a list of available actions
- Configurable "Form screens" for designing your own installer and uninstaller screens without custom code
- Configurable error handling and rollback behavior for actions and screens
- Possibility to enter custom code snippets in special properties of screens, actions and form components
- Console installers and uninstallers
- Multi-language installers
- Multiple installation roots and "magic" folders
- Installation component tree with optional component descriptions and dependencies
- Net installers that download selected components at runtime
- CD installers with externalized data files
- Support for Microsoft Vista, including configurable execution level and code signing integration
- Support for 64-bit Windows launchers that work with 64-bit JREs
- Extensibility: API based on the JavaBeans specification for adding standard screens, actions, and form components to install4j
- Optional Pack200 compression for all JAR files
- Redesigned variable system with compiler, installer and launcher variables
- More flexible uninstallation policies for files, including upgrade-sensitive policies
- Option for replacing dots with underscores in media file names
- Show warning if hard drive space is insufficient for the installation
- File associations on Mac OS X can now be activated immediately
- Multiple launches through a file association on Mac OS X are now reported by the startup notification mechanism
- Support for media files larger than 2 GB
- Many new options for configuring the initial state of installer and uninstaller screens
- Custom icon and name for the application in the Windows Software Control Panel
- System properties "install4j.appDir" and "install4j.exeDir" are passed to all generated launchers
- Add-on installers on Mac OS X and Unix now automatically find the appropriate base application
- /status switch for service launchers
- Classpath modifications at runtime with -classpath:, -classpath/a: and -classpath/p: in *.vmoptions file
- Configurable VM parameters for the installer
- Start menu entries with command line parameters via the "Create program group entry" action
- Copy service start scripts to /etc/init.d on Unix, if that directory exists
- Option to make the installer and uninstaller windows resizable or fixed size
- New installation log file that audits all performed actions
- Custom icon for installer executables on Windows and Mac OS X
- Option to use selected installed JAR files for custom code that is used after the "Install files" action
- Components can be excluded on a per-media file basis
- Installer and uninstaller screens can be excluded on a per-media file basis
- Desktop icons and start menu integration on Linux/Unix for freedesktop.org-compatible desktop environments (KDE and Gnome)
- Installation and uninstallation scripts for RPM media files
- Offer "Retry" option to the user if the installation of a file did not succeed
- Previous installations on Unix and Mac OS X are now found by the installer
- Service launchers do not require anymore that the main method returns after the initialization
- SWT support
- API: Redesign of the API to reflect the new runtime architecture
- API: Many enhancements in the installer and uninstaller context (com.install4j.api.context.*)
- API: Launchers are now accessible in the API (com.install4j.api.context.LauncherSetup)
- API: Enhanced installer event listener mechanism (com.install4j.api.event.*)
- API: New API for accessing Unix-specific file system services (com.install4j.api.unix.UnixFileSystem)
- API: Enhancements for locating installed JVMs (com.install4j.api.windows.JVMSelector)
- API: Information about the state of previously installed services available from the API (com.install4j.api.ServiceInfo)
- API: New Application registry for getting information about existing installations (com.install4j.api.ApplicationRegistry)
- API: Physical memory and free file system space information available from the API (com.install4j.api.SystemInfo)
- API: Methods for exporting and importing parts of the Windows registry (com.install4j.api.windows.WinRegistry)
- API: System compiler variables are now also available at runtime
Bug fixes:
- /manual switch had no effect for installers with a statically bundled JRE
- File associations are only performed if the corresponding launcher is actually installed
- Absolute class path entries for Windows media files did not work when installer were built on Mac OS X
- Directory chooser for single bundle media files on Mac OS X always appended "Applications" to the selected directory
- Improved security for Unix launchers
- Clicking on "Cancel" in the installer did not pause file installation immediately
- Improved error messages if no X11 server is available for a GUI installer or uninstaller
- Installation directory setting the media file wizard was not used as the bundle name for Mac OS X single bundles
- Compiling RPM media files did not work with IBM JREs
- Unix service launchers were passed a "start" parameter
Bug fixes:
- Do not create symbolic links on Unix if the link directory is the same as the installation directory
- Timeout when checking for running processes
- The system variable LANGUAGE_ID could not be overridden from the command line
- All bug fixes from exe4j 3.1.4 for Windows launchers
New features:
- .vmoptions files are adapted for cross-platform use during compilation
Bug fixes:
- Stopping of multiple services on Unix did not work correctly
- Absolute classpath entries on Mac OS X were not supported
- JRE download via FTP did not work on some Unix systems
- "Scan directory" classpath entry did not work with Mac OS X single bundle archives
- Directory hierarchies without intermediate files were not uninstalled correctly in some cases
- If non-US-ASCII characters were used for the installer name on Mac OS X, the installer would fail
- The custom script file for Unix media files was not resolved relative to the install4j project file
- The optional launcher checkbox on the "Finished" screen did not work correctly in some cases if installation components were used
- Better error message on Unix if the X libraries are missing or broken
- Spaces in RPM names were not supported on Linux
- Standard JVM search location for HP-UX was missing
- Prevent overriding system variables from the command line
- Custom startup handler could not set installation directory for quiet installations
- Windows launchers: all bug fixes and enhancements from exe4j 3.1.3
New features:
- Unix installers now work on Mac OS X as well
- Universal binaries with Intel x86 stub for Mac OS X installers
Bug fixes:
- Service installation on Windows left a temporary file
- Using the Russian locale for the installer lead to an error in the installer
- Directories with spaces could not be opened by clicking the hyperlink in the build log
- Fixed problem with external launchers and Unix file modes that lead to NPE at build-time
- Better strategy to avoid using GCJ on Unix
- Fixed font problems with JRE 1.5 for Chinese (Traditional)
- "variablefile" attribute did not work correctly for install4j ant task when absolute paths were used
New features:
- External launchers are made executable on Unix
- Download locations for bundled JREs can now contain user variables
Bug fixes:
- Launchers now avoid using GCJ/GIJ on Fedora Core 4
- VM options files (*.vmoptions) could not contain comments on Unix and were not completely fault-tolerant to trailing spaces on Windows
- Shared JRE installation was not fully rolled back when the installation was canceled
- Better file association names in Firefox
- LZMA media files don't work on some older windows 9x machines
- Windows launchers: all bug fixes from exe4j 3.1.1
- API: NPE if no JDK is available when calling JVMSelector.getJVMLocations()
- API: NPE when using WinEnvVars.prependToUserPath() on a non-existing user path
New features:
- floating licenses: added the possibility to reconnect to the license server if the connection is lost
Bug fixes:
- ant task did not work with Java 1.3 and below, it is now contained in a separate jar file (bin/ant.jar)
- fixed problem with LZMA compression in Mac OS X installers
- creating Mac folder installers without having a launcher defined did not work
New features:
- optional LZMA compression for installers
- option to preserve file times and dates for installed files
- Mac OS X installers are generated as DMG files, Mac OS X archives as .tgz files
- new locale for Simplified Chinese
- all new features from exe4j 3.1 for Windows launchers
- for launchers on Windows and Unix a *.vmoptions file in the same directory is read, and each line is added as a separate VM parameter
- API: added setter methods for ServiceSetup
Bug fixes:
- Mac OS X folder media sets did not work if no launcher was defined
- runtime error when disabling the installation location screen
- for add-on installers on Windows, the uninstaller entry in the "Software" control panel got the add-on name
- permission problems with startup items in Mac OS X 10.4 (enterprise edition only)
- user variable substitution in Installer → GUI options → Header image was broken (enterprise edition only)
- custom header icon was only used for the installer and not for the uninstaller (enterprise edition only)
- launchers with user variables in their file names could not be selected in installation components
- redirection problem on Linux (NPE)
- deletion of used files by uninstaller is now more robust
- destination and variableFile attributes in ant target did not resolve file names relative to the project base directory
- some messages were not localized
- API: WinEnvVars.setUserSpecific did not work correctly
- API: WinEnvVars.set now throws an IOException if there are insufficient rights
New features:
- services (startup items) on Mac OS X are now started immediately after the installation
- service names on Windows can be changed on the command line by passing the name after the /install parameter
- media file wizard: support absolute file names for manual entry of JRE bundles
- API: added getApplicationId() and getAddOnInstallerId() methods to com.install4j.api.Context
- API: added methods to modify selection state of installation components and custom tasks
Bug fixes:
- previous installation location was not cleared after uninstallation
- links for external launchers on Unix were not created
- changed location of initial temporary directory on Unix to support CD-based installers
- the "which" command in Unix scripts is not used anymore in order to increase compatibility
- %INSTALL4J_EXEDIR% ended with a path separator on Windows, but not on Unix
- the configured VM parameters for a Unix service were also used in the stop script
- in some rare situations the Windows service manager was not notified when a service was stopped
- classpath entries were sometimes cut off if they contained environment variables
- API: StartupHandler.getDefaultInstallationDirectory() did not work correctly
New features:
- new installer language: Chinese (Traditional)
- logging for JRE-related startup failures of installers and launchers
- command line switch for install4jc to enter a license key without the GUI
- added several warnings about possible inconsistencies
- API: added new path modification methods in com.install4j.api.windows.WinEnvVar
- generated installers now fully support multi-byte character operating systems
- optional Mac OS X document icons for file associations
- possibility to use user variables in text field for the add-on application ID
- print instructions for dynamic bundling during build
- JRE bundle wizard now packs jar files with JSR-200 method for 1.5 JREs
Bug fixes:
- links to unselected components were created during installation
- fixes for the Korean and Japanese locales
- icon for console launchers were not displayed when started from the Windows start menu
- scan directory classpath entry could include too many files
- fixed problem with dynamic JRE download via FTP on Solaris
- relative symlinks to launchers did not work
- fixed "Too many open files" problem on Linux
- internationalization improvements for Mac OS X bundles
- excluding a directory excluded other files that started with the same name
- executable name in launcher wizard and component view were not always synchronized
- installer launched application in temp directory instead of installation directory
- more robust loading of statically bundled JRE
- workaround for JRE bug with the classic theme of the Windows XP look and feel
- various bug fixes in the GUI
- API: com.install4j.api.windows.WinAssociations.getExecutable() was broken
- API: com.install4j.api.Util.showUrl() was not static
New features:
- full support for Unicode on Windows
- allow user variables for application ID
- replaced InitHandler with a more powerful StartupHandler
Bug fixes:
- fixed issue with dynamic 1.5 VM bundles on Linux
- fixed installer script for Gentoo Linux
- improved version display for installers and entries in the software control panel on Windows
- improved visual appearance of installers with GTK L&F
- fixed startup notification issues when opening multiple files concurrently
New features:
- added createShellLink method in com.install4j.api.windows.WinFileSystem that supports arguments
- added fatalError method in com.install4j.api.Util
Bug fixes:
- fixed problem with very long display times for installers when Norton Auto-Protect is enabled
- fixed visual feedback during rollback
- fixed problem with startup notification when multiple files where opened at the same time
- improved error handling for Unix installers if the file is corrupted
- could not enter user variables for both minimum and maximum Java versions
- improved handling of HTML in license screen of generated installers
New features:
- separation of media file types into "installers" and "archives"
- new archive types: Windows archive, Mac OS X single bundle archive, Mac OS X folder archive
- all new features from exe4j 3.0 for Windows launchers
- much improved update awareness
- possibility to create "add-on" installers to distribute patches and plugins
- smaller JRE 1.5 bundles by supporting JSR 200
- possibility to use user variables in the definition of the distribution tree
- API enhancements and sample code for all custom extension types
- option to suggest previous installation directory on update
- option to run the uninstaller before updating an existing installation
- optional creation of desktop icons on Mac OS X
- possibility to determine if a file association is intended for Windows and/or Mac OS X
- Unix launchers: creation of redirection files on demand
- Windows installer: option to prompt user for reboot after uninstall
- Windows installer and uninstaller: check that application is not running
- new application preferences dialog: selectable look and feel, custom browser start command, open last project on startup
- manual entry for JRE bundle selection in the media file wizard
- API: custom actions can now force a reboot
- API: installer context provides access to program group information
- API: new class com.install4j.api.JVMSelector
- API: enhancements in com.install4j.api.windows.WinRegistry
- API: enhancements in com.install4j.api.windows.WinFileSystem
- API: enhancements in com.install4j.api.windows.WinEnvVars
- API: user variables are now available in custom extensions through the installer context
- API: all custom extensions now have an installer context
Bug fixes:
- fixed several minor GUI problems under JRE 1.5
- quotes did not work for VM options on Mac OS X
- single class custom code entries contained in packages did not work
- returning false in InitHandler custom extension could produce unexpected behavior
- version wasn't added to the application title in the Windows system control panel
- admin privileges were not always correctly required in the media file wizard
- language should be a top-level entry in the media file wizards
- X-server exception on Unix is now converted to a more user friendly error message
- %INSTALL4J_EXEDIR% system variable could not be used in arguments for a launcher
- removed fallback error mechanism for statically bundled JREs
- update for statically bundled JREs was not safe
- patch level JRE version requirements were not supported on Unix
Bug fixes:
- possible build failure when using jar files for custom code
- Unix GUI installers: when "shared JRE" option was selected, admin privileges were always required, even if no JRE was bundled
- definition of the distribution tree: excluding a file or directory excluded other files or directories starting with the same name
- Unix launchers returned zero exit value if exception was thrown in main thread
- temporary directory for JRE was not deleted when compiling Unix installation archives
- trees with check boxes behaved strangely with JRE 1.5
New features:
- the InstallerContext now has a getInstallationComponents() method
- the new overwrite mode "always ask, including update" in the distribution tree wizards also asks before overwriting previously installed files
- getDefaultInstallationDirectory() was added to the InitHandler class in the install4j API.
Bug fixes:
- it was not possible to enter user variables for the Java minimum and maximum versions
- it was not possible to enter underscores for the JRE version in the JRE bundle creation wizard
- Unix launchers did not correctly pass command line parameters with spaces
- for Unix launchers, it was only possible to pass a single VM parameter with INSTALL4J_ADD_VM_PARAMS
- com.install4j.api.windows.WinRegistry.deleteValue() did not work in some situations
- JRE bundle wizard could create faulty bundles that lead to a crash in installer
- "." as the directory for a generated launcher did not work on Mac OS X and on Unix
- incorrect locale identifier "cs" instead of "cz" if Czech was selected as the installer language
- in the Unix installer, "/opt" was suggested even if that directory was empty. "/usr/local" is now suggested in that case instead.
- internal install4j image files were omitted on non-windows platforms when components were used. Splash screens were not shown in that case.
- generated launchers were not updated in the distribution tree when you changed their directory in the launcher wizard.
New features:
- option whether to use beta JREs on Windows or not
- on the JRE versions tab, you can now specify patch levels like 1.4.1_01
- emit warning during build if installation components are defined and there are files that are not included in any component
- launchers are now visible in the result tree of the files step and can be selected in the installation component definition
Bug fixes:
- backslashes did not work in variable values
- standalone Javadoc documentation was missing