v1.6.0
What's Changed
Critical Bug Fixes
- Fix process output deadlocks —
ServiceInstallerandStartupTaskManagernow use async stdout/stderr reads beforeWaitForExit, preventing deadlocks when pipe buffers fill - Fix unread redirected streams —
RestoreManager.RunPowerCfgno longer redirects streams it doesn't read - Fix legal notice backup/restore — backup and restore now use the correct registry hive (
Policies\System) matching where setup actually clears the values, with migration for existing backups - Fix service buttons stuck disabled — service Start/Stop/Restart buttons no longer remain permanently disabled after any operation completes
- Fix locale-dependent powercfg parsing — compliance checks and settings backup now use position-based hex parsing instead of matching English labels, working correctly on all Windows language packs
Robustness Improvements
- Cross-process settings safety —
AppSettings.Save()uses a named mutex with proper timeout handling; writes are skipped (not corrupted) if the lock can't be acquired - Corrupt settings preservation — corrupt
settings.jsonis preserved as.corruptfor diagnostics instead of being silently replaced with defaults - DPAPI password protection — saved encrypted passwords are no longer erased when DPAPI decryption fails (e.g., different user profile context)
- Console redirection race fix — timer-triggered update checks are skipped while compliance checks hold Console.Out/Error redirected
- Public desktop shortcut — desktop shortcut now uses the all-users desktop, preventing mismatch when setup runs under a different admin account
- Startup task user warning — warns when the process user doesn't match the configured autologon user
Code Quality
- Extracted shared
ConsoleOutputhelper (deduplicated from 6 files) - Extracted shared
IsVirtualAdaptermethod (deduplicated from 3 files) - Extracted shared
IsRunningAsAdminandFormatBytesutilities - All configurator failure counters are now
[ThreadStatic]for thread safety - Added
usingstatements for disposableStringWriter/TeeTextWriter - New
Helpers.ParsePowerCfgSettingValuesfor locale-independent power setting parsing
Full Changelog: v1.5.2...v1.6.0