“New Version Loaded” Popup

The small PSI.Common.Forms.NewVersionPopUp dialog many desktop apps show on launch after Pro Update installs a new build. It is not tied to real release notes and not gated by version — a per-user “don’t show again” flag decides whether it appears at all.


Overview

MetricValue
ComponentPSI.Common.Forms.NewVersionPopUp (shared WPF window)
SourcePSI.Shared/trunk/PSI.Common.Forms/NewVersionPopUp.xaml(.cs)
Invoked fromEach app’s own MainWindow.Window_Loaded — not triggered by Pro Update itself
GateProperties.Settings.Default.DoNotShowAgain (per-app, per-user, per-machine) — not tied to app version
Message sourceA hardcoded string literal per app, manually written by whoever last touched that Window_Loaded handler
Participating apps20+ (OpenPurchaseOrderInq, POMaintenance, InventoryManager, NCNManager, PartManager, Redbook, WorkOrderManager, and others that construct NewVersionPopUp)

How it fires

Each app wires this itself in its main window — it’s not something Pro Update triggers directly:

this.Loaded += Window_Loaded;
...
private void Window_Loaded(object sender, RoutedEventArgs e)
{
    if (!Properties.Settings.Default.DoNotShowAgain)
    {
        var versionInfo = AssemblyInfo.Version;
        string tmpMessage = "..."; // hardcoded per app, per developer, per release
        var nv = new PSI.Common.Forms.NewVersionPopUp(appName, releaseNotesUrl, tmpMessage, versionInfo.ToString());
        nv.ShowDialog();
 
        if (nv._doNotShowAgain)
        {
            Properties.Settings.Default.DoNotShowAgain = true;
            Properties.Settings.Default.Save();
        }
    }
}

The dialog’s own “Do not show this again” checkbox defaults to checked (IsChecked="True" in NewVersionPopUp.xaml) — a single click of OK in the default state suppresses it going forward for that user/machine.


Two known design gaps

1. The message is hardcoded, not real release notes

tmpMessage is a plain string literal the developer types by hand describing whatever they just changed — it isn’t pulled from the release_notes input passed to release.yml’s workflow dispatch, and it isn’t read from the GitHub Release body. If nobody updates it on a later release, users see stale or flatly wrong content.

This actually happened: PSI.OpenPurchaseOrderInq.View’s message described a Feb 2026 “Load My Department’s Purchase Request” change all the way through the 2026-07-08 CSM-receipt-notification beta — nobody had touched it in the five months between (fixed in PR #202).

2. Gated by “seen it once, ever,” not by version

DoNotShowAgain is a single boolean, not “which version’s notes have I seen.” Once a user dismisses it, they never see it again for any future release, ever — not until the setting is cleared (or they log into a machine/profile that’s never dismissed it before). Combined with gap #1, the practical effect is: most users see this dialog exactly once, with content describing whatever was true the first time they happened to see it — which may bear no relation to what actually shipped since.


Why it can appear twice in one sitting

Not a bug in the dialog itself — confirmed there’s only one Loaded subscription and one window instance per app launch. The likely explanation is Pro Update’s own update flow: on detecting a new version, it closes the running app, copies files, and restarts it (see “How Updates Work → Application Updates” on the Pro Update page). If a user also manually launches the app around the same time — before the first process’s DoNotShowAgain save has landed — each process is an independent instance with its own Window_Loaded, so each shows the popup once. Two processes in quick succession, two popups, in the same sitting.


  • Pro Update — the updater that overlay-copies binaries and restarts apps, which is what puts this dialog’s launch-time check in play
  • AFTEC Email Notifications — a completely unrelated notification system (email, not an in-app popup) — don’t confuse the two
  • Onboard New App — if wiring NewVersionPopUp into a new app, know the two gaps above before copy-pasting the pattern; at minimum, remember to actually update tmpMessage on every release that touches this window

Last updated: July 8, 2026 Source: PSI.Common.Forms.NewVersionPopUp + PSI.OpenPurchaseOrderInq.View.Views.OpenPOInquiry.xaml.cs, investigated live while diagnosing a stale/duplicate popup report from beta testing of PR #199 (fix shipped in PR #202)