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, .html and .pdf handlers (JBrowserURL, JBrowserHTML, New in 2.0.1 JBrowserPDF), so it can be chosen in Settings → Apps → Default apps, and adds itself to the Open with lists of those file types (OpenWithProgids). Windows never lets an installer make itself the default; JBrowser's Settings › Default apps page shows the current choice and opens Windows' page. |
| 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.