← Back to Suite Creator

The User Popup: Warning Users Before a Suite Runs

How the end-user warning popup works — enabling it, linking it to process closures, deferrals, timers, and conditions.

Deployments have a human problem: the moment your suite closes an app to upgrade it, someone might be halfway through unsaved work in that app. The user popup is Suite Creator's answer — a small, branded window shown to the logged-in user before the suite makes any changes, telling them what's about to happen, which of their running apps will be closed, and (optionally) letting them defer the run to a time that suits them.

The user popup warning view

The popup shows:

Enabling it

On the Popups page, tick Enable warning Popup. From there you can write the Deployment and Removal/Rollback messages, set the action text and icon, and use Popup Preview to see a live sample of exactly what users will get — including switching between the Deployment and Removal previews.

The Popups configuration page

Linking to Process Closures

The most useful configuration for upgrades: tick Link to Process Closures on the Popups page. This changes the popup's behaviour in two ways:

  1. The popup only appears when it matters. If none of the processes listed on your Process Closures page are actually running on the device, there is nothing to warn the user about — the popup is skipped entirely and the suite proceeds silently.
  2. The popup shows the user exactly which of their apps will be closed, with each app's real icon and display name (resolved even for Store/MSIX apps), so "save your work" is concrete rather than vague.

Combined with a deferral window, this gives users a genuine chance to finish what they're doing: they see "these apps of yours will be closed", and can either save up and hit Continue, or push the whole install to later.

Deferral: letting users skip the install until later

If Max Delay Days is greater than zero, the popup shows a Later button with the remaining allowance (e.g. "Later (7)"). Choosing it opens a time picker:

The reminder time picker

The user picks a time later that day, and the suite exits without making changes (exit code 1602, so your deployment tool records the run accurately). A scheduled reminder task re-runs the suite at the chosen time, where the same popup appears again and they can defer again — until the allowance runs out:

Timers and unattended edge cases

A popup is only useful if someone is there to see it. These settings (all on the Popups page) control what happens when they aren't:

SettingWhat it controls
TimerMinutes the user has to make a choice. A progress bar counts it down on the popup.
Timer Expire ActionContinue or Skip when the timer runs out with no choice made.
User Logged off actionWhat to do when the suite runs with no one logged in.
Locked Device actionWhat to do when a user is logged in but the screen is locked/asleep — including if it locks during the timer.
ESP actionWhat to do during Windows device initial setup (Autopilot ESP).

Pausing while the user is in a call

Interrupting someone mid-meeting — especially with a popup that's about to close their apps — is exactly the kind of thing this feature exists to avoid. Tick Pause during meeting on the Popups page (on by default) and the suite holds off showing the popup at all while the user's microphone is actively in use.

Conditions: showing the popup only when a script says so

Two optional PowerShell gates run before the popup is shown, and both must pass:

  1. The global popup condition — set by an administrator for every suite built with that install of Suite Creator (see the admin guide).
  2. The per-suite popup condition — tick Set Popup Condition on the Popups page and write a script.

Each script must output only $True (show the popup) or $False (skip the popup and continue the suite). If a script errors, the popup is shown anyway — failing safe, so a broken script can never cause users' apps to be closed without warning.

How it works under the hood

SuiteUserPopup.exe is its own small AOT-compiled Avalonia app, bundled into every built suite (see the developer guide). The elevated SuiteExecutor launches it in the logged-in user's session and reads the outcome back from its exit code: continue (0), device locked (1), error (2), defer (3, with the chosen reminder time on stdout), timer expired (4), or missing logo (5). Everything the popup displays comes from a popconfig.json the Creator writes at build time, plus the logo images bundled next to it.

The meeting-pause check runs the same exe in a separate, headless mode (--CheckMeetingStatus) that never shows any window — it queries Windows' audio session APIs directly for whether any currently-active microphone (not just the system default one - a call app can be pointed at any specific device) has a live session, and exits 0/1/2 for not-in-use/in-use/check-failed. SuiteExecutor runs this the same way it runs the real popup — as the logged-in user, since the Executor itself runs elevated/SYSTEM and has no direct visibility into that user's live audio sessions. When the mic is in use, the recheck itself is driven by a repeating scheduled task (reusing the same --reminder run mode the deferral mechanism uses) rather than the Executor blocking in place, so the deployment tool never sees the suite as still running while it waits.