Office is stuck on an old build, or a bad update needs rolling back
Office is not taking updates, or an update has broken something and the previous build is needed back. Both are handled by the Click-to-Run client from the command line, which is considerably more reliable than the Update Now button.
What you see
File → Account → Update Options shows an old version and Update Now does nothing, or reports it is up to date when it plainly is not. Alternatively, a feature that worked last week has stopped and the version number changed in between.
What is actually wrong
Click-to-Run updates on a channel, and the channel decides which builds a machine is even offered. Updates can be disabled by policy, the channel can be set somewhere nobody remembers, or the update task can be failing quietly. Rolling back is supported but only to a build that is still on the content network — roughly the last few for the channel.
Codes and articles
Start here — find out which fix applies
A script that runs the 6 inspection commands from the write-up below and prints what each one returned. It reads the machine and changes nothing — every command that could write, delete, start or stop is excluded from it by construction. Run this first, then pick the fix its output points at.
Fixes (3)
Find out why updates are not applying
Update Now does nothing, or the version never changes.
Read the current state — version, channel, and whether updates are permitted at all.
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration' | Format-List ClientVersionToReport, UpdateChannel, UpdatesEnabled, CDNBaseUrlUpdatesEnabled set to False is the answer surprisingly often, left behind by a deployment configuration or a well-meaning attempt to stop updates during a project.
Re-enable updates if they are turned off.
Set-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration' -Name UpdatesEnabled -Value 'True'Check for a policy that overrides the local setting.
Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Office\16.0\Common\OfficeUpdate' -ErrorAction SilentlyContinueConfirm the scheduled task that drives updates exists and is running.
Get-ScheduledTask -TaskPath '\Microsoft\Office\' -ErrorAction SilentlyContinue | Select-Object TaskName, StateForce an update from the command line, which reports errors the button swallows.
& "$env:CommonProgramFiles\Microsoft Shared\ClickToRun\OfficeC2RClient.exe" /update user displaylevel=true forceappshutdown=true
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration' | Select-Object ClientVersionToReportRoll back to the previous build
An update broke something and you need the previous build while it is investigated. A pinned build stops receiving security updates, so treat this as a temporary measure with an end date rather than a configuration.
Record the current version before changing anything, so you can come back to it.
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration' | Select-Object ClientVersionToReport, UpdateChannelFind the build number you want from Microsoft's update history for your channel. Note the full four-part version, for example 16.0.17928.20114.
Start-Process 'https://learn.microsoft.com/officeupdates/update-history-microsoft365-apps-by-date'Only the last few builds per channel stay on the content network. A version older than that will fail to download and leave the installation exactly where it was, which is at least harmless.
Stop updates first, or the machine will simply update forward again within the day.
Set-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration' -Name UpdatesEnabled -Value 'False'Roll back to the chosen build. Close every Office application first.
& "$env:CommonProgramFiles\Microsoft Shared\ClickToRun\OfficeC2RClient.exe" /update user updatetoversion=16.0.17928.20114 displaylevel=true forceappshutdown=trueSet a date to re-enable updates. A machine pinned to an old build and forgotten stops receiving security fixes, which is a worse problem than the one you are working around.
This is the step that gets skipped, and it is the reason estates end up with machines years behind. Write the date down somewhere that is not this machine.
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration' | Select-Object ClientVersionToReportChange the update channel
The machine is on the wrong channel — usually Current when it should be Monthly Enterprise, so that updates arrive predictably rather than continuously.
Read the current channel.
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration' | Select-Object UpdateChannel, ClientVersionToReportThe value is a CDN URL ending in a GUID rather than a name. 492350f6 is Current, 55336b82 is Monthly Enterprise, 7ffbc6bf is Semi-Annual Enterprise, and 64256afe is Semi-Annual Preview.
Set the channel. This example moves the machine to Monthly Enterprise.
Set-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Office\ClickToRun\Configuration' -Name UpdateChannel -Value 'http://officecdn.microsoft.com/pr/55336b82-a18d-4dd6-b5f6-9e5095c314a6'Trigger an update so the change takes effect. Moving to a slower channel can mean a downgrade, which takes a full package download.
& "$env:CommonProgramFiles\Microsoft Shared\ClickToRun\OfficeC2RClient.exe" /update user displaylevel=true forceappshutdown=trueFor more than a handful of machines, set the channel through the Office administrative templates or Intune instead. Setting it per machine by hand does not survive a rebuild.
Related faults
Where this stops. This write-up was written and checked by hand. It says what each step changes, how to confirm it worked and how to reverse it, and anything destructive is flagged before you reach it. If it does not match what your machine is doing, search the Support Centre for the exact code or message — and when something needs a person, get in touch.