fix(theseus/updater): --updated flag so silent install actually reinstalls
Users reported Theseus being uninstalled by the auto-updater and never
coming back. Reproduced on 0.3.31:
The 'Install & restart' handler was spawning the NSIS setup with
just [\"/S\"]. Our config is oneClick:false + perMachine:false +
allowToChangeInstallationDirectory:true, so NSIS in silent mode:
1. runs the old uninstaller (wipes install dir + registry path)
2. hits the install phase, which in wizard mode expects UI to pick
the install directory
3. silent mode has no UI, registry path is gone → exits without
installing anything
Result: browser gone, nothing left, no error surfaced to the user.
Fix: pass --updated alongside /S. electron-builder's NSIS template
treats --updated as 'this is an auto-update, reuse the existing
install directory from registry, don't rerun the uninstaller'.
--force-run relaunches the app after install.
Users stuck on 0.3.31 need to manually install 0.3.32 once (from
dl.silentmode.st) — the auto-updater in 0.3.31 will not recover on
its own. Their %APPDATA%\theseus-navigator profile is untouched by
the uninstall so vault, addons and settings survive the reinstall.
This commit is contained in:
parent
034d30895f
commit
e73b29010e
1 changed files with 17 additions and 6 deletions
23
main.js
23
main.js
|
|
@ -3073,15 +3073,26 @@ ipcMain.handle("recheck-update", async () => {
|
||||||
return { updateAvailable, currentVersion: app.getVersion() };
|
return { updateAvailable, currentVersion: app.getVersion() };
|
||||||
});
|
});
|
||||||
// One-click "Install & restart". Requires the silent pre-fetch to have
|
// One-click "Install & restart". Requires the silent pre-fetch to have
|
||||||
// finished (updateDownloadState === "ready"). Launches the setup with /S
|
// finished (updateDownloadState === "ready").
|
||||||
// (skips the wizard; our nsis/installer.nsh's Ariadne prompt is bypassed
|
//
|
||||||
// too on upgrades because the Ariadne registry key is already present),
|
// CRITICAL — spawning the setup with just ["/S"] uninstalls Theseus but
|
||||||
// then quits Theseus so the installer can overwrite it. When the installer
|
// then FAILS to reinstall on our config (oneClick:false + perMachine:false
|
||||||
// finishes, the user re-launches Theseus and lands on the new version.
|
// + allowToChangeInstallationDirectory:true). In wizard mode NSIS expects
|
||||||
|
// UI for the install-path picker, and in silent mode with the registry
|
||||||
|
// path wiped by the just-run uninstaller, it exits without installing.
|
||||||
|
// Users hit this in 0.3.31: browser gone, nothing left.
|
||||||
|
//
|
||||||
|
// Fix: pass --updated alongside /S. electron-builder's NSIS template
|
||||||
|
// treats --updated as "this is an auto-update, reuse the existing install
|
||||||
|
// directory from registry, don't re-run the uninstaller". --force-run
|
||||||
|
// tells it to relaunch the app after install so the user isn't stranded
|
||||||
|
// even if the wizard-mode path somehow trips again.
|
||||||
ipcMain.handle("install-update-now", () => {
|
ipcMain.handle("install-update-now", () => {
|
||||||
if (updateDownloadState !== "ready" || !updateDownloadPath) return false;
|
if (updateDownloadState !== "ready" || !updateDownloadPath) return false;
|
||||||
try {
|
try {
|
||||||
const p = spawn(updateDownloadPath, ["/S"], { detached: true, stdio: "ignore" });
|
const p = spawn(updateDownloadPath,
|
||||||
|
["--updated", "/S", "--force-run"],
|
||||||
|
{ detached: true, stdio: "ignore" });
|
||||||
p.unref();
|
p.unref();
|
||||||
} catch (e) { console.warn("update spawn failed:", e?.message); return false; }
|
} catch (e) { console.warn("update spawn failed:", e?.message); return false; }
|
||||||
// Give the child a moment to inherit our arguments before we exit.
|
// Give the child a moment to inherit our arguments before we exit.
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue