[BUG] Windows/MSIX: auto-update never stops the old package — CoworkVMService orphans, locks WindowsApps, app cannot relaunch (Event 658/7034 evidence)
Summary
On the Microsoft Store (MSIX) build, every background auto-update leaves the previous package version still running. Windows therefore defers registration of the new package, the old cowork-svc.exe keeps a file lock inside C:\Program Files\WindowsApps\Claude_<old>\, and the app will not start again. Killing cowork-svc.exe from Task Manager does not help — the SCM immediately respawns it from the old, now half-unregistered path. A full reboot is the only reliable recovery.
This has been reported at least four times already (#42897, #42776, #46179, #36590) and three of those were closed as duplicate/invalid without a tracked fix. I'm filing this with Windows Event Log evidence spanning two months, because the previous reports were mostly symptom descriptions and I think the missing piece was proof of where the shutdown ordering breaks.
Environment
| Item | Value |
|---|---|
| OS | Windows 11 Pro 10.0.26200 (26H1) |
| App | Claude Desktop, MSIX / Microsoft Store package Claude_pzs8sxrjxfjjc |
| Version | 1.25927.0.0 |
| Bundled CLI | claude-code 2.1.221 |
| Service | CoworkVMService (display name "Claude"), cowork-svc.exe, LocalSystem, AUTO_START |
| Update cadence observed | 39 service (re)installs between 2026-06-10 and 2026-08-04 |
---
1. Windows itself reports the old package is still running during the update
Microsoft-Windows-AppXDeploymentServer/Operational, Event ID 658 (Warning) — twice on the same update:
2026-08-04 23:14:41 Marking package {Claude_1.25927.0.0_x64__pzs8sxrjxfjjc} for deferred
registration because {Claude_1.24012.11.0_x64__pzs8sxrjxfjjc} is still running.
2026-08-04 23:34:45 Marking package {Claude_1.25927.0.0_x64__pzs8sxrjxfjjc} for deferred
registration because {Claude_1.24012.11.0_x64__pzs8sxrjxfjjc} is still running.
This is the root cause in one line: the updater does not stop the old package before swapping it. Everything below is downstream of this.
2. The service dies uncleanly, and always right next to an update
System log, Event ID 7034 (Error), "The Claude service terminated unexpectedly":
2026-08-04 23:18:17 (2nd occurrence)
2026-08-04 13:40:43 (1st occurrence)
2026-07-26 15:19:23
2026-07-22 01:33:39
2026-07-19 11:36:43
Each sits within seconds of an Event 7045 (service re-installed at a new version path) and an Event 7040 (start type flipped AUTO_START → DISABLED). Example triple:
2026-08-04 13:40:39 7045 Service installed: "…\Claude_1.24012.11.0_x64__…\app\resources\cowork-svc.exe"
2026-08-04 13:40:39 7040 Claude service start type changed from Auto to Disabled
2026-08-04 13:40:43 7034 The Claude service terminated unexpectedly. (occurrence 1)
3. The service cannot configure its own crash-recovery — on every single start
C:\ProgramData\Claude\Logs\cowork-service.log, present at every service start:
2026/08/04 23:33:57.290704 Warning: failed to open service for recovery config: Access is denied.
2026/08/04 23:35:27.752268 Warning: failed to open service for recovery config: Access is denied.
2026/08/04 23:39:22.360695 Warning: failed to open service for recovery config: Access is denied.
Confirmed by SCM — the recovery config is empty:
> sc.exe qfailure CoworkVMService
RESET_PERIOD (in seconds) : 0
REBOOT_MESSAGE :
COMMAND_LINE :
So cowork-svc.exe is written to self-configure SERVICE_FAILURE_ACTIONS at startup, but under MSIX it runs without SERVICE_CHANGE_CONFIG rights on its own service and silently gives up. The service's recovery behaviour is therefore whatever SCM defaults to — not what the code intends.
Combined with:
> sc.exe qc CoworkVMService
TYPE : 210 WIN32_PACKAGED_PROCESS
ERROR_CONTROL : 0 IGNORE
START_TYPE : 2 AUTO_START
…a failed start is swallowed with no user-visible signal at all. That is exactly the reported symptom: "I click the icon and nothing happens."
4. The Hyper-V guest is never shut down gracefully
Same log:
2026/08/04 23:15:45.645102 [VM] Graceful shutdown failed, forcing termination:
HcsShutdownComputeSystem failed with HRESULT 0x0/0x80070032
{"Error":-2147024846,"ErrorMessage":""}
0x80070032 = ERROR_NOT_SUPPORTED. The guest is booted with:
KernelCmdLine: console=ttyS0 earlyprintk=serial root=/dev/sda1 rootfstype=ext4 rw panic=10
There is no ACPI shutdown path wired up, so HcsShutdownComputeSystem can never succeed and the code always falls through to force-termination. Every VM stop is a hard power-off. That leaves HCS/HNS objects (VM, vNIC, NAT rules, Plan9 shares) dirty for the next service start — which matches the "Failed to start Claude's workspace" reports in #36590.
5. Locked binaries in the package directory
%APPDATA%\Claude\logs\main.log:
2026-07-29 16:29:58 [error] [Chrome Extension MCP] Failed to copy native host binary:
Error: EBUSY: resource busy or locked, copyfile
'C:\Program Files\WindowsApps\Claude_1.24012.9.0_x64__pzs8sxrjxfjjc\app\resources\chrome-native-host.exe'
-> 'C:\Users\<user>\AppData\Roaming\Claude\ChromeNativeHost\chrome-native-host.exe'
6. Renderer processes block Windows shutdown
System log, provider winsrvext, Event ID 101 (Warning):
2026-07-30 01:17:53 Process …\Claude_1.24012.9.0_x64__…\app\claude.exe from package
Claude_1.24012.9.0_x64__… is delaying system shutdown after 5000 milliseconds.
2026-07-29 16:21:33 … is delaying system shutdown after 500 milliseconds.
7. Confirmed UI hangs
Application log, Event ID 1002 (Application Hang):
2026-07-07 20:17:00 claude.exe 1.18286.2.0 stopped interacting with Windows and was closed.
2026-07-07 15:13:26 claude.exe 1.18286.0.0 stopped interacting with Windows and was closed.
8. Separate but related — a real code-signing bug
Application log, provider CoworkVMService, Event ID 1 (Error):
2026-07-08 01:38:29 Claude VM Service error: signature verification initialization failed:
service is not properly signed: WinVerifyTrust returned 0x800B0109
0x800B0109 = CERT_E_UNTRUSTEDROOT. On that build the service refused to start at all because it could not validate its own signature.
Worth checking on your side: the certificate subject string changed between two consecutive releases:
2026-08-04 23:35:35 [Server] Client signature verified: …\Claude_1.24012.11.0_…\claude.exe (subject: Anthropic, PBC)
2026-08-04 23:39:36 [Server] Client signature verified: …\Claude_1.25927.0.0_…\claude.exe (subject: Anthropic PBC)
Anthropic, PBC vs Anthropic PBC — with and without the comma. If cowork-svc.exe ever compares that subject as an exact string, a release that flips the comma will make the service reject its own client.
9. Current state of this machine
13 claude.exe processes are live as I write this, the oldest started 2026-08-04 23:39:23 — i.e. they have survived multiple app close/reopen cycles.
---
Reproduction
- Windows 11 with the Store/MSIX build of Claude Desktop.
- Use the app normally; let a background auto-update land (roughly every 1–2 days at the current cadence — 39 updates in ~8 weeks here).
- Close the app.
- Try to reopen it.
Expected: the app opens.
Actual: nothing happens, or Windows reports the file is in use. cowork-svc.exe is still running under services.exe; killing it just respawns it with a new PID. Reboot required.
---
Suggested fixes
- Stop
CoworkVMServicebefore package replacement. The updater already firesbeforeQuitForUpdate— hook the service stop to it and wait forSERVICE_STOPPEDbefore letting the MSIX swap proceed. Event 658 proves this isn't happening today. - Make the service's shutdown actually shut things down. Either boot the guest with a working ACPI/vsock shutdown channel so
HcsShutdownComputeSystemsucceeds, or explicitly tear down HNS endpoints and NAT rules on the force-terminate path so state isn't left dirty for the next start. - Declare failure actions in the MSIX manifest instead of setting them at runtime — the runtime call provably fails with Access Denied under MSIX on every boot.
- Don't ship
ERROR_CONTROL=IGNORE. A service that silently fails to start produces exactly the "app just doesn't open, no error" symptom users keep reporting. - Self-heal on startup: if
claude.exefinds acowork-svc.exerunning from a package path that is no longer the registered version, stop the service and restart it from the current path rather than failing silently. - Give users an escape hatch — a supported way to disable the Cowork VM service for users who don't use Cowork (#57371). Today
sc.exe config CoworkVMService start= disabledreturnsAccess is deniedbecause of MSIX package protection.
---
Local workaround, for anyone hitting this
Not a fix, and the next update undoes it, but it recovers the machine without a reboot:
Stop-Service CoworkVMService -Force
Stop-Process -Name cowork-svc,chrome-native-host,claude -Force -ErrorAction SilentlyContinue
Start-Service CoworkVMService
If the package itself is wedged, re-registering works more often than reinstalling:
Get-AppxPackage -Name '*Claude*' | ForEach-Object {
Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\AppXManifest.xml"
}
---
Prior reports of the same failure
- #42776 — Desktop fails to relaunch due to orphaned process file lock (open, 116 comments, labelled
invalid) - #46179 — Store update fails due to
CoworkVMServicefile lock and stuckWindowsApps\Deleted(closed as completed,has repro) - #42897 — stuck process after auto-update requires full reboot (closed as duplicate — duplicate target not linked)
- #36590 —
CoworkVMServicestops and fails to auto-restart (closed as duplicate) - #57371 — request for a way to disable the bundled service (open)
If this duplicates one of the above, please link it to the canonical issue rather than closing it silently — three of the five above were closed as duplicate/invalid with no linked target, which is why the same bug keeps getting refiled.
Showing cached comments. Read the full discussion on GitHub ↗
3 Comments
Confirming #83968 with a live before/after capture (Win11 zh-TW)
Reproduced just now on the same failure mode. Captured Event Log before clicking Relaunch and again at the moment of the dialog.
Environment
Claude_pzs8sxrjxfjjc)Claude_1.24012.11.0Claude_1.25927.0.0Timeline (local time, UTC+8, 2026-08-05)
| Time | Signal |
|---|---|
| 16:27:20 | AppXDeploymentServer Event 658:
Marking package {Claude_1.25927.0.0_…} for deferred registration because {Claude_1.24012.11.0_…} is still running.|| 16:59:24 | User clicked in-app Relaunch / Update |
| 16:59:24 | Windows dialog: “Another program is currently using this file.” (title bar path
…\WindowsApps\Claude_1.25927.0.0_…) || 16:59:24 | AppModel-Runtime Event 215:
0x80070020: Cannot create the Desktop AppX container … converting the job|| 16:59:24 | AppModel-Runtime Event 208:
0x80070020: Cannot create the process … [LaunchProcess]|| 16:59:24 |
cowork-service.log: service stop → immediate restart from new path…\Claude_1.25927.0.0_…\cowork-svc.exe, plus recurringWarning: failed to open service for recovery config: Access is denied.|After-fail state (no reboot yet)
Get-AppxPackagereports1.25927.0.0/ Status Ok%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\SystemAppData\Helium\User.dat→ sharing violationCoworkVMServiceRUNNING;chrome-native-host.exealso presentclaude.exenot running (activation fails)Recovery attempt without reboot (failed)
Tried the thread workaround:
Stop-Service CoworkVMService, kill package-related processes /chrome-native-host,Add-AppxPackage -Register,Start-Service, relaunch.Result: still fails. Fresh Event 215/208
0x80070020at 17:02:54 (FinishPackageActivation). Matches the “wedged AppX container / kernel hive lock — reboot only” path described in #42776.Happy to provide ProcMon / full
.evtxexports privately if useful. This is an independent confirmation of the Event 658 → 215/208 sequence on a second machine.Correction to the root-cause analysis in the opening post
Two independent reports since I filed this have moved the diagnosis forward, and one of them contradicts part of what I wrote. Consolidating here so maintainers don't have to reconstruct it from three threads.
What I got wrong
I attributed the file lock to
cowork-svc.exeholding handles inside the package directory. That is not the mechanism. Credit to @gannonlawlor, who established this in https://github.com/anthropics/claude-code/issues/42776#issuecomment-5193866362 with a test I hadn't thought to run: with zero Claude processes alive (verified viaWin32_Process),HKLM\SYSTEM\CurrentControlSet\Control\hiveliststill contained mounted container-silo hives pointing at the package's Helium state.That report also rules the service out directly — stopping
CoworkVMServiceand holding it dead in a kill loop did not allow activation to succeed. The service is a bystander. So ischrome-native-host.exe.The actual failure is at the Desktop Bridge container layer: when the app's AppX container is torn down abnormally, its registry hives stay mounted. The next activation collides with those mounts and fails with
0x80070020(ERROR_SHARING_VIOLATION), surfacing asAppModel-RuntimeEvents 215 + 208 and the "Another program is currently using this file" dialog. That is also why elevated admin can't clear it —NtUnloadKey2returns0xC0000022unless run as SYSTEM.What still holds
The Event 658 ordering bug stands, and has now been reproduced on three machines including a second locale (@stantheman0128, Win11 26200 zh-TW, in https://github.com/anthropics/claude-code/issues/83968#issuecomment-5189808528):
Best current reading of the chain — 658 is the trigger, the hive leak is the mechanism that makes it unrecoverable:
The service-level findings in the opening post (
ERROR_CONTROL: IGNORE, emptyqfailure,failed to open service for recovery config: Access is deniedon every start,HcsShutdownComputeSystem→0x80070032so every VM stop is a hard kill) are still real bugs and still worth fixing — but they explain why the failure is silent, not why it happens.Retracting the workaround
The
Stop-Service+ kill +Add-AppxPackage -Registersequence I posted does not work — independently confirmed failing by both reporters above, with fresh 215/208 events after the attempt. Please disregard it. The only non-reboot recovery reported working isNtUnloadKey2(..., REG_FORCE_UNLOAD)on the stale\REGISTRY\WC\Silo*hives as SYSTEM with SeRestore/SeBackup.Diagnostic step, and a healthy-state baseline
For anyone triaging, this lists the mounted silo hives belonging to the Claude package (read-only, no elevation needed):
Match on the publisher ID
pzs8sxrjxfjjcalone, not onClaude_pzs8sxrjxfjjc— the version-pinned paths below readClaude_<version>_x64__pzs8sxrjxfjjc, so the narrower filter silently drops exactly the entries of interest.Run on my machine while the app is running normally (1.25927.0.0, healthy — so this is a baseline, not a fault state), it returns eight entries under four silo GUIDs. Five are family-scoped:
and three are on a version-pinned path:
One observation I'd flag rather than claim: that second set is keyed to a path containing
Claude_1.25927.0.0, the exact version string. The family-scoped hives survive an update unchanged; these version-pinned ones point at a directory that ceases to be the registered version the moment an update lands. If they aren't unmounted as part of the swap, they become mounts referencing a superseded package path — which is precisely the collision shape being reported. I'm not asserting this is the leak; I'm flagging it as worth checking against a machine that is actually wedged, since I only have a healthy sample.For comparison on the same machine, other MSIX apps (WhatsApp, Windows Terminal, WidgetsPlatformRuntime, Client.WebExperience) each show a single silo GUID family on package-family paths only. Intel Arc Software is the one other app showing the version-pinned
WindowsApps\<name>_<version>\Cacheshape.Updated fix suggestions
Superseding items 1–6 in the opening post, in priority order:
0x80070020plus\REGISTRY\WC\Silo*entries referencing your own package family. Surface a real error instead of silently doing nothing — right now the user sees a dead icon and nothing else.ERROR_CONTROL: IGNORE, the runtimeSERVICE_FAILURE_ACTIONScall that always fails under MSIX (declare it in the manifest instead), and the guest ACPI shutdown path soHcsShutdownComputeSystemstops returningERROR_NOT_SUPPORTED.Three machines, two locales, two independent reporters, and a documented non-reboot recovery. @gannonlawlor's write-up in #42776 is the most complete account of the mechanism and is worth reading in full.
Same failure here on Windows 11 Pro 26200, Claude 1.32352.0.0, non-admin corporate account.
Adding one detail I have not seen stated in the existing reports: an ordinary user can stop
the blocking service, so a non-admin workaround exists and the updater could do the same thing
itself.
The blocker:
The service image lives inside the package directory it is blocking, and it is not a child of
the app, so quitting from the tray never stops it. That is why a reboot is the only thing that
has worked for me.
The security descriptor grants Authenticated Users both start (RP) and stop (WP):
So
Stop-Service CoworkVMServicesucceeds without elevation, which makes two things true:kill leftover
Claude.exeprocesses, and relaunch, instead of rebooting.servicing, with no additional privilege required.
Happy to attach a full process/service dump from the next failure if that is useful.