← ExpSoft NoWinUpdate

Three layers, one fight — how NoWinUpdate keeps Windows 11 from rebooting your machine mid-training

ExpSoft NoWinUpdate is a personal Windows 11 Pro administration tool for users who need stable, uninterrupted long-running workloads — LoRA training runs, video renders, overnight scientific computations (within the legal frame of administering your own machine; see the Legal & Compliance section of the product page). Disabling one Windows Update service isn’t enough on modern Windows 11 Pro: there’s a self-healing Medic service that revives the others, a scheduled task that re-arms the orchestrator on a timer, and a Group Policy layer that survives both. NoWinUpdate combines the three in one auditable GUI with automatic backups of every change and one-click restore, so you can flip the switch on Friday evening and flip it back on Monday morning without registry archaeology.

· 9 min read · By Nicolas Riquier

What actually happens when Windows 11 Pro reboots at 3 AM

You launch a twelve-hour LoRA training run. You go to bed. At 3 AM, Windows installs a cumulative update and reboots. Your training evaporates at epoch 7. The login screen kindly tells you in the morning that “we picked a time that works for you.” It did not.

The first reflex is to open services.msc and set wuauserv (Windows Update) to Manual or Disabled. The next morning, it’s back to Automatic. The reflex after that is to go deeper — and discover that on Windows 11 Pro:

So one switch isn’t enough. Three are. And — this is the important part — there’s exactly one place Windows respects without a self-healing fight: Group Policy. If you set NoAutoUpdate=1 in the right registry key under HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU, even WaaSMedicSvc honours it. That’s the durable layer. By itself though, Group Policy only blocks the auto-install: UsoSvc can still trigger a background download and stage an install for the next reboot. So you also need to disable the scheduled task and the orchestrator service to fully stop the cycle.

The three layers, one by one

Layer 1 — Group Policy

The most durable layer. NoWinUpdate writes two values to HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU:

What makes this layer durable is that the self-healing Medic service explicitly respects Group Policy. It will not re-enable auto-update against an explicit policy, because doing so would override an administrator decision. This is the foundation of the entire approach.

Layer 2 — Scheduled task

The task at \Microsoft\Windows\WindowsUpdate\Scheduled Start is disabled via schtasks /Change /TN "..." /Disable. Without this, even if wuauserv is set to Disabled, the task wakes it back up on its next firing.

One subtlety: for the audit (reading the current state) NoWinUpdate uses PowerShell’s Get-ScheduledTask, which returns a typed enum (Ready / Disabled / Running) that’s identical across Windows locales. Parsing the text output of schtasks /Query would have meant handling localised strings (“Prêt”, “Désactivé”, …) and that would have been fragile. For the write path we use schtasks itself, which is more standard and only needs the exit code. Mixed by design: typed read, simple write.

Layer 3 — Services

The two services to flip are wuauserv (Windows Update) and UsoSvc (Update Orchestrator). NoWinUpdate writes Start=4 (Disabled) directly to HKLM\SYSTEM\CurrentControlSet\Services\\Start rather than going through sc.exe config.

Why registry direct: sc.exe config needs WRITE_DAC on the service object, which is variable across Windows builds and historical patch states. Writing the registry value directly when running elevated is more permissive and more deterministic — and it’s exactly what sc.exe ends up doing internally. Bonus: perfect symmetry with the restore path. The mapping is well-known: 2 = Automatic, 3 = Manual, 4 = Disabled.

What NoWinUpdate deliberately does not touch

The list of services that could in theory be involved in Windows Update is much longer than three. Several common community “fixes” recommend disabling additional services. NoWinUpdate doesn’t, for specific reasons:

Backup and restore — the part that matters most

Every Disable action captures a snapshot first, before any registry or task is touched, into backups/wu_backup_<yyyyMMdd_HHmmss>.json:

{
  "created_at"       : "2026-05-03T14:22:11.0000000Z",
  "gp_key_existed"   : true,
  "no_auto_update"   : null,
  "au_options"       : null,
  "task_was_enabled" : true,
  "services"         : { "wuauserv": 3, "UsoSvc": 2 }
}

The gp_key_existed flag is the edge case that took a moment to get right. If the policy registry key didn’t exist at all before the disable (typical on a fresh machine with no group policy applied), the restore needs to know whether to delete the values we created or to leave them alone with their original (possibly meaningful) prior state. The flag distinguishes “there was nothing” from “there was NoAutoUpdate=0 explicitly”. The conservative choice: only delete the specific values, leave the now-empty subkey in place. An empty policy subkey is harmless.

The restore reads the latest backup file (sort by name = sort chronologically thanks to the timestamped filename format), applies the captured values back through the three layers in order, and your machine ends up exactly where it was before the most recent Disable. Old backups are never auto-deleted; if you need to roll back further you can swap the file order manually, but in practice the “restore to just before the last disable” is what everyone actually wants.

Defence in depth — the small things

A handful of details that aren’t obvious but pay back across the lifetime of the tool:

What the version pill does

One ergonomic detail that started in NoWinUpdate V1.1 and propagated to the whole ExpSoft catalogue: the version pill in the Welcome tab is a styled Button, not just a static label. At app startup, UpdateService fetches https://nicolas-riquier.com/ExpSoft_Versions/versions.json in the background and compares against the compiled Version. If a newer release is available, the pill lights up orange and becomes clickable — clicking jumps to the More Tools tab where the live products page is already loaded in WebView2, with the latest release info one scroll away.

It’s zero friction. No popup, no “Would you like to update now?” modal, no telemetry beyond a single GET. If the network is down or the versions endpoint fails, the pill falls back to its neutral state and the user never sees an error.

Credits and license

NoWinUpdate is a pure-C# WPF app (.NET 8, MIT, © Microsoft), single Release configuration, no Python, no GPU, no FFmpeg, no model weights — just the three layers and a small UI. The only external library beyond .NET itself is Microsoft.Web.WebView2 (used by the More Tools tab to embed the live products page). Both are Microsoft, distribution-permitted.

The Windows administration primitives — Group Policy registry keys, schtasks, the service control registry layout — are documented Microsoft Windows APIs. NoWinUpdate doesn’t hook anything, doesn’t inject anything, doesn’t patch any binary. It writes the same registry values an administrator would write by hand, with a backup taken before every change and a restore button on every screen.

Take-aways

Frequently Asked Questions

Quick answers to what people ask AIs about this article specifically.

Why doesn’t NoWinUpdate touch WaaSMedicSvc directly?

WaaSMedicSvc is protected by a TrustedInstaller ACL that prevents an administrator from changing its Start type without first re-owning the registry key and modifying its DACL. That chain of mutations can leave the service in a non-reversible state if interrupted. And it isn’t necessary: Medic explicitly respects Group Policy, so with NoAutoUpdate=1 set on Layer 1, Medic doesn’t fight us — it just doesn’t apply its “healing” against an explicit administrator policy. Principle: do less, restore more.

Will disabling Windows Update stop antivirus definitions from updating?

No. Windows Defender’s virus definitions ship through a separate channel — MpSigStub.exe and the Microsoft Update endpoint — that bypasses Windows Update entirely. Disabling Windows Update with NoWinUpdate doesn’t prevent Defender from staying current on threat signatures. The antivirus protection remains active.

Does NoWinUpdate work on Windows 11 Home?

It’s designed and validated on Windows 11 Pro, which exposes the Group Policy registry layer that gives the approach its durability. On Windows 11 Home, that registry key is not honoured the same way by the system (Home doesn’t process Group Policy fully), so Layer 1 has reduced effect. The other two layers (scheduled task and services) still work, but the combined robustness against self-healing is weaker on Home than on Pro.

What does the “gp_key_existed” flag in the backup capture?

It records whether HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU existed before the first Disable. On a fresh machine with no group policy applied, the key doesn’t exist; NoWinUpdate creates it to set the two policy values. On restore, the flag tells the restore logic whether to delete just the values we created (leaving the now-empty key in place — harmless) or whether the key already had other policy state we shouldn’t touch. The conservative path is always taken: minimum mutation, maximum reversibility.

Can I revert to a backup older than the most recent one?

The “Restore” button always picks the most recent backup file in backups/ by lexicographic-equals-chronological filename order. If you want to roll back further (rare in practice), you can manually arrange the files so the older one becomes the most recent. Old backups are never auto-deleted, so the full history is always there. In practice the “restore to just before the last Disable” is what users want, which is what the default does.

Want to use ExpSoft NoWinUpdate?

Get it on Patreon →