Repository navigation
Releases
Releases · TIANLI0/FluentSetup
FluentSetup 1.3.0
Added
- Apps & features Modify ("Change " page) checks the package's update source and, when a newer version is
published, shows "A newer version (x) is available" with an Update button (runs
uninstall.exe /install-update /passive). Both front ends, all 11 languages.
Changed
- An unsigned (or untrusted) setup no longer shows "Unknown publisher" on the first page; a verified signature still
shows "Verified publisher: ". Windows already warns about unsigned files in SmartScreen and UAC.
FluentSetup 1.2.1
Fixed
- Texts and licenses a package provides per language fall back to the same language in another region before English
(Traditional Chinese useszh-TW/zh-HK, thenzh-CN;de-ATusesde-DE). With the Traditional Chinese
installer table added in 1.2.0, packages with onlyzh-CNlabels showed English to Traditional Chinese users. - Uninstall removes the
HKCU\Software\Classes\AppUserModelId\<id>key an unpackaged app registers for the
AppUserModelIDs the package declares. uninstall.removeRegistryKeyslogs the keys it removed (it removed them but reported a failure).fluentsetup <command> --helpprints the usage instead of an error.
Added
uses: TIANLI0/FluentSetup@latestfollows the newest release (the release workflow moves thelatesttag along
withv1).FLUENTSETUP_CACHEmoves the cache of bundled Microsoft installers, for isolated builds.- Releases push the NuGet packages with nuget.org Trusted Publishing (no stored API key); a manual
nuget-onlyrun
pushes the packages of an existing release.
FluentSetup 1.2.0
Added
- Desktop integration, all declarative and removed on uninstall:
associations(file types with icon, open command,
"Open with" and Default apps entry),protocols(URL schemes),shortcuts(more shortcuts: other programs,
arguments, desktop or Startup folder, per-shortcut AppUserModelID),app.appUserModelId/toastActivatorClsidon
the app's own shortcuts,registryvalues belowSoftware\<Vendor>,environmentvariables,install.appPaths,
Windowsservicesandfirewallrules (per-machine installs). Registry changes are journaled and rolled back with
the files; updates remove what a version no longer declares. inputs: a Settings page in both interfaces (text, password, choice; required and pattern checks; remembered for
updates) and/input id=value, used as{Input:id}in registry values, environment variables, arguments and
configFiles(JSON or INI files updated in place). Placeholders{InstallDir},{MainExecutable},{AppVersion},
{AppId}.- Modify and Repair: Apps & features "Modify" runs
uninstall.exe /modify(shortcuts, options and inputs can be
changed later; the steps of options that were turned on run) and offers Repair (installed files checked against the
install record; a damaged installation is reinstalled from the original Setup.exe or the update source).
/modifyand/repairwork silently too. - Prerequisites:
requirements.vcRedist(Visual C++ 2015-2022 v14) andrequirements.custom(detected by registry
value or file)."auto": "bundle"stores Microsoft's official installer in Setup.exe at build time (downloaded once a
day, signature checked, never installed into the app folder);"auto": "download"lets setup download it and accept
it by its Microsoft signature.download.signerpins any vendor download to its publisher. - Restart Manager (
install.restartManager): programs that hold the app's files are closed before an update or
uninstall and restarted afterwards; the first page lists them.install.lockedFiles: "reboot"replaces files that
are still in use at the next restart (per-machine; exit code 3010). - Signing:
signing.signUninstaller(on by default) — the uninstall.exe setup writes carries the package's signature.
Signing providers: signtool with a certificate, Azure Trusted Signing, or any signing command (also on Linux and
macOS). The first page shows "Verified publisher: " or "Unknown publisher". ui.banner: an image at the top of the first page in both interfaces.- Installer languages: Traditional Chinese, German, French, Spanish, Portuguese (Brazil), Russian and Italian, in
addition to English, Simplified Chinese, Japanese and Korean. - CLI:
fluentsetup import <setup.iss|script.nsi>turns an Inno Setup or NSIS script into a project plus a migration
report;fluentsetup wingetwrites winget manifests for a built Setup.exe;fluentsetup versions <webview2|windowsappruntime|dotnet|vcredist>lists current versions from Microsoft;build --refresh-installers. - NuGet packages:
FluentSetup.Builder.Core(library),FluentSetup.Cli(.NET tool) andFluentSetup.MSBuild
(dotnet publishproduces Setup.exe). The CLI also builds installers on Linux and macOS
(fluentsetup-<version>-linux-x64.tar.gz). - Builder: pages for every new setting, version pickers filled from Microsoft (WebView2, Windows App SDK, .NET, VC++),
and a preview with the banner, publisher line and Settings page. - Release assets carry the ARM64 installer runtime too (
output.architecture: "arm64"/--arch arm64now work with
the released CLI and the GitHub Action). CI builds ARM64 on every push and runs the native tests and the
end-to-end installs on an ARM64 runner.
Changed
- A rollback that cannot undo every step keeps only the remaining steps in its journal, so the next run never undoes a
step twice (which could delete a file the first rollback had restored); transient file locks are retried. - Revoked or explicitly distrusted signatures are refused (security gap G5). Processes an action leaves running end
with it (G8). Duplicate JSON keys are refused (G14). The single-instance lock fails closed (G7). Test hooks only work
in packages built for FluentSetup's own tests (G11). The PFX password no longer appears on signtool's command line (G9). - The Windows App SDK version accepts 10.x and later. UI tests must pass in CI.
- An elevated Setup.exe with UAC turned off (or as the built-in Administrator) now starts the app after installing
even when no desktop shell is running, for example on a build server; with UAC on it still never starts it elevated.
FluentSetup 1.1.0
Added
- Built-in updates for packaged apps. A project
updatesection names the source (githubreleases, or a JSON
feed); the installeduninstall.exethen understands/check-update(exit code 18 = a newer version is
published, one JSON line on stdout) and/install-update(a small window: check, ask, download with progress;
/passiveand/quietask nothing). The download must come over https, match the published SHA-256 (GitHub's asset
digest and/or a checksums file such asSHA256SUMS.txt, or the feed's), be a FluentSetup package of the same app
id and architecture with exactly the advertised, newer version, and carry the signatureupdate.signerpins. The
new Setup.exe then runs with/passiveor/quietand updates like any other upgrade (journaled, rolled back on
failure, closes and with/relaunchrestarts the app). - Exit codes 18 (
UpdateAvailable) and 19 (UpdateFailed); validation codes FS1701–FS1710. - Builder: "Built-in updates" on the Upgrades page.
- FluentSetup's own installation has an update source, so its
uninstall.exe /install-updateworks too.
Changed
- Builder: the overview shows the publisher and version with
$(Name)variables replaced.
FluentSetup 1.0.1
Fixed
- GitHub Action: on PowerShell 7 the download of
SHA256SUMS.txtwas read as bytes, souses: TIANLI0/FluentSetup@v1.0.0
stopped with "SHA256SUMS.txt has no entry". CI now runs the action against the latest release.
FluentSetup 1.0.0
First public release.
Installer runtime (Setup.exe)
- Native C++20 bootstrapper with a statically linked VC runtime and a built-in zstd decoder: no .NET, VC++
redistributable, WebView2 or network access needed at install time. Under 1 MiB of overhead for a typical app. - WinUI 3 front end in the style of the Windows App Installer, with a Win32 fallback that has the same layout and
takes over without restarting anything. English, Simplified Chinese, Japanese and Korean built in; any other language
from the package. Light, dark and high-contrast themes, per-monitor DPI, UI Automation. - Per-user or per-machine installs, upgrade, reinstall, downgrade protection, Apps & features registration, shortcuts,
a self-removinguninstall.exe. A write-ahead journal and backups give byte-for-byte rollback on failure or cancel. - Per-file SHA-256 and Authenticode checks; per-machine work only in a separately elevated worker that installs its
own embedded package; unsafe install paths refused. - Prerequisites with version checks (.NET Framework, .NET runtimes, WebView2, Windows App Runtime), installed from a
bundled installer or a verified https download. - Declarative extensions: close running processes (or ask the app to exit), options and required components,
actions from the app's own files with fallbacks, NGen, PATH, uninstall cleanup (scheduled tasks, Run values,
shortcuts, data, registry keys, changes the app made with administrator rights), user data the user decides about. - Variants: one package can carry a self-contained and a framework-dependent build; shared files are stored once.
Replacing Inno Setup and NSIS installers
- Adopts an existing installation by its uninstall key (
adoptExistingInstall,legacyUninstallKeys) and keeps its
folder; upgrades pre-fill the choices an Inno Setup install recorded. - Understands the command lines in-app updaters already use: Inno Setup
/SILENT(progress window only, closes after
success),/VERYSILENT,/DIR=,/LOG=,/TASKS=,/RELAUNCH=1, and NSIS/S,/D=,/UPDATE. - A quiet per-machine update started without administrator rights shows the UAC prompt instead of failing.
install.cleanup.removeFilesremoves the old uninstaller (unins000.exe),install.startMenuFolderkeeps a Start
menu folder,options[].detectupdates an app-managed autostart in its current state,options[].quietDefault
keeps scripted first installs from doing what a checkbox offers.{InstallDir}\…in uninstall data paths for logs and caches the app writes into its own folder.
Building packages
fluentsetupCLI:build,validate --json(codes and field paths),inspect --verify,init,locale add,
guide(the complete authoring guide, also for AI tools) andschema.$(Name)variables in the project file, set from CI withfluentsetup build -D Version=1.2.3.- WinUI 3 Builder app that edits every setting of the project file, with live validation, file preview, installer
preview, build history and package inspection. - GitHub Action:
uses: TIANLI0/FluentSetup@v1installs the CLI on a Windows runner. - Updates of FluentSetup itself: the Builder checks GitHub Releases once a day (can be turned off in Settings) and
installs a new version with a progress window, then opens again;fluentsetup update [--check]on the command line.
The download must matchSHA256SUMS.txtand GitHub's own digest.