← 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 a restore that pre-selects the state before NoWinUpdate first changed the PC, so you can flip the switch on Friday evening and flip it back on Monday morning without registry archaeology.

· Updated · 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 must not leave values behind that were never there. So each policy value is saved as it was — absent (null) or present with its number — and on restore an absent value is deleted while a present one is written back: “there was nothing” and “there was NoAutoUpdate=0 explicitly” come back as they were. The key itself is never deleted — an empty policy subkey is harmless. The flag also feeds the backup summary shown in the restore list.

Since version 1.2.0.0, Restore from Backup lets you choose the backup. It lists every readable backup, newest first, each with its local date and a one-line summary of what it would put back (Group Policy, scheduled task, services). The oldest one — the state before NoWinUpdate first changed this PC — is pre-selected, because it is the one that brings Windows Update fully back. Why not the latest? Every Disable saves the state it finds: if Windows switched the services back on and you click Disable a second time, the newest backup already holds a blocking Group Policy and a disabled task, so restoring it would leave Windows Update blocked. The chosen backup is applied through the three layers in order (Group Policy, task, services); Cancel changes nothing. Old backups are never auto-deleted.

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 the Control tab.

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 at the moment of that Disable (every Disable writes its own backup; the oldest one records the key as it was before NoWinUpdate first changed the PC). 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, a value that was absent in the backup (null) is deleted and a value that was present is written back; the key itself is never deleted — an empty policy subkey is harmless. The flag also feeds the backup summary shown in the restore list (“Group Policy: not set (updates allowed)”). The conservative path is always taken: minimum mutation, maximum reversibility.

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

Yes. Since version 1.2.0.0, Restore from Backup opens a list of every backup in backups/, newest first, each with its date and what it would put back. The oldest one — the state before NoWinUpdate first changed this PC — is pre-selected, so a second Disable can no longer leave you restoring a state where Windows Update was already blocked. Pick any line and click Restore (or double-click it); Cancel changes nothing. Old backups are never auto-deleted, so the full history is always there.

Want to use ExpSoft NoWinUpdate?

Get it on Patreon →