The installer
The installer is an Inno Setup 6 script, installer/JBrowser.iss,
compiled by tools\build_installer.ps1, which passes in the version and folders (/D…) and then writes
JBrowser-Setup-<version>.exe.sha256 in sha256sum format (<hash> <file name>).
What it does#
| Installs to | %LOCALAPPDATA%\Programs\JBrowser, for the current user, without an administrator prompt (PrivilegesRequired=lowest) and without asking "for me or for all users". /ALLUSERS on the command line installs to Program Files. |
| Shortcuts | Start menu, and an optional desktop icon (the desktopicon task) |
| Browser registration | The browser task (on by default) registers JBrowser under StartMenuInternet and RegisteredApplications with http, https, .htm and .html handlers, so it can be chosen in Settings → Apps → Default apps. Windows never lets an installer make itself the default. |
| Upgrades | Installs over the previous version (same AppId), removing the old _internal folder first so no stale Qt files remain |
| Silent mode | /SILENT or /VERYSILENT. JBrowser's own /RELAUNCH switch starts the new version at the end (the updater uses it) |
| Uninstall | From Apps & features; asks whether to delete the user's data too (default: keep). A silent uninstall always keeps it. |
| Requirements | 64-bit Windows 10 1809 or newer (MinVersion=10.0.17763) |
A running JBrowser#
Setup uses the Windows Restart Manager (CloseApplications=force). The Preparing to Install page offers to
close JBrowser; Windows then asks it to close, JBrowser saves its session and exits in order
(when Windows closes JBrowser), and any leftover
web-engine processes are ended. The last page offers to start JBrowser again. Silent installs close it automatically.
The uninstaller still refuses to run while JBrowser is open: it checks the JBrowser.AppMutex mutex the app holds, so
no files are left behind.
Don't bring back AppMutex= in [Setup]
That is what 1.4.0 did: Setup stopped with "JBrowser is currently running" and no way to continue.
Editing the script#
- Never change
AppId. Windows recognises JBrowser by it; a new value installs a second copy instead of upgrading. - The output name
JBrowser-Setup-<version>.exemust keep that form: the updater looks for it (INSTALLER_REin services/updater.py). AppVersion,SourceDirandOutputDircome from the build script; the#ifndefdefaults only matter when compiling by hand..issfiles use CRLF line endings (see.editorconfig).
Testing without touching a real installation#
A test install with the real AppId replaces the uninstall entry and shortcuts of the JBrowser you use every day.
Compile a copy of the script with a different AppId and AppName, install that into a temporary folder, try it,
and uninstall it:
$dir = "$env:TEMP\jb-install-test"
.\JBrowser-Test-Setup.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART /DIR="$dir" /TASKS=""
& "$dir\JBrowser.exe" --profile-dir "$env:TEMP\jb-install-profile"
& "$dir\unins000.exe" /VERYSILENT /SUPPRESSMSGBOXES
/TASKS="" skips the desktop icon and the browser registration.