From 7b65e08943225d6dd164392536ea652bf31a6137 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20B=C3=BCttner?= Date: Thu, 13 May 2021 05:54:33 +0200 Subject: [PATCH] fixing installer fixing restart --- pom.xml | 17 +++++- .../java/de/idrinth/waraddonclient/Main.java | 52 ++++++++++--------- .../java/de/idrinth/waraddonclient/Utils.java | 18 +++++-- .../de/idrinth/waraddonclient/gui/Window.java | 14 ++--- .../waraddonclient/model/ActualAddon.java | 8 +-- .../waraddonclient/service/Backup.java | 4 +- src/main/resources/setup.iss | 2 +- 7 files changed, 73 insertions(+), 42 deletions(-) diff --git a/pom.xml b/pom.xml index 8924258..32b6499 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 de.idrinth WARAddonClient - 1.10.1 + 1.10.2 jar UTF-8 @@ -208,6 +208,21 @@ + + copy-conf + package + + copy-resources + + + ${basedir}/target/java/conf + + + ${java.home}/conf + + + + diff --git a/src/main/java/de/idrinth/waraddonclient/Main.java b/src/main/java/de/idrinth/waraddonclient/Main.java index ae77376..1141d22 100644 --- a/src/main/java/de/idrinth/waraddonclient/Main.java +++ b/src/main/java/de/idrinth/waraddonclient/Main.java @@ -55,31 +55,35 @@ public static void main(String[] args) { public static void restart() throws IOException { try { - StringBuilder cmd = new StringBuilder("\"" + System.getProperty("java.home") + "/bin/java\" "); - ManagementFactory.getRuntimeMXBean().getInputArguments().stream().filter(arg -> (!arg.contains("-agentlib"))).map(arg -> { - cmd.append(arg); - return arg; - }).forEachOrdered(item -> cmd.append(" ")); - - String[] mainCommand = System.getProperty(SUN_JAVA_COMMAND).split(" "); - cmd.append("-jar " ); - cmd.append(new File(mainCommand[0]).getPath()); - for (int i = 1; i < mainCommand.length; i++) { - cmd.append(" "); - cmd.append(mainCommand[i]); - } - Runtime.getRuntime().addShutdownHook(new Thread() { - @Override - public void run() { - try { - Runtime.getRuntime().exec(cmd.toString()); - } catch (IOException e) { - e.printStackTrace(); + File jar = new File("WARAddonClient.jar"); + File exe = new File("WARAddonClient.exe"); + if (exe.exists()) { + Runtime.getRuntime().addShutdownHook(new Thread() { + @Override + public void run() { + try { + Runtime.getRuntime().exec(exe.getAbsolutePath()); + } catch (IOException e) { + e.printStackTrace(); + } } - } - }); - System.exit(0); - } catch (Exception e) { + }); + System.exit(0); + } else if (jar.exists()) { + Runtime.getRuntime().addShutdownHook(new Thread() { + @Override + public void run() { + try { + Runtime.getRuntime().exec("java -jar "+jar.getAbsolutePath()); + } catch (IOException e) { + e.printStackTrace(); + } + } + }); + System.exit(0); + } + throw new IOException("Executable not found, did you replace it?"); + } catch (IOException e) { throw new IOException("Error while trying to restart the application", e); } } diff --git a/src/main/java/de/idrinth/waraddonclient/Utils.java b/src/main/java/de/idrinth/waraddonclient/Utils.java index a602494..9c7ed72 100644 --- a/src/main/java/de/idrinth/waraddonclient/Utils.java +++ b/src/main/java/de/idrinth/waraddonclient/Utils.java @@ -2,13 +2,17 @@ import de.idrinth.waraddonclient.service.FileLogger; import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.logging.Level; +import java.util.logging.Logger; public class Utils { private Utils() { } - public static void emptyFolder(File folder) { + public static void emptyFolder(File folder) throws IOException { if (folder == null || !folder.exists()) { return; } @@ -16,13 +20,21 @@ public static void emptyFolder(File folder) { if (file.isDirectory()) { emptyFolder(file); } - file.delete(); + Files.deleteIfExists(file.toPath()); } } + + public static void deleteFolder(File folder) throws IOException { + if (folder == null || !folder.exists()) { + return; + } + emptyFolder(folder); + Files.deleteIfExists(folder.toPath()); + } public static void sleep(int duration, FileLogger logger) { try { Thread.sleep(duration); - } catch (java.lang.InterruptedException exception) { + } catch (InterruptedException exception) { logger.info(exception); } } diff --git a/src/main/java/de/idrinth/waraddonclient/gui/Window.java b/src/main/java/de/idrinth/waraddonclient/gui/Window.java index f60a9a9..c982c9e 100644 --- a/src/main/java/de/idrinth/waraddonclient/gui/Window.java +++ b/src/main/java/de/idrinth/waraddonclient/gui/Window.java @@ -16,6 +16,8 @@ import java.awt.Desktop; import java.awt.FileDialog; import java.awt.Toolkit; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.event.HyperlinkEvent; @@ -650,7 +652,7 @@ private void RestoreBackupActionPerformed(java.awt.event.ActionEvent evt) {//GEN try { Backup.restore(new java.io.File(dialog.getDirectory() + "/" + dialog.getFile())); JOptionPane.showMessageDialog(this, "Backup restored."); - } catch (ZipException ex) { + } catch (IOException ex) { logger.error(ex); JOptionPane.showMessageDialog(this, "Couldn't restore Backup."); } @@ -658,17 +660,17 @@ private void RestoreBackupActionPerformed(java.awt.event.ActionEvent evt) {//GEN }//GEN-LAST:event_RestoreBackupActionPerformed private void QuitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_QuitActionPerformed + this.dispose(); + Runtime.getRuntime().exit(0); + }//GEN-LAST:event_QuitActionPerformed + + private void RestartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_RestartActionPerformed try { Main.restart(); } catch (IOException ex) { logger.error(ex); JOptionPane.showMessageDialog(this, "Couldn't restart app."); } - }//GEN-LAST:event_QuitActionPerformed - - private void RestartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_RestartActionPerformed - this.dispose(); - Runtime.getRuntime().exit(0); }//GEN-LAST:event_RestartActionPerformed /** diff --git a/src/main/java/de/idrinth/waraddonclient/model/ActualAddon.java b/src/main/java/de/idrinth/waraddonclient/model/ActualAddon.java index 4c595bb..d29e546 100644 --- a/src/main/java/de/idrinth/waraddonclient/model/ActualAddon.java +++ b/src/main/java/de/idrinth/waraddonclient/model/ActualAddon.java @@ -253,13 +253,9 @@ public void run(boolean redeploy) throws IOException { Config.setEnabled(name, false); } - /** - * removes all data of this addon from the harddrive - */ - private void uninstall() { + private void uninstall() throws IOException { java.io.File addonFolder = new java.io.File(Config.getWARPath() + BASE_PATH + name); - Utils.emptyFolder(addonFolder); - addonFolder.delete(); + Utils.deleteFolder(addonFolder); installed="-"; } diff --git a/src/main/java/de/idrinth/waraddonclient/service/Backup.java b/src/main/java/de/idrinth/waraddonclient/service/Backup.java index db5027a..5420160 100644 --- a/src/main/java/de/idrinth/waraddonclient/service/Backup.java +++ b/src/main/java/de/idrinth/waraddonclient/service/Backup.java @@ -2,6 +2,8 @@ import de.idrinth.waraddonclient.Config; import de.idrinth.waraddonclient.Utils; +import java.io.IOException; +import net.lingala.zip4j.exception.ZipException; public class Backup { private Backup() { @@ -21,7 +23,7 @@ public static void create() throws net.lingala.zip4j.exception.ZipException { zip.addFolder(new java.io.File(warDir+"/Interface")); } - public static void restore(java.io.File backup) throws net.lingala.zip4j.exception.ZipException { + public static void restore(java.io.File backup) throws ZipException, IOException { create(); String warDir = Config.getWARPath(); net.lingala.zip4j.ZipFile zip = new net.lingala.zip4j.ZipFile(backup); diff --git a/src/main/resources/setup.iss b/src/main/resources/setup.iss index 8d473fc..760ef5e 100644 --- a/src/main/resources/setup.iss +++ b/src/main/resources/setup.iss @@ -15,7 +15,7 @@ DefaultDirName={autopf}\{#MyAppName} DisableProgramGroupPage=yes PrivilegesRequiredOverridesAllowed=dialog OutputDir={#MyAppBasePath}\output -OutputBaseFilename={#MyAppName}Setup{#MyAppVersion} +OutputBaseFilename={#MyAppName}Setup SetupIconFile={#MyAppBasePath}\src\main\resources\Images\logo.ico Compression=lzma SolidCompression=yes