diff --git a/package-lock.json b/package-lock.json index 4be30b2..7d4199c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,13 @@ { "name": "aeromc", - "version": "1.0.7", + "version": "1.0.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "aeromc", - "version": "1.0.7", - "license": "MIT", + "version": "1.0.9", + "license": "SEE LICENSE IN LICENSE", "dependencies": { "archiver": "^7.0.1", "skinview3d": "^3.4.2", diff --git a/package.json b/package.json index b93f806..45422cf 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "aeromc", "productName": "AeroMC", - "version": "1.0.8", + "version": "1.0.9", "description": "AeroMC – Instanz-basierter Minecraft-Launcher (à la MultiMC/Prism)", "homepage": "https://m-viper.de", "launcherWebsite": "https://aeromc.viper.ipv64.net", diff --git a/src/backup.js b/src/backup.js index 686e735..b14118d 100644 --- a/src/backup.js +++ b/src/backup.js @@ -354,6 +354,10 @@ async function restoreGlobalBackup(options) { const settingsFile = path.join(userDataDir, 'settings.json'); const rollbackSettings = path.join(rollbackDir, 'settings.json'); let settingsPreviouslyExisted = false; + // wird erst true, sobald der aktuelle Stand tatsächlich weggesichert wurde - + // vorher darf der Rollback nichts anfassen, sonst löscht ein früher Fehler + // (z. B. ungültiges Archiv) den unveränderten, intakten Originalbestand + let originalMovedAway = false; try { ensureDir(extractDir); @@ -382,6 +386,7 @@ async function restoreGlobalBackup(options) { endPercent: 40, detailPrefix: 'Sichere aktuelle Instanzen', }); + originalMovedAway = true; settingsPreviouslyExisted = fs.existsSync(settingsFile); if (settingsPreviouslyExisted) fs.copyFileSync(settingsFile, rollbackSettings); @@ -414,16 +419,23 @@ async function restoreGlobalBackup(options) { restoredSettings, }; } catch (err) { - try { - if (fs.existsSync(instancesDir)) fs.rmSync(instancesDir, { recursive: true, force: true }); - if (fs.existsSync(rollbackInstances)) fs.cpSync(rollbackInstances, instancesDir, { recursive: true }); - else ensureDir(instancesDir); + // Nur zurückrollen, wenn wir den ursprünglichen Bestand überhaupt schon + // angefasst haben (siehe originalMovedAway oben). Schlägt die + // Wiederherstellung vorher fehl (ungültiges/beschädigtes Archiv o. Ä.), + // ist instancesDir noch der unveränderte Originalbestand - den lassen wir + // dann bewusst in Ruhe, statt ihn zu löschen. + if (originalMovedAway) { + try { + if (fs.existsSync(instancesDir)) fs.rmSync(instancesDir, { recursive: true, force: true }); + if (fs.existsSync(rollbackInstances)) fs.cpSync(rollbackInstances, instancesDir, { recursive: true }); + else ensureDir(instancesDir); - if (includeSettings) { - if (fs.existsSync(rollbackSettings)) fs.copyFileSync(rollbackSettings, settingsFile); - else if (!settingsPreviouslyExisted && fs.existsSync(settingsFile)) fs.rmSync(settingsFile, { force: true }); - } - } catch { /* ignore rollback errors */ } + if (includeSettings) { + if (fs.existsSync(rollbackSettings)) fs.copyFileSync(rollbackSettings, settingsFile); + else if (!settingsPreviouslyExisted && fs.existsSync(settingsFile)) fs.rmSync(settingsFile, { force: true }); + } + } catch { /* ignore rollback errors */ } + } throw err; } finally { try { fs.rmSync(tmp, { recursive: true, force: true }); } catch { /* ignore */ } diff --git a/src/main.js b/src/main.js index 923fb6a..c873b5a 100644 --- a/src/main.js +++ b/src/main.js @@ -269,7 +269,16 @@ function destroyTray() { // Windows-Autostart-Eintrag setzen/entfernen + Tray-Symbol passend ein-/ausblenden function applyAutostart(enabled) { try { - app.setLoginItemSettings({ openAtLogin: !!enabled, args: enabled ? ['--hidden'] : [] }); + // Gleiches Problem wie bei den Desktop-Verknüpfungen (siehe verknuepfungsArgs + // weiter oben): im Entwicklungsmodus zeigt process.execPath nur auf die nackte + // electron.exe, die ohne Pfadangabe ihren eigenen leeren Startbildschirm zeigt + // statt AeroMC zu laden. Zusätzlich: bei der Portable-Fassung zeigt + // process.execPath auf den entpackten Temp-Ordner – der wäre morgen tot, + // deshalb wie bei den Verknüpfungen über verknuepfungsZiel() auflösen. + const args = enabled + ? (app.isPackaged ? ['--hidden'] : [path.join(__dirname, '..'), '--hidden']) + : []; + app.setLoginItemSettings({ openAtLogin: !!enabled, path: verknuepfungsZiel(), args }); } catch { /* z. B. in portabler Umgebung ohne Schreibrechte auf die Registry */ } if (enabled) createTray(); else destroyTray();