JAL-3631 Group USERSPACE and SYSTEMSPACE tasks (and other groups of tasks) together...
authorBen Soares <b.soares@dundee.ac.uk>
Fri, 28 Jun 2024 15:53:52 +0000 (16:53 +0100)
committerBen Soares <b.soares@dundee.ac.uk>
Fri, 28 Jun 2024 15:53:52 +0000 (16:53 +0100)
utils/install4j/install4j10_template.install4j

index 8d9e5b5..d1ca52e 100644 (file)
   </launchers>
   <installerGui autoUpdateDescriptorUrl="https://www.jalview.org/install4j/updates.xml">
     <applications>
-      <application id="installer" beanClass="com.install4j.runtime.beans.applications.InstallerApplication" styleId="35" customIcnsFile="${compiler:JALVIEW_DIR}/${compiler:INSTALLER_MAC_ICON}" customIcoFile="${compiler:JALVIEW_DIR}/${compiler:INSTALLER_WINDOWS_ICON}">
+      <application id="installer" beanClass="com.install4j.runtime.beans.applications.InstallerApplication" actionElevationType="elevated" styleId="35" customIcnsFile="${compiler:JALVIEW_DIR}/${compiler:INSTALLER_MAC_ICON}" customIcoFile="${compiler:JALVIEW_DIR}/${compiler:INSTALLER_WINDOWS_ICON}">
         <serializedBean>
           <property name="frameHeight" type="int" value="600" />
           <property name="frameWidth" type="int" value="800" />
@@ -534,41 +534,117 @@ return console.askOkCancel(message, true);
               </formComponent>
             </formComponents>
           </screen>
-          <screen id="12" beanClass="com.install4j.runtime.beans.screens.ComponentsScreen" enabled="false" rollbackBarrierExitCode="0">
+          <screen id="1692" beanClass="com.install4j.runtime.beans.screens.FileAssociationsScreen" rollbackBarrierExitCode="0">
             <formComponents>
-              <formComponent id="13" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent">
+              <formComponent id="1693" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent">
                 <serializedBean>
-                  <property name="labelText" type="string">${i18n:SelectComponentsLabel2}</property>
+                  <property name="labelText" type="string">${i18n:SelectAssociationsLabel}</property>
                 </serializedBean>
-                <visibilityScript>!context.isConsole()</visibilityScript>
               </formComponent>
-              <formComponent id="14" beanClass="com.install4j.runtime.beans.formcomponents.ComponentSelectorComponent" useExternalParametrization="true" externalParametrizationName="Installation Components" externalParametrizationMode="include">
+              <formComponent id="1694" beanClass="com.install4j.runtime.beans.formcomponents.FileAssociationsComponent" useExternalParametrization="true" externalParametrizationName="File Associations" externalParametrizationMode="include">
                 <serializedBean>
                   <property name="fillVertical" type="boolean" value="true" />
+                  <property name="selectionButtonPosition" type="enum" class="com.install4j.runtime.beans.formcomponents.VerticalDockingPosition" value="TOP" />
+                  <property name="showSelectionButtons" type="boolean" value="true" />
                 </serializedBean>
                 <externalParametrizationPropertyNames>
-                  <propertyName>selectionChangedScript</propertyName>
+                  <propertyName>showSelectionButtons</propertyName>
+                  <propertyName>selectionButtonPosition</propertyName>
                 </externalParametrizationPropertyNames>
               </formComponent>
             </formComponents>
           </screen>
-          <screen id="1692" beanClass="com.install4j.runtime.beans.screens.FileAssociationsScreen" rollbackBarrierExitCode="0">
+          <screen name="USERSPACE: Additional checkboxes" id="2893" beanClass="com.install4j.runtime.beans.screens.FormScreen" rollbackBarrierExitCode="0">
+            <serializedBean>
+              <property name="subTitle" type="string">User account</property>
+              <property name="title" type="string">${i18n:WizardSelectTasks}</property>
+            </serializedBean>
+            <condition>!Util.hasFullAdminRights()</condition>
             <formComponents>
-              <formComponent id="1693" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent">
+              <formComponent id="2894" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent" insetBottom="10">
                 <serializedBean>
-                  <property name="labelText" type="string">${i18n:SelectAssociationsLabel}</property>
+                  <property name="labelText" type="string">${i18n:SelectTasksLabel2(${compiler:JALVIEW_APPLICATION_NAME})}</property>
                 </serializedBean>
               </formComponent>
-              <formComponent id="1694" beanClass="com.install4j.runtime.beans.formcomponents.FileAssociationsComponent" useExternalParametrization="true" externalParametrizationName="File Associations" externalParametrizationMode="include">
+              <formComponent name="USERSPACE: Add a desktop link (not macOS)" id="2895" beanClass="com.install4j.runtime.beans.formcomponents.CheckboxComponent" resetInitOnPrevious="true">
                 <serializedBean>
-                  <property name="fillVertical" type="boolean" value="true" />
-                  <property name="selectionButtonPosition" type="enum" class="com.install4j.runtime.beans.formcomponents.VerticalDockingPosition" value="TOP" />
-                  <property name="showSelectionButtons" type="boolean" value="true" />
+                  <property name="checkboxText" type="string">${i18n:CreateDesktopIcon}</property>
+                  <property name="variableName" type="string">createDesktopLinkAction</property>
                 </serializedBean>
-                <externalParametrizationPropertyNames>
-                  <propertyName>showSelectionButtons</propertyName>
-                  <propertyName>selectionButtonPosition</propertyName>
-                </externalParametrizationPropertyNames>
+                <visibilityScript>!Util.isMacOS()</visibilityScript>
+              </formComponent>
+              <formComponent name="USERSPACE: Add an executable to the dock (macOS)" id="2896" beanClass="com.install4j.runtime.beans.formcomponents.CheckboxComponent">
+                <serializedBean>
+                  <property name="checkboxText" type="string">${i18n:AddToDock}</property>
+                  <property name="variableName" type="string">addToDockAction</property>
+                </serializedBean>
+                <visibilityScript>Util.isMacOS()</visibilityScript>
+              </formComponent>
+              <formComponent name="USERSPACE: Add jalview bin to the user's Path environment variable (Windows)" id="2897" beanClass="com.install4j.runtime.beans.formcomponents.CheckboxComponent">
+                <serializedBean>
+                  <property name="checkboxText" type="string">Add ${compiler:JALVIEW_APPLICATION_NAME}'s bin folder to your Path environment variable</property>
+                  <property name="initiallySelected" type="boolean" value="true" />
+                  <property name="variableName" type="string">appendToPathAction</property>
+                </serializedBean>
+                <visibilityScript>Util.isWindows()</visibilityScript>
+              </formComponent>
+              <formComponent name="BOTHSPACE: Make a symbolic link to jalview.sh bash script in the user's/system local bin (Linux or Unix)" id="2898" beanClass="com.install4j.runtime.beans.formcomponents.CheckboxComponent">
+                <serializedBean>
+                  <property name="checkboxText" type="string">Make a ${compiler:WRAPPER_LINK} symbolic link in ${installer:unixBinDir}</property>
+                  <property name="initiallySelected" type="boolean" value="true" />
+                  <property name="variableName" type="string">makeSymbolicLinkAction</property>
+                </serializedBean>
+                <visibilityScript>context.getBooleanVariable("makeSymbolicLink")
+&amp;&amp; context.getVariable("unixBinDir") != null
+&amp;&amp; (
+     Util.isLinux()
+     || Util.isUnixInstaller()
+     || (
+          ( Util.isMacOS() &amp;&amp; !Util.hasFullAdminRights() ) // Admin on macOS will add path to /etc/paths.d
+          &amp;&amp; context.getVariable("macWrapperLinkLocation") != null
+        )
+    )
+</visibilityScript>
+              </formComponent>
+            </formComponents>
+          </screen>
+          <screen name="SYSTEMSPACE: Additional checkboxes" id="2903" beanClass="com.install4j.runtime.beans.screens.FormScreen" rollbackBarrierExitCode="0">
+            <serializedBean>
+              <property name="subTitle" type="string">System</property>
+              <property name="title" type="string">${i18n:WizardSelectTasks}</property>
+            </serializedBean>
+            <condition>Util.hasFullAdminRights()</condition>
+            <formComponents>
+              <formComponent id="2904" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent" insetBottom="10">
+                <serializedBean>
+                  <property name="labelText" type="string">${i18n:SelectTasksLabel2(${compiler:JALVIEW_APPLICATION_NAME})}</property>
+                </serializedBean>
+              </formComponent>
+              <formComponent name="SYSTEMSPACE: Add jalview bin to all users' Path environment variable (Windows)" id="2909" beanClass="com.install4j.runtime.beans.formcomponents.CheckboxComponent">
+                <serializedBean>
+                  <property name="checkboxText" type="string">Add ${compiler:JALVIEW_APPLICATION_NAME}'s bin folder to the system Path environment variable</property>
+                  <property name="initiallySelected" type="boolean" value="true" />
+                  <property name="variableName" type="string">appendToPathAction</property>
+                </serializedBean>
+                <visibilityScript>Util.isWindows()</visibilityScript>
+              </formComponent>
+              <formComponent name="BOTHSPACE: Make a symbolic link to jalview.sh bash script in the user's/system local bin (Linux or Unix)" id="2908" beanClass="com.install4j.runtime.beans.formcomponents.CheckboxComponent">
+                <serializedBean>
+                  <property name="checkboxText" type="string">Make a ${compiler:WRAPPER_LINK} symbolic link in ${installer:unixBinDir}</property>
+                  <property name="initiallySelected" type="boolean" value="true" />
+                  <property name="variableName" type="string">makeSymbolicLinkAction</property>
+                </serializedBean>
+                <visibilityScript>context.getBooleanVariable("makeSymbolicLink")
+&amp;&amp; context.getVariable("unixBinDir") != null
+&amp;&amp; (
+     Util.isLinux()
+     || Util.isUnixInstaller()
+     || (
+          ( Util.isMacOS() &amp;&amp; !Util.hasFullAdminRights() ) // Admin on macOS will add path to /etc/paths.d
+          &amp;&amp; context.getVariable("macWrapperLinkLocation") != null
+        )
+    )
+</visibilityScript>
               </formComponent>
             </formComponents>
           </screen>
@@ -610,23 +686,6 @@ return console.askOkCancel(message, true);
                   <property name="itemName" type="string">${compiler:sys.fullName} ${compiler:sys.version}</property>
                 </serializedBean>
               </action>
-              <action id="124" beanClass="com.install4j.runtime.beans.actions.control.SetVariableAction" enabled="false" rollbackBarrierExitCode="0">
-                <serializedBean>
-                  <property name="script">
-                    <object class="com.install4j.api.beans.ScriptProperty">
-                      <property name="value" type="string" />
-                    </object>
-                  </property>
-                  <property name="variableName" type="string" />
-                </serializedBean>
-                <condition>true</condition>
-              </action>
-              <action id="134" beanClass="com.install4j.runtime.beans.actions.misc.AddVmOptionsAction" enabled="false" actionElevationType="elevated" rollbackBarrierExitCode="0">
-                <serializedBean>
-                  <property name="launcherId" type="string">121</property>
-                  <property name="vmOptions" type="array" elementType="string" length="0" />
-                </serializedBean>
-              </action>
               <group name="File Associations" id="2251" beanClass="com.install4j.runtime.beans.groups.ActionGroup">
                 <beans>
                   <action id="2253" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
@@ -666,302 +725,342 @@ return console.askOkCancel(message, true);
                   </action>
                 </beans>
               </group>
-              <action id="2350" beanClass="com.install4j.runtime.beans.actions.desktop.UrlHandlerAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
-                <serializedBean>
-                  <property name="launcherId" type="string">2823</property>
-                  <property name="scheme" type="string">jalview</property>
-                </serializedBean>
-              </action>
-              <action id="2822" beanClass="com.install4j.runtime.beans.actions.desktop.UrlHandlerAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
-                <serializedBean>
-                  <property name="launcherId" type="string">2823</property>
-                  <property name="scheme" type="string">jalviews</property>
-                </serializedBean>
-              </action>
-              <action id="2819" beanClass="com.install4j.runtime.beans.actions.desktop.UrlHandlerAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
-                <serializedBean>
-                  <property name="launcherId" type="string">2823</property>
-                  <property name="scheme" type="string">jalviewhttp</property>
-                </serializedBean>
-              </action>
-              <action id="2820" beanClass="com.install4j.runtime.beans.actions.desktop.UrlHandlerAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
-                <serializedBean>
-                  <property name="launcherId" type="string">2823</property>
-                  <property name="scheme" type="string">jalviewhttps</property>
-                </serializedBean>
-              </action>
-              <action id="2641" beanClass="com.install4j.runtime.beans.actions.desktop.UrlHandlerAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
-                <serializedBean>
-                  <property name="launcherId" type="string">2823</property>
-                  <property name="scheme" type="string">${compiler:EXTRA_SCHEME}</property>
-                </serializedBean>
-              </action>
-            </actions>
-            <formComponents>
-              <formComponent id="16" beanClass="com.install4j.runtime.beans.formcomponents.ProgressComponent">
-                <serializedBean>
-                  <property name="initialStatusMessage" type="string">${i18n:WizardPreparing}</property>
-                </serializedBean>
-              </formComponent>
-            </formComponents>
-          </screen>
-          <screen id="20" beanClass="com.install4j.runtime.beans.screens.FinishedScreen" rollbackBarrierExitCode="0" finishScreen="true">
-            <actions>
-              <action name="macOS/Linux Jalview-&gt;java symlink" id="2814" beanClass="com.install4j.runtime.beans.actions.files.CreateSymlinkAction" rollbackBarrierExitCode="0" errorMessage="Could not make symlink to wrapper script">
-                <serializedBean>
-                  <property name="file">
-                    <object class="java.io.File">
-                      <string>${compiler:JRE_DIR}/bin/java</string>
-                    </object>
-                  </property>
-                  <property name="linkFile">
-                    <object class="java.io.File">
-                      <string>${compiler:JRE_DIR}/bin/${compiler:JALVIEW_NAME}</string>
-                    </object>
-                  </property>
-                  <property name="removeOnUninstall" type="boolean" value="false" />
-                </serializedBean>
-                <condition>Util.isLinux() || Util.isMacOS()</condition>
-              </action>
-              <action name="macOS/Linux Jalview Appname-&gt;java symlink" id="2813" beanClass="com.install4j.runtime.beans.actions.files.CreateSymlinkAction" rollbackBarrierExitCode="0" errorMessage="Could not make symlink to wrapper script">
-                <serializedBean>
-                  <property name="file">
-                    <object class="java.io.File">
-                      <string>${compiler:JRE_DIR}/bin/java</string>
-                    </object>
-                  </property>
-                  <property name="linkFile">
-                    <object class="java.io.File">
-                      <string>${compiler:JRE_DIR}/bin/${compiler:JALVIEW_APPLICATION_NAME}</string>
-                    </object>
-                  </property>
-                  <property name="removeOnUninstall" type="boolean" value="false" />
-                </serializedBean>
-                <condition>(Util.isLinux() || Util.isMacOS())
-&amp;&amp; !((String)context.getCompilerVariable("JALVIEW_APPLICATION_NAME")).equals((String)context.getCompilerVariable("JALVIEW_NAME"))</condition>
-              </action>
-              <action name="USERSPACE: Create start menu item" id="2012" beanClass="com.install4j.runtime.beans.actions.desktop.CreateStartMenuEntryAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
-                <serializedBean>
-                  <property name="allUsers" type="boolean" value="false" />
-                  <property name="categories" type="string">${compiler:APPLICATION_CATEGORIES}</property>
-                  <property name="entryName" type="string">${compiler:JALVIEW_APPLICATION_NAME}</property>
-                  <property name="file">
-                    <object class="java.io.File">
-                      <string>${installer:sys.contentDir}/${compiler:EXECUTABLE_NAME}</string>
-                    </object>
-                  </property>
-                  <property name="icon">
-                    <object class="com.install4j.api.beans.ExternalFile">
-                      <string>${compiler:JALVIEW_DIR}/${compiler:ICONS_DIR}/${compiler:WINDOWS_ICONS_FILE}</string>
-                    </object>
-                  </property>
-                  <property name="programGroupName" type="string">${compiler:JALVIEW_NAME}</property>
-                  <property name="unixIconFile">
-                    <object class="com.install4j.api.beans.ExternalFile">
-                      <string>${compiler:JALVIEW_DIR}/${compiler:ICONS_DIR}/${compiler:PNG_ICON_FILE}</string>
-                    </object>
-                  </property>
-                </serializedBean>
-                <condition>!Util.hasFullAdminRights() &amp;&amp; !context.getBooleanVariable("sys.programGroupDisabled")</condition>
-              </action>
-              <action name="USERSPACE: Add a desktop link" id="573" beanClass="com.install4j.runtime.beans.actions.desktop.CreateDesktopLinkAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make desktop link">
-                <serializedBean>
-                  <property name="allUsers" type="boolean" value="false" />
-                  <property name="description" type="string">${compiler:JALVIEW_APPLICATION_NAME}</property>
-                  <property name="file">
-                    <object class="java.io.File">
-                      <string>${installer:sys.contentDir}/${compiler:EXECUTABLE_NAME}</string>
-                    </object>
-                  </property>
-                  <property name="name" type="string">${compiler:JALVIEW_APPLICATION_NAME}</property>
-                  <property name="unixIconFile">
-                    <object class="com.install4j.api.beans.ExternalFile">
-                      <string>${compiler:JALVIEW_DIR}/${compiler:ICONS_DIR}/${compiler:PNG_ICON_FILE}</string>
-                    </object>
-                  </property>
-                  <property name="winIconFile">
-                    <object class="com.install4j.api.beans.ExternalFile">
-                      <string>${compiler:JALVIEW_DIR}/${compiler:ICONS_DIR}/${compiler:WINDOWS_ICONS_FILE}</string>
-                    </object>
-                  </property>
-                </serializedBean>
-                <condition>!Util.hasFullAdminRights() &amp;&amp; context.getBooleanVariable("createDesktopLinkAction")</condition>
-              </action>
-              <action name="USERSPACE: Add an executable to the dock (macOS)" id="576" beanClass="com.install4j.runtime.beans.actions.desktop.AddToDockAction" actionElevationType="none" rollbackBarrierExitCode="0">
+              <group name="Register URL Handlers" id="2957" beanClass="com.install4j.runtime.beans.groups.ActionGroup">
+                <beans>
+                  <action id="2350" beanClass="com.install4j.runtime.beans.actions.desktop.UrlHandlerAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
+                    <serializedBean>
+                      <property name="launcherId" type="string">2823</property>
+                      <property name="scheme" type="string">jalview</property>
+                    </serializedBean>
+                  </action>
+                  <action id="2822" beanClass="com.install4j.runtime.beans.actions.desktop.UrlHandlerAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
+                    <serializedBean>
+                      <property name="launcherId" type="string">2823</property>
+                      <property name="scheme" type="string">jalviews</property>
+                    </serializedBean>
+                  </action>
+                  <action id="2819" beanClass="com.install4j.runtime.beans.actions.desktop.UrlHandlerAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
+                    <serializedBean>
+                      <property name="launcherId" type="string">2823</property>
+                      <property name="scheme" type="string">jalviewhttp</property>
+                    </serializedBean>
+                  </action>
+                  <action id="2820" beanClass="com.install4j.runtime.beans.actions.desktop.UrlHandlerAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
+                    <serializedBean>
+                      <property name="launcherId" type="string">2823</property>
+                      <property name="scheme" type="string">jalviewhttps</property>
+                    </serializedBean>
+                  </action>
+                  <action id="2641" beanClass="com.install4j.runtime.beans.actions.desktop.UrlHandlerAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
+                    <serializedBean>
+                      <property name="launcherId" type="string">2823</property>
+                      <property name="scheme" type="string">${compiler:EXTRA_SCHEME}</property>
+                    </serializedBean>
+                  </action>
+                </beans>
+              </group>
+              <group name="USERSPACE: Actions" id="2921" beanClass="com.install4j.runtime.beans.groups.ActionGroup">
                 <serializedBean>
-                  <property name="executable">
-                    <object class="java.io.File">
-                      <string>${compiler:JALVIEW_APPLICATION_NAME}.app</string>
+                  <property name="conditionExpression">
+                    <object class="com.install4j.api.beans.ScriptProperty">
+                      <property name="value" type="string">!Util.hasFullAdminRights()</property>
                     </object>
                   </property>
                 </serializedBean>
-                <condition>!Util.hasFullAdminRights()
+                <beans>
+                  <action name="USERSPACE: Create start menu item" id="2916" beanClass="com.install4j.runtime.beans.actions.desktop.CreateStartMenuEntryAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
+                    <serializedBean>
+                      <property name="allUsers" type="boolean" value="false" />
+                      <property name="categories" type="string">${compiler:APPLICATION_CATEGORIES}</property>
+                      <property name="entryName" type="string">${compiler:JALVIEW_APPLICATION_NAME}</property>
+                      <property name="file">
+                        <object class="java.io.File">
+                          <string>${installer:sys.contentDir}/${compiler:EXECUTABLE_NAME}</string>
+                        </object>
+                      </property>
+                      <property name="icon">
+                        <object class="com.install4j.api.beans.ExternalFile">
+                          <string>${compiler:JALVIEW_DIR}/${compiler:ICONS_DIR}/${compiler:WINDOWS_ICONS_FILE}</string>
+                        </object>
+                      </property>
+                      <property name="programGroupName" type="string">${compiler:JALVIEW_NAME}</property>
+                      <property name="unixIconFile">
+                        <object class="com.install4j.api.beans.ExternalFile">
+                          <string>${compiler:JALVIEW_DIR}/${compiler:ICONS_DIR}/${compiler:PNG_ICON_FILE}</string>
+                        </object>
+                      </property>
+                    </serializedBean>
+                    <condition>!Util.hasFullAdminRights() &amp;&amp; !context.getBooleanVariable("sys.programGroupDisabled")</condition>
+                  </action>
+                  <action name="USERSPACE: Add a desktop link" id="2917" beanClass="com.install4j.runtime.beans.actions.desktop.CreateDesktopLinkAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make desktop link">
+                    <serializedBean>
+                      <property name="allUsers" type="boolean" value="false" />
+                      <property name="description" type="string">${compiler:JALVIEW_APPLICATION_NAME}</property>
+                      <property name="file">
+                        <object class="java.io.File">
+                          <string>${installer:sys.contentDir}/${compiler:EXECUTABLE_NAME}</string>
+                        </object>
+                      </property>
+                      <property name="name" type="string">${compiler:JALVIEW_APPLICATION_NAME}</property>
+                      <property name="unixIconFile">
+                        <object class="com.install4j.api.beans.ExternalFile">
+                          <string>${compiler:JALVIEW_DIR}/${compiler:ICONS_DIR}/${compiler:PNG_ICON_FILE}</string>
+                        </object>
+                      </property>
+                      <property name="winIconFile">
+                        <object class="com.install4j.api.beans.ExternalFile">
+                          <string>${compiler:JALVIEW_DIR}/${compiler:ICONS_DIR}/${compiler:WINDOWS_ICONS_FILE}</string>
+                        </object>
+                      </property>
+                    </serializedBean>
+                    <condition>!Util.hasFullAdminRights() &amp;&amp; context.getBooleanVariable("createDesktopLinkAction")</condition>
+                  </action>
+                  <action name="USERSPACE: Add an executable to the dock (macOS)" id="2918" beanClass="com.install4j.runtime.beans.actions.desktop.AddToDockAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                    <serializedBean>
+                      <property name="executable">
+                        <object class="java.io.File">
+                          <string>${compiler:JALVIEW_APPLICATION_NAME}.app</string>
+                        </object>
+                      </property>
+                    </serializedBean>
+                    <condition>!Util.hasFullAdminRights()
 &amp;&amp;
 context.getBooleanVariable("addToDockAction")</condition>
-              </action>
-              <action name="USERSPACE: Add Jalview bin to the user's path (Windows)" id="2740" beanClass="com.install4j.runtime.beans.actions.misc.ModifyEnvironmentVariableAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not add &quot;${installer:sys.contentDir}\${compiler:WRAPPER_SCRIPT_BIN_DIR}&quot; to the Path environment variable">
-                <serializedBean>
-                  <property name="type" type="enum" class="com.install4j.runtime.beans.actions.misc.ModifyStringType" value="APPEND" />
-                  <property name="value" type="string">${installer:sys.contentDir}\${compiler:WRAPPER_SCRIPT_BIN_DIR}</property>
-                  <property name="variableName" type="string">Path</property>
-                </serializedBean>
-                <condition>!Util.hasFullAdminRights() &amp;&amp; context.getBooleanVariable("appendToPathAction")</condition>
-              </action>
-              <action name="USERSPACE: Create macOS symbolic link to jalview in user's local bin" id="2743" beanClass="com.install4j.runtime.beans.actions.files.CreateSymlinkAction" rollbackBarrierExitCode="0" errorMessage="Could not make a ${compiler:WRAPPER_LINK} symbolic link in ~/${installer:unixBinDir}">
-                <serializedBean>
-                  <property name="file">
-                    <object class="java.io.File">
-                      <string>${installer:macWrapperLinkLocation}</string>
-                    </object>
-                  </property>
-                  <property name="linkFile">
-                    <object class="java.io.File">
-                      <string>${installer:unixBinDir}/${compiler:WRAPPER_LINK}</string>
-                    </object>
-                  </property>
-                </serializedBean>
-                <condition>Util.isMacOS() &amp;&amp; !Util.hasFullAdminRights() // Admin on macOS will add path to /etc/paths.d
+                  </action>
+                  <action name="USERSPACE: Add Jalview bin to the user's path (Windows)" id="2919" beanClass="com.install4j.runtime.beans.actions.misc.ModifyEnvironmentVariableAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not add &quot;${installer:sys.contentDir}\${compiler:WRAPPER_SCRIPT_BIN_DIR}&quot; to the Path environment variable">
+                    <serializedBean>
+                      <property name="type" type="enum" class="com.install4j.runtime.beans.actions.misc.ModifyStringType" value="APPEND" />
+                      <property name="value" type="string">${installer:sys.contentDir}\${compiler:WRAPPER_SCRIPT_BIN_DIR}</property>
+                      <property name="variableName" type="string">Path</property>
+                    </serializedBean>
+                    <condition>!Util.hasFullAdminRights() &amp;&amp; context.getBooleanVariable("appendToPathAction")</condition>
+                  </action>
+                  <action name="USERSPACE: Create macOS symbolic link to jalview in user's local bin" id="2920" beanClass="com.install4j.runtime.beans.actions.files.CreateSymlinkAction" rollbackBarrierExitCode="0" errorMessage="Could not make a ${compiler:WRAPPER_LINK} symbolic link in ~/${installer:unixBinDir}">
+                    <serializedBean>
+                      <property name="file">
+                        <object class="java.io.File">
+                          <string>${installer:macWrapperLinkLocation}</string>
+                        </object>
+                      </property>
+                      <property name="linkFile">
+                        <object class="java.io.File">
+                          <string>${installer:unixBinDir}/${compiler:WRAPPER_LINK}</string>
+                        </object>
+                      </property>
+                    </serializedBean>
+                    <condition>Util.isMacOS() &amp;&amp; !Util.hasFullAdminRights() // Admin on macOS will add path to /etc/paths.d
 &amp;&amp;
 (
   context.getBooleanVariable("makeSymbolicLinkAction")
   &amp;&amp; context.getVariable("unixBinDir") != null
   &amp;&amp; context.getVariable("macWrapperLinkLocation") != null
 )</condition>
-              </action>
-              <action name="Linux/Unix Jalview bin dir symlink" id="2733" beanClass="com.install4j.runtime.beans.actions.files.CreateSymlinkAction" rollbackBarrierExitCode="0" errorMessage="Could not make symlink to wrapper script">
-                <serializedBean>
-                  <property name="file">
-                    <object class="java.io.File">
-                      <string>${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:BASH_WRAPPER_SCRIPT}</string>
-                    </object>
-                  </property>
-                  <property name="linkFile">
-                    <object class="java.io.File">
-                      <string>${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:WRAPPER_LINK}</string>
-                    </object>
-                  </property>
-                </serializedBean>
-                <condition>Util.isLinux() || Util.isUnixInstaller() || Util.isMacOS()</condition>
-              </action>
-              <action name="Windows copy BAT file" id="2817" beanClass="com.install4j.runtime.beans.actions.files.CopyFileAction" rollbackBarrierExitCode="0">
-                <serializedBean>
-                  <property name="destinationFile">
-                    <object class="java.io.File">
-                      <string>${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:WRAPPER_LINK}.bat</string>
-                    </object>
-                  </property>
-                  <property name="files" type="array" class="java.io.File" length="1">
-                    <element index="0">
-                      <object class="java.io.File">
-                        <string>${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:BATCH_WRAPPER_SCRIPT}</string>
-                      </object>
-                    </element>
-                  </property>
-                </serializedBean>
-                <condition>Util.isWindows() &amp;&amp; !(((String)context.getCompilerVariable("WRAPPER_LINK")+".bat").equals((String)context.getCompilerVariable("BATCH_WRAPPER_SCRIPT")))</condition>
-              </action>
-              <action name="Windows copy PS1 file" id="2818" beanClass="com.install4j.runtime.beans.actions.files.CopyFileAction" rollbackBarrierExitCode="0">
-                <serializedBean>
-                  <property name="destinationFile">
-                    <object class="java.io.File">
-                      <string>${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:WRAPPER_LINK}.ps1</string>
-                    </object>
-                  </property>
-                  <property name="files" type="array" class="java.io.File" length="1">
-                    <element index="0">
-                      <object class="java.io.File">
-                        <string>${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:POWERSHELL_WRAPPER_SCRIPT}</string>
-                      </object>
-                    </element>
-                  </property>
-                </serializedBean>
-                <condition>Util.isWindows() &amp;&amp; !(((String)context.getCompilerVariable("WRAPPER_LINK")+".ps1").equals((String)context.getCompilerVariable("POWERSHELL_WRAPPER_SCRIPT")))</condition>
-              </action>
-              <action name="SYSTEMSPACE: Create start menu item" id="2846" beanClass="com.install4j.runtime.beans.actions.desktop.CreateStartMenuEntryAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
-                <serializedBean>
-                  <property name="categories" type="string">${compiler:APPLICATION_CATEGORIES}</property>
-                  <property name="entryName" type="string">${compiler:JALVIEW_APPLICATION_NAME}</property>
-                  <property name="file">
-                    <object class="java.io.File">
-                      <string>${installer:sys.contentDir}/${compiler:EXECUTABLE_NAME}</string>
-                    </object>
-                  </property>
-                  <property name="icon">
-                    <object class="com.install4j.api.beans.ExternalFile">
-                      <string>${compiler:JALVIEW_DIR}/${compiler:ICONS_DIR}/${compiler:WINDOWS_ICONS_FILE}</string>
-                    </object>
-                  </property>
-                  <property name="programGroupName" type="string">${compiler:JALVIEW_NAME}</property>
-                  <property name="runAsAdministrator" type="boolean" value="true" />
-                  <property name="unixIconFile">
-                    <object class="com.install4j.api.beans.ExternalFile">
-                      <string>${compiler:JALVIEW_DIR}/${compiler:ICONS_DIR}/${compiler:PNG_ICON_FILE}</string>
-                    </object>
-                  </property>
-                </serializedBean>
-                <condition>Util.hasFullAdminRights() &amp;&amp; !context.getBooleanVariable("sys.programGroupDisabled")</condition>
-              </action>
-              <action name="SYSTEMSPACE: Add a desktop link" id="2847" beanClass="com.install4j.runtime.beans.actions.desktop.CreateDesktopLinkAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make desktop link">
-                <serializedBean>
-                  <property name="description" type="string">${compiler:JALVIEW_APPLICATION_NAME}</property>
-                  <property name="file">
-                    <object class="java.io.File">
-                      <string>${installer:sys.contentDir}/${compiler:EXECUTABLE_NAME}</string>
-                    </object>
-                  </property>
-                  <property name="name" type="string">${compiler:JALVIEW_APPLICATION_NAME}</property>
-                  <property name="runAsAdministrator" type="boolean" value="true" />
-                  <property name="unixIconFile">
-                    <object class="com.install4j.api.beans.ExternalFile">
-                      <string>${compiler:JALVIEW_DIR}/${compiler:ICONS_DIR}/${compiler:PNG_ICON_FILE}</string>
-                    </object>
-                  </property>
-                  <property name="winIconFile">
-                    <object class="com.install4j.api.beans.ExternalFile">
-                      <string>${compiler:JALVIEW_DIR}/${compiler:ICONS_DIR}/${compiler:WINDOWS_ICONS_FILE}</string>
-                    </object>
-                  </property>
-                </serializedBean>
-                <condition>Util.hasFullAdminRights() &amp;&amp; context.getBooleanVariable("createDesktopLinkAction")</condition>
-              </action>
-              <action name="SYSTEMSPACE: Add Jalview bin to the user's path (Windows)" id="2849" beanClass="com.install4j.runtime.beans.actions.misc.ModifyEnvironmentVariableAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not add &quot;${installer:sys.contentDir}\${compiler:WRAPPER_SCRIPT_BIN_DIR}&quot; to the Path environment variable">
-                <serializedBean>
-                  <property name="type" type="enum" class="com.install4j.runtime.beans.actions.misc.ModifyStringType" value="APPEND" />
-                  <property name="userSpecific" type="boolean" value="false" />
-                  <property name="value" type="string">${installer:sys.contentDir}\${compiler:WRAPPER_SCRIPT_BIN_DIR}</property>
-                  <property name="variableName" type="string">Path</property>
-                </serializedBean>
-                <condition>Util.hasFullAdminRights() &amp;&amp; context.getBooleanVariable("appendToPathAction")</condition>
-              </action>
-              <action name="SYSTEMSPACE: macOS /etc/paths.d entry" id="2852" beanClass="com.install4j.runtime.beans.actions.text.WriteTextFileAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
+                  </action>
+                </beans>
+              </group>
+              <group name="SYSTEMSPACE: Actions" id="2954" beanClass="com.install4j.runtime.beans.groups.ActionGroup">
                 <serializedBean>
-                  <property name="file">
-                    <object class="java.io.File">
-                      <string>/etc/paths.d/${compiler:APPLICATION_FOLDER}</string>
+                  <property name="conditionExpression">
+                    <object class="com.install4j.api.beans.ScriptProperty">
+                      <property name="value" type="string">Util.hasFullAdminRights()</property>
                     </object>
                   </property>
-                  <property name="text" type="string">/Applications/${compiler:JALVIEW_APPLICATION_NAME}.app/Contents/MacOS</property>
                 </serializedBean>
-                <condition>Util.hasFullAdminRights() &amp;&amp; Util.isMacOS()</condition>
-              </action>
-              <action name="BOTHSPACE: Create Linux/Unix user symbolic link to jalview.sh in system bin" id="2850" beanClass="com.install4j.runtime.beans.actions.files.CreateSymlinkAction" rollbackBarrierExitCode="0" errorMessage="Could not make a ${compiler:WRAPPER_LINK} symbolic link in ~/${installer:unixBinDir}">
+                <beans>
+                  <action name="SYSTEMSPACE: Create start menu item" id="2950" beanClass="com.install4j.runtime.beans.actions.desktop.CreateStartMenuEntryAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
+                    <serializedBean>
+                      <property name="categories" type="string">${compiler:APPLICATION_CATEGORIES}</property>
+                      <property name="entryName" type="string">${compiler:JALVIEW_APPLICATION_NAME}</property>
+                      <property name="file">
+                        <object class="java.io.File">
+                          <string>${installer:sys.contentDir}/${compiler:EXECUTABLE_NAME}</string>
+                        </object>
+                      </property>
+                      <property name="icon">
+                        <object class="com.install4j.api.beans.ExternalFile">
+                          <string>${compiler:JALVIEW_DIR}/${compiler:ICONS_DIR}/${compiler:WINDOWS_ICONS_FILE}</string>
+                        </object>
+                      </property>
+                      <property name="programGroupName" type="string">${compiler:JALVIEW_NAME}</property>
+                      <property name="runAsAdministrator" type="boolean" value="true" />
+                      <property name="unixIconFile">
+                        <object class="com.install4j.api.beans.ExternalFile">
+                          <string>${compiler:JALVIEW_DIR}/${compiler:ICONS_DIR}/${compiler:PNG_ICON_FILE}</string>
+                        </object>
+                      </property>
+                    </serializedBean>
+                    <condition>!context.getBooleanVariable("sys.programGroupDisabled")</condition>
+                  </action>
+                  <action name="SYSTEMSPACE: Add a desktop link" id="2951" beanClass="com.install4j.runtime.beans.actions.desktop.CreateDesktopLinkAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make desktop link">
+                    <serializedBean>
+                      <property name="description" type="string">${compiler:JALVIEW_APPLICATION_NAME}</property>
+                      <property name="file">
+                        <object class="java.io.File">
+                          <string>${installer:sys.contentDir}/${compiler:EXECUTABLE_NAME}</string>
+                        </object>
+                      </property>
+                      <property name="name" type="string">${compiler:JALVIEW_APPLICATION_NAME}</property>
+                      <property name="runAsAdministrator" type="boolean" value="true" />
+                      <property name="unixIconFile">
+                        <object class="com.install4j.api.beans.ExternalFile">
+                          <string>${compiler:JALVIEW_DIR}/${compiler:ICONS_DIR}/${compiler:PNG_ICON_FILE}</string>
+                        </object>
+                      </property>
+                      <property name="winIconFile">
+                        <object class="com.install4j.api.beans.ExternalFile">
+                          <string>${compiler:JALVIEW_DIR}/${compiler:ICONS_DIR}/${compiler:WINDOWS_ICONS_FILE}</string>
+                        </object>
+                      </property>
+                    </serializedBean>
+                    <condition>context.getBooleanVariable("createDesktopLinkAction")</condition>
+                  </action>
+                  <action name="SYSTEMSPACE: Add Jalview bin to the user's path (Windows)" id="2952" beanClass="com.install4j.runtime.beans.actions.misc.ModifyEnvironmentVariableAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not add &quot;${installer:sys.contentDir}\${compiler:WRAPPER_SCRIPT_BIN_DIR}&quot; to the Path environment variable">
+                    <serializedBean>
+                      <property name="type" type="enum" class="com.install4j.runtime.beans.actions.misc.ModifyStringType" value="APPEND" />
+                      <property name="userSpecific" type="boolean" value="false" />
+                      <property name="value" type="string">${installer:sys.contentDir}\${compiler:WRAPPER_SCRIPT_BIN_DIR}</property>
+                      <property name="variableName" type="string">Path</property>
+                    </serializedBean>
+                    <condition>context.getBooleanVariable("appendToPathAction")</condition>
+                  </action>
+                  <action name="SYSTEMSPACE: macOS /etc/paths.d entry" id="2953" beanClass="com.install4j.runtime.beans.actions.text.WriteTextFileAction" actionElevationType="elevated" rollbackBarrierExitCode="0">
+                    <serializedBean>
+                      <property name="file">
+                        <object class="java.io.File">
+                          <string>/etc/paths.d/${compiler:APPLICATION_FOLDER}</string>
+                        </object>
+                      </property>
+                      <property name="text" type="string">/Applications/${compiler:JALVIEW_APPLICATION_NAME}.app/Contents/MacOS</property>
+                    </serializedBean>
+                    <condition>Util.isMacOS()</condition>
+                  </action>
+                </beans>
+              </group>
+              <group name="BOTHSPACE: Actions" id="2956" beanClass="com.install4j.runtime.beans.groups.ActionGroup">
+                <beans>
+                  <action name="BOTHSPACE: Create Linux/Unix user symbolic link to jalview.sh in system bin" id="2955" beanClass="com.install4j.runtime.beans.actions.files.CreateSymlinkAction" rollbackBarrierExitCode="0" errorMessage="Could not make a ${compiler:WRAPPER_LINK} symbolic link in ~/${installer:unixBinDir}">
+                    <serializedBean>
+                      <property name="file">
+                        <object class="java.io.File">
+                          <string>${installer:sys.contentDir}/${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:BASH_WRAPPER_SCRIPT}</string>
+                        </object>
+                      </property>
+                      <property name="linkFile">
+                        <object class="java.io.File">
+                          <string>${installer:unixBinDir}/${compiler:WRAPPER_LINK}</string>
+                        </object>
+                      </property>
+                    </serializedBean>
+                    <condition>context.getBooleanVariable("makeSymbolicLink")
+&amp;&amp; context.getBooleanVariable("makeSymbolicLinkAction")
+&amp;&amp; context.getVariable("unixBinDir") != null</condition>
+                  </action>
+                </beans>
+              </group>
+              <group name="Java bin symlinks" id="2944" beanClass="com.install4j.runtime.beans.groups.ActionGroup">
+                <beans>
+                  <action name="macOS/Linux Jalview-&gt;java symlink" id="2942" beanClass="com.install4j.runtime.beans.actions.files.CreateSymlinkAction" rollbackBarrierExitCode="0" errorMessage="Could not make symlink to wrapper script">
+                    <serializedBean>
+                      <property name="file">
+                        <object class="java.io.File">
+                          <string>${compiler:JRE_DIR}/bin/java</string>
+                        </object>
+                      </property>
+                      <property name="linkFile">
+                        <object class="java.io.File">
+                          <string>${compiler:JRE_DIR}/bin/${compiler:JALVIEW_NAME}</string>
+                        </object>
+                      </property>
+                      <property name="removeOnUninstall" type="boolean" value="false" />
+                    </serializedBean>
+                    <condition>Util.isLinux() || Util.isMacOS()</condition>
+                  </action>
+                  <action name="macOS/Linux Jalview Appname-&gt;java symlink" id="2943" beanClass="com.install4j.runtime.beans.actions.files.CreateSymlinkAction" rollbackBarrierExitCode="0" errorMessage="Could not make symlink to wrapper script">
+                    <serializedBean>
+                      <property name="file">
+                        <object class="java.io.File">
+                          <string>${compiler:JRE_DIR}/bin/java</string>
+                        </object>
+                      </property>
+                      <property name="linkFile">
+                        <object class="java.io.File">
+                          <string>${compiler:JRE_DIR}/bin/${compiler:JALVIEW_APPLICATION_NAME}</string>
+                        </object>
+                      </property>
+                      <property name="removeOnUninstall" type="boolean" value="false" />
+                    </serializedBean>
+                    <condition>(Util.isLinux() || Util.isMacOS())
+&amp;&amp; !((String)context.getCompilerVariable("JALVIEW_APPLICATION_NAME")).equals((String)context.getCompilerVariable("JALVIEW_NAME"))</condition>
+                  </action>
+                </beans>
+              </group>
+              <group name="Jalview bin symlink" id="2946" beanClass="com.install4j.runtime.beans.groups.ActionGroup">
+                <beans>
+                  <action name="Linux/Unix Jalview bin dir symlink" id="2945" beanClass="com.install4j.runtime.beans.actions.files.CreateSymlinkAction" rollbackBarrierExitCode="0" errorMessage="Could not make symlink to wrapper script">
+                    <serializedBean>
+                      <property name="file">
+                        <object class="java.io.File">
+                          <string>${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:BASH_WRAPPER_SCRIPT}</string>
+                        </object>
+                      </property>
+                      <property name="linkFile">
+                        <object class="java.io.File">
+                          <string>${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:WRAPPER_LINK}</string>
+                        </object>
+                      </property>
+                    </serializedBean>
+                    <condition>Util.isLinux() || Util.isUnixInstaller() || Util.isMacOS()</condition>
+                  </action>
+                </beans>
+              </group>
+              <group name="Windows scripts" id="2949" beanClass="com.install4j.runtime.beans.groups.ActionGroup">
+                <beans>
+                  <action name="Windows copy BAT file" id="2947" beanClass="com.install4j.runtime.beans.actions.files.CopyFileAction" rollbackBarrierExitCode="0">
+                    <serializedBean>
+                      <property name="destinationFile">
+                        <object class="java.io.File">
+                          <string>${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:WRAPPER_LINK}.bat</string>
+                        </object>
+                      </property>
+                      <property name="files" type="array" class="java.io.File" length="1">
+                        <element index="0">
+                          <object class="java.io.File">
+                            <string>${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:BATCH_WRAPPER_SCRIPT}</string>
+                          </object>
+                        </element>
+                      </property>
+                    </serializedBean>
+                    <condition>Util.isWindows() &amp;&amp; !(((String)context.getCompilerVariable("WRAPPER_LINK")+".bat").equals((String)context.getCompilerVariable("BATCH_WRAPPER_SCRIPT")))</condition>
+                  </action>
+                  <action name="Windows copy PS1 file" id="2948" beanClass="com.install4j.runtime.beans.actions.files.CopyFileAction" rollbackBarrierExitCode="0">
+                    <serializedBean>
+                      <property name="destinationFile">
+                        <object class="java.io.File">
+                          <string>${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:WRAPPER_LINK}.ps1</string>
+                        </object>
+                      </property>
+                      <property name="files" type="array" class="java.io.File" length="1">
+                        <element index="0">
+                          <object class="java.io.File">
+                            <string>${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:POWERSHELL_WRAPPER_SCRIPT}</string>
+                          </object>
+                        </element>
+                      </property>
+                    </serializedBean>
+                    <condition>Util.isWindows() &amp;&amp; !(((String)context.getCompilerVariable("WRAPPER_LINK")+".ps1").equals((String)context.getCompilerVariable("POWERSHELL_WRAPPER_SCRIPT")))</condition>
+                  </action>
+                </beans>
+              </group>
+            </actions>
+            <formComponents>
+              <formComponent id="16" beanClass="com.install4j.runtime.beans.formcomponents.ProgressComponent">
                 <serializedBean>
-                  <property name="file">
-                    <object class="java.io.File">
-                      <string>${installer:sys.contentDir}/${compiler:WRAPPER_SCRIPT_BIN_DIR}/${compiler:BASH_WRAPPER_SCRIPT}</string>
-                    </object>
-                  </property>
-                  <property name="linkFile">
-                    <object class="java.io.File">
-                      <string>${installer:unixBinDir}/${compiler:WRAPPER_LINK}</string>
-                    </object>
-                  </property>
+                  <property name="initialStatusMessage" type="string">${i18n:WizardPreparing}</property>
                 </serializedBean>
-                <condition>context.getBooleanVariable("makeSymbolicLinkAction")
-&amp;&amp; context.getVariable("unixBinDir") != null
-&amp;&amp; context.getBooleanVariable("makeSymbolicLink")</condition>
-              </action>
-            </actions>
+              </formComponent>
+            </formComponents>
+          </screen>
+          <screen id="20" beanClass="com.install4j.runtime.beans.screens.FinishedScreen" actionElevationType="elevated" rollbackBarrierExitCode="0" finishScreen="true">
             <formComponents>
               <formComponent id="21" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent" insetBottom="10">
                 <serializedBean>
@@ -1023,7 +1122,7 @@ context.getBooleanVariable("addToDockAction")</condition>
           </screen>
         </screens>
       </application>
-      <application id="uninstaller" beanClass="com.install4j.runtime.beans.applications.UninstallerApplication" styleId="35">
+      <application id="uninstaller" beanClass="com.install4j.runtime.beans.applications.UninstallerApplication" actionElevationType="elevated" styleId="35">
         <serializedBean>
           <property name="customMacosExecutableName" type="string">${i18n:UninstallerMenuEntry(${compiler:sys.fullName})}</property>
           <property name="frameHeight" type="int" value="480" />
@@ -1387,10 +1486,6 @@ return console.askYesNo(message, true);
             <serializedBean>
               <property name="title" type="string">Running ${i18n:SetupAppTitle}</property>
             </serializedBean>
-            <actions>
-              <link id="2778" targetId="576" />
-              <link id="2779" targetId="2743" />
-            </actions>
             <formComponents>
               <formComponent id="2773" beanClass="com.install4j.runtime.beans.formcomponents.MultilineLabelComponent" insetBottom="10">
                 <serializedBean>