0X0000088D: Service can't be controlled in this state
This error means Windows can't stop or restart a service because it's stuck in a pending state. The fix is usually a reboot or a targeted registry cleanup.
When this error shows up
You're in the Services console (services.msc), right-click a service — maybe the Print Spooler or the Windows Update service — and pick Stop or Restart. Instead of it going gray or bouncing back, you get a popup: "The service could not be controlled in its present state. Error 0X0000088D." I've seen this mostly on Server 2016 and Windows 10 machines that have been running for weeks without a restart. It's common after a failed update or when a service is stuck in a Start Pending, Stop Pending, or even a Paused state.
What's actually going on
Windows tracks every service's state internally — stopped, running, start pending, stop pending, etc. When a service is in one of those intermediate states (like 'pending'), the Service Control Manager (SCM) won't accept any new control commands until it finishes what it's doing. This error means the SCM thinks the service is mid-transition and hasn't timed out yet. The trigger is usually a hung thread inside the service or a deadlock with another service it depends on. Had a client last month whose SQL Server Agent was stuck in Stop Pending for 3 days — every attempt to restart it gave this exact error. The root cause? A blocked database backup job that wouldn't release a lock.
How to fix it — the quick way
Skip the registry edits for now. Boot 'em and reboot. Seriously. A full restart clears every pending state. If that's not an option (production server, can't bounce it), then we go manual.
- Check the service state with a command
Open an elevated PowerShell or CMD. Run:
Replace ServiceName with the actual short name, e.g.,sc queryex "ServiceName"spoolerfor Print Spooler. Look at the STATE line. If it says STOP_PENDING or START_PENDING, that's your problem. - Kill the process behind the service
If the service has a PID (under PID insc queryexoutput), you can nuke it:
Replace 1234 with the actual PID. This forces the service to stop immediately. The SCM will then see it as stopped, and you can restart it fresh.taskkill /F /PID 1234 - If that doesn't work, kill from the registry
Sometimes the service process is already dead but the SCM is confused. Open Regedit, go to:
Look for theHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\ServiceNameFailureActionskey — don't touch that. Instead, find theStartvalue. Change it to 4 (disabled). Reboot the machine (or restart the SCM if you're brave). Then change it back to whatever it was (2 for automatic, 3 for manual) and start the service. - Use PowerShell to force state change
If you're on Server 2016 or later, try:
If that fails with the same error, you're stuck with the steps above.Set-Service -Name "ServiceName" -Status Stopped
Still stuck? What to check next
If none of that works, check the event log under Application and System for any event ID 7000, 7009, or 7034. Those tell you the service timed out or crashed. Also look for Service Control Manager errors with Event ID 7022 — that means the service hung on start. The fix there is often a registry timeout tweak: add or modify ServicesPipeTimeout in HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control. Set it to a DWORD value of 60000 (60 seconds) or more. Reboot after changing that.
One more thing: if this keeps happening with the same service, don't just patch it — find the root cause. A client had this weekly with the DHCP service until I found another service that was locking its database file. Disabling the conflicting service fixed it for good.
Short version: reboot kills 90% of these. For the rest, kill the process or adjust the timeout. Don't overthink it.
Was this solution helpful?