Releases: dragonofmercy/web-print-agent
Release list
v0.1.5
Fewer antivirus false positives
Windows Defender flagged previous builds as Trojan:Win32/Sabsik.FL.A!ml, a generic machine-learning verdict it reaches for on unsigned executables. Two things in the build were feeding it, and both are gone:
- No more single-file bundle. The self-extracting executable read as a packed binary. The app now ships as a normal folder, which Velopack packages anyway.
- SumatraPDF is no longer extracted at runtime. It used to be embedded in
PrintAgent.exe, written to%APPDATA%\PrintAgent\bin\on startup, then launched - the classic "dropper" pattern. It now ships as a plain file next toPrintAgent.exeand keeps its own valid Authenticode signature.
Upgrading from 0.1.4 or earlier removes the leftover %APPDATA%\PrintAgent\bin\ folder on first launch.
This does not make the installer clean everywhere. PrintAgent-win-Setup.exe is still unsigned and has no SmartScreen reputation, so you may still see a warning. If your antivirus flags it, it is a false positive - the source is public and the build is reproducible.
Updates are now full downloads
Releases no longer ship delta packages. Auto-update still works, but each update downloads the complete payload instead of a small patch.
Nothing else changed
No API, protocol, or client behaviour changes. The JavaScript client is unchanged apart from its reported version.
v0.1.4
Web Print Agent 0.1.4
Hardening and robustness release from a full code review (11 fixes), plus one new feature.
New
printers.changedserver notification - the agent now watches for printer hot-plug (WMI) and broadcastsprinters.changedto paired clients, which can refresh their printer list automatically. (The TypeScript client already supports this event.)
Fixes & hardening
- Serialize WebSocket sends per connection (no interleaved frames) and fix connection registration ordering.
- Coalesce concurrent pairing prompts per origin (no duplicate dialogs), decoupled from the first caller's cancellation.
- Regenerate the certificate automatically when the DPAPI-protected PFX password cannot be read.
- Stricter JSON type validation for print options (wrong types now rejected as invalid params).
- Add the JSON-RPC
-32603Internal Error code and propagate cancellation correctly. - Full
%APPDATA%\PrintAgentcleanup on uninstall (reparse-point safe). - User-only NTFS ACL on the app-data directory (SID-based, inheritance disabled, non-fatal on failure).
- Observe and survive background auto-update failures instead of silently dropping them.
- Cheaper printer-existence check on the print hot path.
- Event-based (no busy-wait polling) job-completion wait.
Update
Existing 0.1.3 installs update automatically via a small delta package. New installs: download PrintAgent-win-Setup.exe.
Note: binaries are not code-signed yet (SmartScreen may warn "unknown publisher").
v0.1.3
What's new in 0.1.3
- Runtime auto-update. The agent now checks GitHub Releases at startup and every 6 hours, downloads new versions in the background, and shows a Windows toast to restart now - or applies the update silently at the next launch. Updates never interrupt an in-progress print job.
- Tray menu: Check for updates... for an on-demand check.
- Kill switch: set
"AutoUpdate": falsein%APPDATA%\PrintAgent\config.jsonto freeze the version on a machine.
This is the first build to ship the auto-updater itself, so existing 0.1.2 installs will not update automatically - install 0.1.3 once, and future versions arrive on their own.
Note: this build is unsigned; Windows SmartScreen may warn about an unknown publisher.
v0.1.2
Web Print Agent v0.1.2
Patch release that removes the automatic startup at system boot.
Changes
- No more auto-start at logon. PrintAgent no longer registers a
PrintAgent.lnkshortcut in the user's Startup folder on first install. Users must launch the agent manually (tray icon from Start Menu, or run the executable). The shortcut left behind by previous versions is automatically cleaned up the next time the agent is launched, and again on uninstall as a safety net.
Upgrade notes
Existing 0.1.0 / 0.1.1 installations update normally via Velopack. After the update, the legacy Startup shortcut is removed at next launch -- no action required.
v0.1.1
Web Print Agent v0.1.1
Maintenance release focused on security hardening and a couple of small UX additions on top of the V0.1 baseline.
Security hardening
- Thread-safe job-event publisher. Replaced a racy
SendAsyncmutation inWebSocketEndpointwith per-connection subscriptions backed by a
ConcurrentDictionary. Subscribers are now isolated: a faulty handler can no longer cause cross-connection event loss or worker corruption. printerNamewhitelisted against installed printers. Names starting with-or/are rejected outright, and unknown names returnPrinterNotFound.
Closes a SumatraPDF flag-injection vector for paired origins. Comparison is case-insensitive to match Windows spooler semantics.paperSizeformat validation. Restricted to[A-Za-z0-9 _\-#().]{1,32}with no leading dash. Blocks thepaper=A4,2x,monochromestyle of
-print-settingsinjection while still accepting standard Windows paper names likeEnvelope #10andB4 (JIS).- TLS certificate hardening. Lifetime shortened from 10 years to ~13 months, with proactive renewal at startup when the cert expires within 30 days. The
thumbprint is persisted inconfig.jsonso uninstall removes the exact cert it installed (no more 5-year heuristic). Renewal also untrusts the previous cert so
the user'sCurrentUser\Rootstore stays clean. PFX and DPAPI password file are now wiped on uninstall. - Denial-of-service guards. New
PrintAgentOptionsknobs:MaxQueuedJobs=100(bounded job channel with backpressure),MaxActiveConnections=32(extra
WebSocket connections get HTTP 503),MaxRunSeconds=60(SumatraPDF child process is killed if it hangs). - Information-leak and spoofing fixes. Generic JSON-RPC errors instead of
InternalError: <ex.Message>; SumatraPDF stderr is sanitized (control chars
stripped, capped at 256 chars); the pairing prompt converts the requesting host to Punycode and strips bidi/format codepoints, blocking IDN-homoglyph and
right-to-left override spoofing. - Per-session single-instance mutex. Switched from
Global\toLocal\so other users on the same machine (RDP, fast user switch) can run their own
instance and a malicious cross-session process can no longer DoS the agent. - SHA-256 verification of embedded SumatraPDF. The on-disk
bin\SumatraPDF.exeis now compared by content hash against the embedded resource at startup,
replacing the previous size-only check.
Features
- About dialog in the tray menu with product name, version, and copyright (EN + FR).
- Unified version helper (
AppInfo.Version). Startup log,agent.helloRPC response, and the new About dialog all read from a single helper that returns
the SemVer 3-part form (0.1.1) sourced from<Version>in the csproj — no more0.1.0.0/0.0.1.0confusion.