[BUG] Claude Desktop fails to launch on Windows — orphaned Silo / Job Object after app crash, only logoff or reboot recovers (HRESULT 0x80070020 in AppModel-Runtime EventID 215/208)
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
Claude Desktop on Windows enters a state where launch fails with the user-facing message:
"Há um outro programa usando este arquivo no momento." (English equivalent: "Another program is currently using this file.")
referencing C:\Program Files\WindowsApps\Claude_<version>_x64__pzs8sxrjxfjjc\....
The message is misleading — there is no actual file lock in the install directory. The real failure is in the AppX/Desktop Bridge container layer.
Real diagnosis (from Event Logs)
Channel Microsoft-Windows-AppModel-Runtime/Admin shows two correlated events on every failed launch:
- Event ID 215:
0x80070020: cannot create the Desktop AppX container for package Claude_<full>_x64__pzs8sxrjxfjjc due to an error converting the job - Event ID 208:
0x80070020: cannot create the process for package Claude_<full>_x64__pzs8sxrjxfjjc due to an error setting up the runtime. [LaunchProcess]
HRESULT 0x80070020 = ERROR_SHARING_VIOLATION, surfacing during the Job Object → Silo conversion (the Win32 container layer that backs Desktop Bridge / AppX-packaged Win32 apps).
Hypotheses ruled out
- ❌ No userspace process has modules loaded from the Claude install directory at the time of failure
- ❌ No file in the install directory has an exclusive lock (verified via Sysinternals
handle.exeand Process Explorer) - ❌ Other AppX apps (Notepad, OneDriveSync, Microsoft Store apps) successfully create Desktop AppX containers in the same time window — the issue is specific to the Claude package
- ❌ HCS (Host Compute Service, used by
cowork-svc.exefor the Cowork sandbox VM) has no orphaned compute systems (hcsdiag listreturns clean) - ❌
Reset-AppxPackagewith admin privileges does NOT recover - ❌
Add-AppxPackage -Register(re-register manifest) does NOT recover - ❌ Restarting
AppXSvc,ClipSVC,AppReadiness,vmcompute,CoworkVMServicedoes NOT recover - ❌ The Claude desktop process is briefly created and added to the container, then the container is destroyed immediately — suggesting an app crash during startup that doesn't propagate cleanup back through the Silo
Only known workaround
Logoff + Login (or full reboot). This clears the orphaned handle in the user-session. Service restarts and AppX package resets do not clean it up.
This matches the kernel-level lock pattern documented in #49655 (Helium hive locks held by cowork-svc.exe that survive service stop), but surfaces at a different layer (Silo/Job conversion at AppX activation time, not MSIX deployment time).
What Should Happen?
The Claude Desktop launch path should not leave an orphaned Silo/Job handle when it crashes during startup. Cleanup should be guaranteed via SEH / signal handlers / RAII-equivalent in the launcher process.
If CoworkVMService initialization fails, the app should fall back to chat-only mode (already requested in #28231) instead of crashing the entire activation.
The user-facing message ("Há um outro programa usando este arquivo no momento" / "Another program is using this file") is wrong and should be improved — there is no file lock; the failure is at the container layer.
Error Messages/Logs
Microsoft-Windows-AppModel-Runtime/Admin
Event ID 215:
0x80070020: cannot create the Desktop AppX container for package Claude_<full>_x64__pzs8sxrjxfjjc due to an error converting the job
Event ID 208:
0x80070020: cannot create the process for package Claude_<full>_x64__pzs8sxrjxfjjc due to an error setting up the runtime. [LaunchProcess]
HRESULT 0x80070020 = ERROR_SHARING_VIOLATION
User-facing dialog (Portuguese Windows):
"Há um outro programa usando este arquivo no momento."
referencing C:\Program Files\WindowsApps\Claude_<version>_x64__pzs8sxrjxfjjc\...
Full event log dumps, Get-AppxPackage output, service states, HCS/HNS state, and Claude logs are included in the attached claude-diag-<timestamp>.zip.
Steps to Reproduce
Not deterministic on demand. Observed pattern:
- Use Claude Desktop normally for a session.
- App crashes (any cause — observed after Cowork session, after sleep/wake, after Windows update notification).
- Attempt to relaunch from Start menu / taskbar.
- Error dialog appears: "Há um outro programa usando este arquivo no momento" referencing
C:\Program Files\WindowsApps\Claude_<version>_x64__pzs8sxrjxfjjc\.... - Event Viewer →
Microsoft-Windows-AppModel-Runtime/Adminshows EventID 215 + 208 with HRESULT0x80070020.
Already attempted (none recover without logoff/reboot)
Reset-AppxPackage Claude_pzs8sxrjxfjjc(elevated)Get-AppxPackage Claude_pzs8sxrjxfjjc | Reset-AppxPackageAdd-AppxPackage -Register "<install>\AppxManifest.xml" -DisableDevelopmentModeRestart-Service AppXSvc, ClipSVC, AppReadiness, vmcompute, CoworkVMService(in various orders)taskkillon allclaude*,cowork-svc*,parsecd*,chrome-native-host*processes- Verified
hcsdiag listis clean (no orphan compute systems) - Verified
handle.exereports no userspace handles into the install dir
Only logoff + login (or reboot) recovers the launch path.
Claude Model
None
Is this a regression?
Yes, this worked in a previous version
Last Working Version
_No response_
Claude Code Version
N/A — this is Claude Desktop on Windows, not Claude Code
Platform
Anthropic API
Operating System
Windows
Terminal/Shell
PowerShell
Additional Information
Component involved
Claude Desktop bundles a custom Windows service CoworkVMService (executable: cowork-svc.exe) that creates a sandbox Linux VM via HCS (same API used by Hyper-V / WSL2 / Windows Sandbox). The smol-bin.x64.vhdx file in the install directory is that VM's disk.
Suspected root cause: when the Claude desktop process crashes during startup, the kernel-side Silo/Job cleanup does not run, leaving an orphaned handle in the user session. AppX activation for subsequent launch attempts hits ERROR_SHARING_VIOLATION when trying to convert a fresh Job Object into a Silo bound to the same package family in the same session.
Relationship to other issues
- #49655 —
0x80073CF6ERROR_PACKAGES_IN_USEfrom kernel locks held bycowork-svc.exeon Helium hive files; "only full reboot releases the kernel-level locks". Same cleanup-on-crash defect, observed at MSIX-deployment layer instead of activation layer. - #50825 — Launch failure on Windows 11 Pro 25H2 with v1.3109.0.0; HCS reports
Invalid JSON document '$'on VM shutdown. SubsequentCoworkVMServicestarts succeed but Claude Desktop still fails to launch — service is healthy, app-to-service handoff or stored state is wedged. - #25914 —
main.logis 0 bytes because the app crashes before logging starts. Same "process briefly created then container destroyed" signature. - #28231 — "No graceful fallback when CoworkVMService fails — the entire app crashes rather than launching in chat-only mode." Suggests the app's failure path is itself the trigger for the Silo leak.
Already attempted
Reset-AppxPackage Claude_pzs8sxrjxfjjc(elevated)Get-AppxPackage Claude_pzs8sxrjxfjjc | Reset-AppxPackageAdd-AppxPackage -Register "<install>\AppxManifest.xml" -DisableDevelopmentModeRestart-Service AppXSvc, ClipSVC, AppReadiness, vmcompute, CoworkVMService(in various orders)taskkillon allclaude*,cowork-svc*,parsecd*,chrome-native-host*processes- Verified
hcsdiag listis clean (no orphan compute systems) - Verified
handle.exereports no userspace handles into the install dir
Only logoff + login (or reboot) recovers the launch path.
Asks of engineering
- Confirm whether the Silo/Job cleanup-on-crash defect is the root cause.
- Provide a way to clear the orphaned handle without logoff/reboot (e.g., a documented PowerShell sequence or a flag in the app).
- Improve the user-facing error message — the current "another program is using this file" is actively misleading and sends users on a wild goose chase looking for file locks that don't exist.
- Consider the chat-only fallback already requested in #28231 — it would also avoid this leak path.
Happy to provide additional traces (ETW for AppXDeploymentServer or Microsoft-Windows-AppModel-Runtime, WPR captures of a failed launch) on request.
Environment
- OS: Windows 11 Pro
<build> - Claude Desktop:
Claude_<version>_x64__pzs8sxrjxfjjc(MSIX, installed via claude.ai/download → MSIX bootstrapper) - Diagnostic ZIP:
claude-diag-<timestamp>.zip(attached) — includes EventLog dumps forAppModel-Runtime/Admin,AppXDeploymentServer/Operational,Hyper-V-Compute-Operational, fullGet-AppxPackageoutput, service states, HCS/HNS state, and Claude logs.
Note on this template
This bug report concerns Claude Desktop on Windows, not Claude Code. The closest matching repo for filing the report appears to be this one. The "Claude Code Version" field has been filled with N/A accordingly, and the OS / Platform fields have been set to the closest available values.
108 Comments
Cross-linking with #49655. This may be a related Windows AppX/MSIX container-lock symptom. In the #49655 repro, the visible error was also
Another program is currently using this file, and the recoverable lock source was running Claude package processes underC:\Program Files\WindowsApps\Claude_*plusCoworkVMService.Workaround/details: https://github.com/anthropics/claude-code/issues/49655#issuecomment-4498317708
This may not cover the orphaned Silo/Job Object case completely, but it is worth linking because both symptoms surface as AppX/WindowsApps sharing violations after update/relaunch.
Corroborating report from a second affected machine — and a new data point that discriminates between the two leading theories.
I hit this exact signature (208 + 215,
0x80070020, only sign-out/reboot recovers) on every in-place MSIX update, and ran a controlled test that I think narrows the root cause.Environment
Claude_pzs8sxrjxfjjc1.11187.1.0→1.11847.5CoworkVMService(cowork-svc.exe)Signature (identical to this issue)
Microsoft-Windows-AppModel-Runtime/Admin, every failed launch:0x80070020: Cannot create the process for package Claude_<ver>_x64__pzs8sxrjxfjjc ... [FinishPackageActivation]0x80070020: Cannot create the Desktop AppX container ... because an error was encountered converting the job.Dialog: path in the title bar, body "Another program is currently using this file."
claude.exenever spawns. Sign-out/login or reboot clears it every time.NEW: a pre-update CoworkVMService mitigation does NOT prevent the wedge
The competing theory (#57221) is that the AutoStart
CoworkVMServiceowns the package Job Object across the version transition, so neutralizing it before the update should help. I tested that directly:Before clicking "Relaunch to update", as Administrator, with Claude still running:
CoworkVMServicestart type to Disabled (via SCM asNT AUTHORITY\SYSTEM, since the service DACL blocksSet-Servicefor Administrators)Stop-Service CoworkVMService -Forcecowork-svc.exe,parsecd,chrome-native-hostResult: the post-update launch still wedged with the same 208/215 /
0x80070020, and a reboot was again required.Since the service was disabled, stopped, and process-killed before the file swap, the "running service owns the Job Object" path is eliminated for this signature. That leaves the model described in this issue: the new version crashes during its first launch, kernel-side Silo/Job cleanup does not run, and the orphaned handle bound to the package family persists until the session is torn down (sign-out/reboot). The fix needs to be in the launch/crash path, not in service startup config.
Also ruled out on this machine (none prevented or recovered it)
Defender (real-time, BAFS, MAPS, sample submission, Tamper Protection all off); Smart App Control (Eval;
CodeIntegrity/Operationalempty during repro — no 3076/3077/3091/3092); SmartScreen for Apps (Off); ASR (none configured); Controlled Folder Access (Disabled); static file lock (File.OpenFileShare.Nonesucceeds,handle.exefinds no holders);Reset-AppxPackage;Add-AppxPackage -Register -ForceApplicationShutdown; restart ofAppXSvc/ClipSVC/AppIDSvc/StateRepository/vmcompute; Explorer + RuntimeBroker + ApplicationFrameHost recycle; deleting the orphan prior-version WindowsApps folder; stoppingCoworkVMServiceafter the wedge.Asks (same as OP, reinforced)
CoworkVMService/the VM fails, launching chat-only would avoid the crash that appears to trigger the leak.Happy to provide ETW captures (
AppModel-Runtime,AppXDeploymentServer/Operational,Hyper-V-Compute-Operational) of a failed post-update launch on request.Same failure on Windows 11 x64 (
Claude_1.12603.1.0_x64__pzs8sxrjxfjjc), triggered by an MSIX auto-update rather than a crash, but the end state is identical to this report: orphaned Silo/Job →0x80070020inMicrosoft-Windows-AppModel-Runtime/Admin(Event 215 "error encountered converting the job" + Event 208 "configuring runtime / LaunchProcess") → the process is created and added to the container, then the container is destroyed and the app dies before any window. Zero entries in...\LocalCache\Roaming\Claude\Crashpad\reports, confirming it dies at the container layer, not in app code.Confirming your finding that
Add-AppxPackage -Registerdoes NOT recover — it repairs the package registration (status → 0x0) but the leaked silo hives stay locked, so the app is still unlaunchable. (This is why theAdd-AppxPackage -Registerworkaround in #59934 is insufficient for this signature.)Re your ask #2 — a way to clear the orphaned handle without sign-out/reboot
This worked here. The leaked Silo surfaces as orphaned registry hives under
\REGISTRY\WC\Silo<guid>...(visible inHKLM\SYSTEM\CurrentControlSet\Control\hivelist) that hold the package'sSystemAppData\Helium\User.datandUserClasses.datopen —CreateFileon them returnsERROR_SHARING_VIOLATION (32). Force-unloading just those hives releases the lock:\REGISTRY\WC\Silo...entry:NtUnloadKey2(<OBJECT_ATTRIBUTES of the silo hive path>, REG_FORCE_UNLOAD).0xC0000022 STATUS_ACCESS_DENIEDon these even withSeRestorePrivilegeenabled — they must be unloaded asNT AUTHORITY\SYSTEM(e.g. via a one-shot scheduled task created with/RU SYSTEM /RL HIGHEST), withSeRestorePrivilege+SeBackupPrivilegeenabled in the SYSTEM token.After the unload:
hivelistshows no Claude silos, the hive files open cleanly, and Claude Desktop launches normally viashell:AppsFolder\<PackageFamily>!Claude— no reboot, no sign-out, every other app left running. Verified: post-unload launch loggedCreated process ... for application Claudewith no0x80070020.So the recovery that holds when re-register fails is: re-register (to fix the registration) + SYSTEM force-unload of the leaked
\REGISTRY\WC\Silo...hives. Ideally activation should detect and reset a stale Silo for the package family before failing, as you suggest.(Full writeup with the complete event-log signatures was filed separately; closing that as a duplicate of this issue.)
Still reproduces on the latest version — Claude Desktop 1.14271.0 (sideloaded MSIX)
Adding a fresh data point confirming this is not fixed. The signature is identical to the OP and it reproduces on every auto-update for me, including the most recent one (which postdates the closed duplicates #67911 / #59934 / #48003).
Environment
Claude_1.14271.0.0_x64__pzs8sxrjxfjjc(sideloaded MSIX, publisher "Anthropic, PBC")MSIX detected: windowsStore=true, appPathMatch=true, source=windowsStore1.13576.4.0 → 1.14271.0.0Timeline (single auto-update, 2026-06-22, local time)
| Time | Source | Event |
|---|---|---|
| 11:50:43 | AppXDeploymentServer/Operational
[400]|Addoperation — new MSIX staged (Claude-c8f4d811….msix), old version still running || 12:20:03 | app
logs\main.log|beforeQuitForUpdate handler fired, going down for update|| 12:20:03 | AppXDeploymentServer/Operational
[603]|Started deployment RegisterByPackageFamilyName … Claude_pzs8sxrjxfjjc and Options ForceApplicationShutdownOption|| 12:20:35 | AppXDeploymentServer/Operational
[400]/[613]|Register operation … Claude_1.14271.0.0 … finished successfully(Overall time: 31891 ms) — package update itself SUCCEEDS || 12:20:35–36 | AppModel-Runtime/Admin
[215]/[208]| container creation FAILS (see below) — 0–1s after the Register succeeded || 12:20–13:11 | — | repeated failed launches; zero entries in
…\LocalCache\Roaming\Claude\Crashpad\reportsand no appmain.logactivity → dies at the container layer, not in app code || 13:11:04 | AppModel-Runtime/Admin
[201]| after a full reboot:Created process … for application Claude_pzs8sxrjxfjjc!Claude→ app launches normally as 1.14271.0 |AppModel-Runtime/Admin failure signature (every failed launch)
(
0x80070020=ERROR_SHARING_VIOLATION)Recurs every update. The exact same
[215]/[208]0x80070020pair is present for the previous version too — packageClaude_1.13576.4.0_x64__pzs8sxrjxfjjcon 2026-06-18 (Events 16:24:14 → 16:29:03, multiple failed retries before recovery).Notable: the Register operation runs with
ForceApplicationShutdownOption, so the old instance is force-killed and the new container is created almost immediately — consistent with the Job Object / Silo not having been released yet (the race described in this issue and #59934). Only a reboot/logoff has reliably recovered it on my machine; I have not yet attempted the SYSTEM\REGISTRY\WC\Silo…force-unload workaround from the thread above.Confirming this on build Claude_1.14271.0.0_x64__pzs8sxrjxfjjc, Windows 11 Pro 26200. Adding a data point because
my case diverges from the reported recovery path in a way that may matter.
Key divergence: a full reboot did NOT recover for me. The issue body lists logoff/reboot as working recovery; in my
case it did not.
Sequence I went through:
0x80070020 initially.
sharing-violation errors entirely.
Event 217 (Destroyed Desktop AppX container) entries in Microsoft-Windows-AppModel-Runtime/Admin within a single
second, all for this package, with zero Event 215/208 and zero sharing-violations. The container is created and
torn down in a tight loop until the app gives up.
Additional observations at this stage:
created fresh but stay completely empty; the process dies at the earliest Electron bootstrap, before anything is
written.
So there appear to be at least two failure modes in this family: the orphaned-Silo variant that a reboot clears,
and a second state where the container create/destroy loop persists across a clean reinstall and reboot. Echoing
the request for a chat-only fallback when the Cowork container layer cannot initialize; the app is currently
unusable with no recovery path short of a downgrade.
Reproduced the SYSTEM hive-unload fix a second time on the next auto-update (now
1.15962.0.0). A few practical refinements for anyone trying it — these are the difference between "it worked" and "it silently did nothing":HKLM\SYSTEM\CurrentControlSet\Control\hivelist: each value's name is the\REGISTRY\WC\Silo<guid>...key to unload, the data is the backing hive file. Unload the ones whose data path contains the Claude package (...\Packages\Claude_<pfn>\...Helium\.../...\WindowsApps\Claude_<ver>\...).NT AUTHORITY\SYSTEM(elevated admin still gets0xC0000022 ACCESS_DENIEDeven withSeRestorePrivilege+SeBackupPrivilege). A one-shot scheduled task with/RU SYSTEM /RL HIGHESTworks — but on a laptop the task staysStatus: Queuedand silently never runs while on battery. AC power is required (a task-XML<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>did not override this for me). Plug in first, then run.AppModel Runtime status for package Claude_... successfully updated to 0x0), so only the silo unload was needed — noAdd-AppxPackage -Registerat all. Worth checking the package's registration status first; if it's already0x0, the leaked silos are the sole blocker.Success signal is the silo count, not any log: after the unload
hivelistshows zero Claude silos,User.dat/UserClasses.datopen cleanly (noERROR_SHARING_VIOLATION), andshell:AppsFolder\<PFN>!Claudelaunches withCreated process ... for application Claudeand no0x80070020— again no reboot, no sign-out, every other app left running.Adding another current x64 repro. I did not open a new issue because this issue matches the failure exactly.
Environment:
10.0.26200, 64-bitClaude_1.17377.1.0_x64__pzs8sxrjxfjjcGet-AppxPackage ClaudereportsStatus: OkObserved after upgrade from
Claude_1.15962.1.0_x64__pzs8sxrjxfjjctoClaude_1.17377.1.0_x64__pzs8sxrjxfjjc:1.15962package was moved aside and1.17377registered successfully.CoworkVMService/cowork-svc.exe; noClaude.exeUI process survives.%APPDATA%\Claude\logs\main.logdoes not advance. The last normal entry remains from the prior update path:beforeQuitForUpdate handler firedon 2026-06-28.Microsoft-Windows-AppModel-Runtime/Adminrepeats the same pair on every launch:0x80070020: Cannot create the Desktop AppX container for package Claude_1.17377.1.0_x64__pzs8sxrjxfjjc because an error was encountered converting the job.0x80070020: Cannot create the process for package Claude_1.17377.1.0_x64__pzs8sxrjxfjjc because an error was encountered while configuring runtime. [LaunchProcess]CoworkVMServicecleanly does not recover launch.C:\Program Files\WindowsApps\Claude_1.17377.1.0_x64__pzs8sxrjxfjjc\app\Claude.exefails with:The process cannot access the file because it is being used by another process.app\Claude.exereports no owner:RmGetList result=0 needed=0 count=0 rebootReasons=0.Another program is currently using this fileagainst the newClaude_1.17377.1.0...package path.So this still reproduces on the current x64 MSIX package after a successful package upgrade and after
CoworkVMServiceis stopped; it is not just a stale1.15962install or a visible userspace file-lock problem.Follow-up on the
Claude_1.17377.1.0_x64__pzs8sxrjxfjjcrepro above: the no-reboot SYSTEM hive-unload recovery described in this thread did work here.Recovery details:
HKLM\SYSTEM\CurrentControlSet\Control\hivelistand targeted only\REGISTRY\WC\Silo*hives whose backing path contained\Packages\Claude_pzs8sxrjxfjjc\.NT AUTHORITY\SYSTEMwithSeRestorePrivilegeandSeBackupPrivilegeenabled.NtStatusHex: 0x00000000; one COM hive returned0xC0000121on pass 1 and then unloaded successfully on pass 2.hivelistshowed zero remainingClaude_pzs8sxrjxfjjcWC/Silo hives.shell:AppsFolder\Claude_pzs8sxrjxfjjc!Claudethen succeeded without logoff/reboot: AppModel-Runtime/Admin logged Event ID 201Created process ... for application Claude_pzs8sxrjxfjjc!Claude,Claude.exestayed alive, and%APPDATA%\Claude\logs\main.logadvanced again.Impact note, strongly stated: logoff/reboot must not be treated as an acceptable user recovery path for this. Users should not have to tear down an entire Windows session, lose active work, kill unrelated dev tools, break running terminals/processes, and burn time reconstructing state because Claude Desktop's MSIX/AppX update or launch path leaves the machine wedged. This is especially damaging for people running long-lived coding sessions, IDEs, terminals, browsers, local services, and other agent tools. A desktop app update failure should not make the only reliable official recovery "restart your computer." Anthropic needs to prevent this state or ship a supported no-reboot recovery path.
Adding a follow-up from the same Windows/MSIX failure class, now on
Claude_1.18286.0.0_x64__pzs8sxrjxfjjc.Environment:
26200, x64Claude_1.18286.0.0_x64__pzs8sxrjxfjjcGet-AppxPackage ClaudereportedStatus: OkClaude_pzs8sxrjxfjjc!ClaudeCoworkVMServiceexisted asWIN32_PACKAGED_PROCESS,AUTO_START, binary underC:\Program Files\WindowsApps\Claude_1.18286.0.0_x64__pzs8sxrjxfjjc\app\resources\cowork-svc.exeFailure signature:
Claude.exeUI process.CoworkVMService/cowork-svc.exe.Microsoft-Windows-AppModel-Runtime/Adminrepeated the same pair:0x80070020: Cannot create the Desktop AppX container for package Claude_1.18286.0.0_x64__pzs8sxrjxfjjc because an error was encountered converting the job.0x80070020: Cannot create the process for package Claude_1.18286.0.0_x64__pzs8sxrjxfjjc because an error was encountered while configuring runtime. [LaunchProcess]/[FinishPackageActivation]C:\Program Files\WindowsApps\Claude_1.18286.0.0_x64__pzs8sxrjxfjjc\app\claude.exefrom PowerShell failed before app logging withUnknown error (0xc0070020).Attempts that did not recover launch:
After each of those, launch still recreated the packaged service and then failed again with Event ID 215/208
0x80070020.Recovery that did work without logoff or reboot:
Important detail: this did not appear to repair the MSIX/AppX state in place. It changed the installed Desktop distribution:
com.squirrel.AnthropicClaude.claudeC:\Users\<user>\AppData\Local\AnthropicClaude\app-1.18286.0\claude.exeCoworkVMServicewas no longer installed (sc qc CoworkVMServicereturned service not found)claude.exestayed alive and responsive after launch.0x80070020AppModel failures appeared after the Squirrel install launch.So for this
1.18286.0.0incident,winget repairwas insufficient, while uninstall/install through the currentAnthropic.Claudewinget manifest restored Desktop launch by moving off the failing MSIX/AppX packaged-service path. I am not treating this as a fix for the leaked MSIX silo/job state; it is a useful no-reboot recovery data point and may have feature-set implications because the packaged service is absent afterward.<html>
<body>
<!--StartFragment--><html><head></head><body><hr>
<h1>Windows: Crash exit leaves stale AppContainer job (<code>Container_Claude_...</code>) held by <code>svchost.exe</code>, blocking relaunch with "Another program is currently using this file" — only reboot clears it</h1>
<p><strong>Version:</strong> Claude_1.20186.7.0 (Windows)</p>
<h2>What's wrong</h2>
<p>After Claude Desktop terminates unexpectedly (crash, not a normal close), attempting to reopen the app fails:</p>
<ol>
<li>
<p><code>cowork-svc.exe</code> spawns in Task Manager (~13.6 MB), then a popup appears: <code>Another program is currently using this file</code>, referencing <code>C:\Program Files\WindowsApps\Claude_1.20186.7.0_...</code> — main window never opens.</p>
<p><em>(attach screenshot here — the dialog you shared earlier)</em></p>
</li>
<li>
<p>On at least one occasion, a "Please wait a moment, we are updating the app" message appeared instead, then nothing further happened (no completion, no error, no retry).</p>
</li>
</ol>
<h2>Root cause (identified via Resource Monitor / Process Explorer)</h2>
<p>No visible Claude process holds the lock. Instead, <code>svchost.exe</code> (running <code>netsvcs -p</code>) holds a Job handle to <code>\Container_Claude_1.20186.0.0_x...</code> — the AppContainer job object for the packaged app. This job object survives the crash and is never released, blocking the next launch attempt from acquiring the package's file lock.</p>
<p>A related lead: <code>services.exe</code> holds multiple Semaphore handles named <code>DaxUseSemaphore_Claude_1.20186...</code> (tied to the Desktop Bridge / Desktop App Converter runtime used to run the packaged Win32 app). These may be contributing to, or be a symptom of, the same underlying teardown failure.</p>
<h2>Tested (all failed to resolve without reboot)</h2>
<ul>
<li>Manually killing <code>cowork-svc.exe</code> in Task Manager — no effect</li>
<li>Restarting the AppX Deployment service (<code>Restart-Service -Name AppXSvc -Force</code>) — no effect</li>
<li>Confirmed via <code>Get-AppxPackage -Name "Claude" | Select Name, PackageFullName, Status</code> that the package registration itself is healthy (<code>Status: Ok</code>) — not a corrupted registration issue</li>
<li>Killing the specific <code>svchost.exe</code> PID holding the <code>Container_Claude_...</code> job handle (via Resource Monitor) — Windows immediately respawned a new <code>svchost.exe</code> under a new PID to take over the same service group; the block persisted</li>
<li>Full system reboot → only fix that works</li>
</ul>
<h2>Confirmed underlying cause (Event Viewer + folder check)</h2>
<p>Windows Event Viewer shows Event ID 2562 from <code>Microsoft-Windows-AppXDeploymentServer/Operational</code>, logged around the time of a failed relaunch attempt:</p>
<pre><code>MSIXDeployment / windows.applicationData / DeleteMachineFolder
Package Claude_1.20186.0.0_x64__pzs8sxrjxfjjc removed machine folder
C:\ProgramData\Microsoft\Windows\AppRepository\Families\ApplicationData\Claude_pzs8sxrjxfjjc:
The system cannot find the path specified.
</code></pre>
<p>Manually verified afterward:</p>
<pre><code class="language-powershell">Test-Path "C:\ProgramData\Microsoft\Windows\AppRepository\Families\ApplicationData\Claude_pzs8sxrjxfjjc"
Returns: False
</code></pre>
<p>This folder is missing even outside the crash window (confirmed while the app was otherwise stuck/unable to launch), not just transiently during the failed relaunch. This means:</p>
<ul>
<li>On relaunch after a crash, Windows' AppX deployment service attempts an MSIX servicing operation that includes a <code>DeleteMachineFolder</code> step against this path.</li>
<li>That step fails immediately because the folder doesn't exist.</li>
<li>The deployment operation appears to error out mid-flight without rolling back cleanly, leaving the AppContainer job object (<code>Container_Claude_...</code>, see below) stuck in a "still in use" state under <code>svchost.exe</code>'s job tracking.</li>
<li>Because the underlying missing-folder condition is persistent (not cleared by reboot), this will recur on every subsequent crash until the app's data folder is properly repaired/recreated.</li>
</ul>
<h2>Timeline reconstructed from <code>C:\ProgramData\Claude\Logs\cowork-service.log</code></h2>
<p>The service log (not reviewed at the time of the original write-up) corroborates the crash/stuck-relaunch pattern with a precise, quantified timeline for one occurrence on 2026-07-13:</p>
Time | Preceded by clean stop? | Notes
-- | -- | --
(before 21:16) | — | Original unexpected app closure. Not visible in this log — cowork-svc.exe crashing doesn't log its own death.
21:16:01 | ✅ (stop at 21:16:00) | User manually stopped the service as a troubleshooting step, then restarted it — relaunch still fails.
21:16:34 | ❌ | First occurrence of the no-clean-stop signature.
21:19:11 | ❌ |
21:19:16 | ✅ (stop at 21:19:12) |
21:22:52 | ❌ |
21:25:09 | ✅ (stop at 21:25:09) |
21:25:40 | ❌ |
21:26:54 | ✅ (stop at 21:26:53) |
21:32:05 | ❌ |
21:47:32 | ❌ |
21:47:33 – 22:21:24 | — | 34-minute gap, nothing logged — likely the window spent on the workarounds listed above, before proceeding to a full reboot.
22:21:24 | ❌ (different cause — see below) | This attempt succeeded — app launched normally, matching "only reboot fixed it." No-stop here reflects the OS killing everything at reboot, not a repeat of the stuck-lock failure.
<p><strong>Net result:</strong> 7 of the 11 restarts during troubleshooting (21:16:34, 21:19:11, 21:22:52, 21:25:40, 21:32:05, 21:47:32, 22:21:24) show no clean stop logged beforehand. Of those, 6 (all but the final, post-reboot one) share the same mechanism: the previous attempt's <code>cowork-svc.exe</code> never registered a proper shutdown before the next attempt started. The 4 "clean stop" restarts (21:16:01, 21:19:16, 21:25:09, 21:26:54) are the moments something in between — a manual kill, or a Windows timeout — let it register a stop before the next attempt.</p>
<p>This is the more precise failure mode: it isn't just "the app crashed once, then relaunch fails" — it's "when the launch hits the file lock, the service itself doesn't shut down cleanly, so each retry piles a new attempt on top of a service that never cleanly exited from the last one." That's consistent with the AppContainer job staying alive in the background even though nothing appears to be running, and it's a stronger signal than a simple one-time crash: the failure to open <em>is itself</em> what prevents a clean stop, which is exactly what you'd expect if the stuck job/file-lock is blocking the shutdown path too, not just the startup path.</p>
<p>One log line present on every single start (both clean and crashed) is worth flagging separately in case it's relevant: <code>Warning: failed to open service for recovery config: Access is denied.</code> This appears consistently regardless of shutdown type and may be an unrelated SCM permission quirk — but it's worth Anthropic ruling out explicitly rather than assuming it's benign.</p>
<h2>Post-reboot contrast</h2>
<p>After rebooting, the app launched successfully. The <code>CoworkVMService</code> event logged on this successful start was simply "Claude VM Service starting" with a reference to detailed logs at <code>C:\ProgramData\Claude\Logs\cowork-service.log</code> — no folder-not-found or deployment error accompanied it. This is a clean contrast to the failed relaunch attempts, which specifically triggered the <code>DeleteMachineFolder</code> path-not-found error.</p>
<p>This strongly suggests a repair or reinstall (not just a reboot) is needed to permanently resolve this, since reboot only clears the immediate stuck job/lock state — it does not recreate the missing <code>ApplicationData</code> folder, so the same failure will repeat after the next crash.</p>
<h2>Why this matters</h2>
<p>Even directly targeting and killing the process holding the job handle doesn't release it — Windows simply reassigns the service group to a fresh <code>svchost.exe</code> instance rather than releasing the stale job object. This indicates the AppContainer job's state is tracked at a level that isn't cleared by process-level intervention, only by a full session/kernel reset (reboot).</p>
<p>The <code>cowork-service.log</code> timeline above sharpens this conclusion: the failure mode isn't just "the app crashed once, and relaunch happens to fail afterward." It's that <strong>the failed-launch path itself doesn't shut the service down cleanly</strong> — 6 of 7 no-clean-stop restarts occur specifically when retrying on top of the stuck file lock, not as isolated one-off crashes. That means the same stuck-lock condition that blocks startup is also preventing a clean stop, which is consistent with the AppContainer job never being released: the job stays alive in the background even though nothing user-visible appears to be running, so neither the next launch attempt nor the current instance's own shutdown can complete cleanly.</p>
<p>Sign-out was not tested as a lighter-weight alternative to reboot, since it also risks unsaved app state — but if it were confirmed to work, that would narrow the stale state to session-level rather than full boot-level. Untested here, but worth Anthropic checking as a possible faster user-facing recovery path if the underlying job can't be fixed to release cleanly on crash.</p>
<h2>Ask</h2>
<ul>
<li>The app (or its installer/updater) should ensure <code>C:\ProgramData\Microsoft\Windows\AppRepository\Families\ApplicationData\Claude_pzs8sxrjxfjjc</code> exists and is valid, and should tolerate/recreate it if missing, rather than letting the <code>DeleteMachineFolder</code> MSIX servicing step fail outright when the path is absent.</li>
<li>The AppX deployment operation triggered on relaunch should roll back cleanly if a step like <code>DeleteMachineFolder</code> fails, instead of leaving the AppContainer job object (<code>Container_Claude_...</code>) in a stuck "in use" state.</li>
<li>Would help to know if the failed-launch path skips releasing the AppContainer job object when it hits the stuck file lock, and whether that can be fixed so a clean job teardown happens even when launch fails (not just on a graceful exit). The service log shows 6 of 7 no-clean-stop restarts occurring specifically on retries against the stuck lock — i.e. the failure to open is itself preventing a clean shutdown, not just blocking startup. Worth checking whether <code>cowork-svc.exe</code> can be made to log (or attempt) cleanup even when a launch attempt fails partway through.</li>
<li>Is there a way to force-release the job/lock via a repair/reset routine (similar to <code>wsreset</code> for other AppX apps) without requiring a full OS reboot, once the missing-folder condition is fixed?</li>
<li>Worth investigating whether the <code>DaxUseSemaphore_Claude_...</code> semaphores held by <code>services.exe</code> are related or a separate leak.</li>
<li>Worth ruling out whether <code>Warning: failed to open service for recovery config: Access is denied.</code> (logged on every single service start, clean or crashed) is related or a separate, benign permission issue.</li>
</ul>
<h2>Suggested workaround for other affected users</h2>
<p>After the next unavoidable reboot, run a Repair (not just relaunch) via Settings → Apps → Installed apps → Claude → Advanced options → Repair, to attempt to recreate the missing <code>ApplicationData</code> folder. If Repair doesn't recreate it, a full uninstall/reinstall may be required — a plain reboot only clears the immediate stuck lock, it does not fix the underlying missing folder, so the same crash-triggered lock is expected to recur.</p>
<h2>Environment</h2>
<ul>
<li>OS: Windows 11 Home, build 10.0.26200</li>
<li>Claude Desktop version: 1.20186.7.0 (confirmed current via <code>Get-AppxPackage -Name "Claude"</code>)</li>
<li>Trigger: unexpected/crash shutdown of the app (not a normal close)</li>
<li>Confirmed via: Task Manager, Resource Monitor (Associated Handles), Process Explorer (Sysinternals), <code>C:\ProgramData\Claude\Logs\cowork-service.log</code></li>
</ul></body></html><!--EndFragment-->
</body>
</html>
+1 — we hit what looks like the same post-crash lockout, with extra data that may help.
Windows 11 Pro 26200, Claude Desktop (MSIX
Claude_1.24012.9.0_x64__pzs8sxrjxfjjc). Timeline on 2026-07-27:Application Hangonconhost.exebefore each crash).Microsoft-Windows-AppXDeploymentServer/Operationallogged cascades of404 ... 0x80073D02(files in use),8107(package integrity validation) and8104(Trust Label,0x80070057) — i.e. Windows was attempting deployment operations against the package while orphaned child processes still held package files open. The repair only succeeded during the restart window.So from our side the sequence is: subagent process storm → app crash without cleanup → orphaned handles keep the package "in use" → Repair/Reset/relaunch all fail until session teardown. Consistent with the orphaned Silo/Job hypothesis here. Happy to provide Event Viewer exports.
Confirming another occurrence of the orphaned Silo/Job launch failure, as a follow-up to the GPU-crash → MSIX brick reports in #81840 / #81756.
Environment: Windows 11 Pro 26200, Claude Desktop (MSIX). 5th GPU-crash →
Modified, NeedsRemediationbrick on this machine since 2026-07-28.Timeline (2026-08-04, JST):
GPU process gone: reason: 'crashed'in main.log, app version 1.24012.9.0). Package immediately becameModified, NeedsRemediation.Add-AppxPackage -ForceUpdateFromAnyVersion -ForceApplicationShutdownwith the latest official MSIX → package updated to 1.24012.11.0, Status: Ok.Microsoft-Windows-AppModel-Runtime/AdminEventID 215:0x80070020: ... error during job conversion, cannot create Desktop AppX container for package Claude_1.24012.11.0_x64__pzs8sxrjxfjjc(twice per attempt)0x80070020: ... cannot create process [LaunchProcess]Ruled out: the packaged Windows service (
CoworkVMService/ cowork-svc.exe). From an elevated shell I stopped the service, verified the process was gone, and retried activation — identical 0x80070020 job-conversion failure with zero package processes running. So this is not a process/file lock that can be cleared from user land, consistent with the orphaned Silo/Job diagnosis in the OP.Will follow up to confirm whether logoff/reboot restores activation (expected per this issue).
Follow-up to my previous report above.
The 2026-08-04 occurrence did recover after a full Windows reboot: Windows booted at 21:47 JST and Claude Desktop 1.24012.11.0 launched successfully at 21:49.
However, the exact Event ID 215/208 +
0x80070020launch failure recurred on 2026-08-05 during the normal auto-update path from 1.24012.11.0 to 1.25927.0.0.Importantly, this recurrence was not preceded by a GPU crash.
Environment
Claude_pzs8sxrjxfjjcClaude_1.25927.0.0_x64__pzs8sxrjxfjjcThe registered installation path is under:
Timeline (2026-08-05, JST)
DeferRegistrationWhenPackagesAreInUse.Claude_1.24012.11.0is still running, soClaude_1.25927.0.0is marked for deferred registration.main.logrecords:``
``beforeQuitForUpdate handler fired, going down for update
TerminateSingleServicefor the oldCoworkVMService.C:\ProgramData\Claude\Logs\cowork-service.logrecords:``
``Graceful shutdown failed, forcing termination:
HcsShutdownComputeSystem failed with HRESULT 0x0/0x80070032
Claude_1.25927.0.0completed successfully.0x80070020during Desktop AppX container/job conversion.RepairAppRegistrationterminates and reinstallsCoworkVMService, then again reports Event 400 success.0x80070020sequence repeats.Current state
Get-AppxPackage -Name Claude: Version1.25927.0.0, StatusOkCoworkVMService: Running / Automatic, using the new1.25927.0.0package pathhcsdiag listshows no remaining compute systemchrome-native-host.exeprocess from the previous version remains alive and its copied binary hash differs from the current package binary, but this appears separate from the AppX job-conversion failureThis recurrence appears to connect the updater/service shutdown problem discussed in #83968 and #84005 with the orphaned Silo/Job activation failure in this issue. Deployment and service replacement both report success, but the user-session AppX activation state is left unusable.
The current occurrence has not yet been cleared by logoff/reboot. I will update again after confirming the recovery result.
Additional diagnostic data confirming the leaked-silo theory, and pinpointing the specific kernel object that stays pinned.
Environment: Claude Desktop
1.25927.0.0(MSIX,Claude_pzs8sxrjxfjjc), Windows 11 26200.8893, x64, Fast Startup disabled.Repro on this machine: the app launches successfully exactly once per boot. After it exits, every subsequent launch fails with "Another program is currently using this file" and the same events you cited:
The pinned object is the package's Helium registry hives
The leaked silo shows up as a measurable, still-mounted pair of package registry hives:
Both are locked. Restart Manager (
RmGetList) attributes the handles to:Because the holders are the kernel and the
Registryprocess, no amount of killing user-mode processes can release them — which I think explains a lot of the confusion across the duplicate reports.Control experiment: locked hives ⟺ app running, Claude is the sole exception
I tested
User.datlock state across all 25 installed MSIX packages on this machine and cross-referenced whether each app was running:| Result | Count | Examples |
|---|---|---|
| Locked and running | 5 | MSTeams, WhatsApp, WindowsTerminal, WidgetsPlatformRuntime, Client.WebExperience |
| Unlocked and not running | 19 | OpenAI.Codex, Copilot, Paint, Notepad, Photos, ScreenSketch, … |
| Locked and NOT running | 1 | Claude |
The invariant holds perfectly for every package except Claude. Its hives are stranded — mounted with no process to justify them.
No process is running in the Claude container
Enumerating by package identity rather than by path —
GetPackageFamilyName()on every PID, sinceGet-Processcannot read.Pathfor protected packaged processes — returns zero processes in the Claude container, while correctly listing 60+ for Teams, Outlook, WhatsApp, etc.This rules out the "orphaned packaged child process pins the container" explanation offered in #73107, #84792 and #77379, at least for this reproduction. There is nothing left to kill; only the hive mount survives.
Verified non-fixes
All performed elevated, with the app not running, re-testing hive lock state after each:
| Attempt | Hives released? |
|---|---|
|
Stop-Service CoworkVMService -Force(confirmed Stopped, process gone) | No ||
Restart-Service AppXSvc -Force| No ||
Add-AppxPackage -DisableDevelopmentMode -Register ...\AppxManifest.xml(reported success) | No || Full reboot | Yes |
Note this contradicts the suggestion in #49655 that the Helium hive locks are held by
cowork-svc.exe: I stopped that service completely and confirmed the process was gone, and the hives stayed locked.cowork-svc.exeis not the holder — the kernel is.One-line detection
Useful for anyone triaging this, and as a post-fix regression check — with Claude not running, this should print
UNLOCKED:Red herrings ruled out on this machine
In case they're absorbing triage time elsewhere: package registration status is
Ok; ACLs on the package folder are byte-for-byte the same shape as a healthy package (compared against MSTeams);claude.exeitself is not locked (opens cleanly even withFileShare.None); AppxSignature and declared dependencies are fine; Defender has zero detections and no relevant ASR/CFA blocks; and theCode Integrity was unable to load ...\AppxMetadata\CodeIntegrity.cat (0xC000003A)warnings are benign — the OpenAI Codex package logs them too and launches fine, since directly-distributed MSIX packages don't ship that catalog.Also worth flagging: once the app is in this state it writes nothing to
%APPDATA%\Claude\logs\main.log— the last entry is from the final successful launch. Anyone relying on the app's own logs will see no evidence at all; the signal is only inMicrosoft-Windows-AppModel-Runtime/Admin.Ask
Whatever cleans up the silo on exit isn't unmounting these two hives. If teardown can't be made reliable, an explicit unmount (or a self-heal that detects the stranded hives at launch and clears them) would turn a reboot-per-session bug into a non-issue.
3rd occurrence on this machine in 9 days — this time captured end-to-end with event logs: deferred-registration update + slow old-app shutdown → post-update relaunch hits 0x80070020, and the condition then persists (orphaned Job/Silo)
Follow-up to my 2026-08-04 comment. Environment: Windows 11 Pro 25H2 (build 26200), Claude Desktop MSIX updating 1.26832.0.0 → 1.28929.0.0.
Timeline (JST, 2026-08-12)
Addoperation withDeferRegistrationWhenPackagesAreInUse, AppXDeploymentServer Event 603; sourcedownloads.claude.ai). At 08:58:46, Events 638/658: "package could not be updated because the affected app is running" → marked for deferred registration. Correct behavior so far; 1.26832 kept running all day.main.log:beforeQuitForUpdate handler fired, going down for update. Simultaneously the deferredRegisterran (RegisterByPackageFamilyName,ForceApplicationShutdownOption 0).main.logwas still writing at 17:28:50). The old version's Desktop AppX container{C8D22D79-…}was destroyed at 17:29:03 (Event 217), CoworkVMService stopped.0x80070020: … error converting the job— container creation failed) then Event 208 (LaunchProcessfailed). The app never reappeared; no furthermain.logwrites.{99AEB409}was created successfully andcowork-svc.exe(PID 70148) was added to it ("Service ready" in cowork-service.log). So container creation is not blocked wholesale — it is the app's launch that stays broken.shell:AppsFolder\Claude_pzs8sxrjxfjjc!Claude, ~11 minutes later: identical Event 215 ×2 + Event 208 with 0x80070020. So this is not a one-shot race; once hit, the failure persists exactly as described in the OP (orphaned Silo/Job, per-user-session), until sign-out/reboot.Reading of the data
The deferred-registration mechanism itself worked as designed. The failure is in the post-update auto-relaunch racing the teardown of the old version's AppX container job: a heavy Electron instance can take tens of seconds to exit, and the relaunch fired ~1 second after the old container was destroyed, hitting the job-conversion sharing violation. Once that first launch fails, the kernel is left in the known orphaned-Job/Silo state that only sign-out or reboot clears — so a single lost race bricks the app for the rest of the user session.
Suggestion
After
beforeQuitForUpdate, the updater/relaunch step could wait for the old package's Desktop AppX container to be fully destroyed (or retry the launch with backoff when hitting 0x80070020) instead of launching immediately after teardown.History on this machine
Two of the three were triggered by the restart-to-update flow. Likely related: #83932 (auto-update deploying into running claude.exe), #48003 (same 0x80070020 after update).
Independent confirmation on Claude Desktop 1.30096.1.0: five orphaned WC/Silo hives and successful no-reboot recovery
Environment
Failure
After the update, launching Claude displayed:
Windows reported that the Claude package status was Ok, but AppModel-Runtime recorded:
Automatic package re-registration and the Windows Repair operation did not resolve the failure.
Important distinction from a normal lingering-process problem
Despite there being no remaining Claude process, the Windows hivelist contained five Claude-specific registry hives under \REGISTRY\WC\Silo.
These consisted of:
Both User.dat and UserClasses.dat remained exclusively locked. This appears to be an orphaned AppX silo or container state rather than a Claude executable file being used by another ordinary process.
No-reboot recovery
Using the community recovery approach already discussed in this issue, a narrowly restricted helper was run as NT AUTHORITY\SYSTEM. It enabled only the required backup and restore privileges and used NtUnloadKey2 with REG_FORCE_UNLOAD.
Targets were enumerated dynamically. A hive was eligible only when:
No GUIDs, usernames, SIDs, or profile paths were hardcoded.
Result
This recovery method is experimental and community-derived. It should not be treated as a general-purpose registry cleanup operation. Killing System, Registry, or vmcompute would be unsafe and was not done.
The recovery result strongly suggests that the update or immediate post-update relaunch can leave the old Desktop AppX container's WC/Silo hives mounted after its user-mode processes have exited.
Could Anthropic please investigate:
I can provide sanitised diagnostics or the restricted helper source privately if a maintainer needs them.
Confirming this on Windows 11 Pro 10.0.26200, and I have four data points that I don't think are in the thread yet. One of them identifies which container is the orphan, which may point straight at the missing teardown.
1. The trigger was a clean quit-for-update, not a crash
The issue describes the orphan arising after a crash. Mine arose from a completely orderly shutdown.
%APPDATA%\Claude\logs\main.logends with a textbook graceful Electron quit — no exception, no renderer/GPU crash, no truncation:The log then simply ends because the process exited on purpose. 33 seconds later (22:30:02) the first
0x80070020appears, and the app never launched again. Greps across all log rotations forunhandled, renderer/GPU crash markers,quitAndInstall,EPERM,sharing violation,singletonreturn nothing anywhere near the incident.The same
beforeQuitForUpdateflow had succeeded 18 hours earlier on the previous build:2026-08-12 04:30:38 beforeQuitForUpdate→04:31:09 Starting app { appVersion: '1.28929.0' }, a 31-second quit-and-relaunch.So the orphan is not exclusive to the crash path — a normal stealth-update package swap reproduces it. That widens the repro considerably.
2. The orphaned container belongs to the previous package version — probably the key detail
This is the part I haven't seen reported. At logoff, Windows logs the orphan being destroyed and names it:
1.28929.0.0is the OLD build. Its package folder had been removed fromC:\Program Files\WindowsApps\during the 8/13 19:49 update — 34 hours earlier. The container object outlived its own package, its processes, and the entire update.The container GUID epochs make the age visible. The orphan is
{B1E5026D-96CD-…}; every container created after the recovery is{2529xxxx-989D-…}/{BC1Bxxxx-987B-…}. Different epoch, consistent with an object created before the swap and never released.65 seconds after the orphan died, the launch that had failed on every attempt for 34 hours (20 × Event 215 — it fires twice per attempt, so ~10 attempts) succeeded on the first try:
Reading: because the package family name (
Claude_pzs8sxrjxfjjc) is shared across versions, the outgoing build's container holds the family's container slot. The incoming build can never convert its own job to a silo, so every activation returnsERROR_SHARING_VIOLATIONuntil the session dies. If that's right, the bug is a missing container teardown on the outgoing version during a package swap, not anything in the incoming build's startup.3. Version boundary (the report's "Last Working Version" field is blank — here's mine)
Every Event 215 in my entire retained
AppModel-Runtime/Adminlog (1,569 records) belongs to one build:| Version | Installed | Event-215 failures |
|---|---|---|
|
1.26832.0.0| 8/06 | 0 ||
1.28929.0.0| 8/12 | 0 — a true zero, inside the retention window ||
1.30096.0.0| 8/13 16:18 | 0 (superseded 3h later, never activated) ||
1.30096.1.0| 8/13 19:49 | all 20 |Failures began at
1.30096.1.0's first activation attempt, ~2h40m after install. Last known good:1.28929.0.0. Also worth noting: 20 of 20 Event-215s on this machine are Claude — no other packaged app has ever hit "converting the job" here, so this isn't a general AppX-subsystem fault on my box.4.
cowork-svc.execan be ruled out — there's a clean controlI saw #57221 attribute this to
CoworkVMServiceclaiming the Job Object. On this machine that's not it, and the recovery produced an unusually clean natural experiment.First, direct test — with the service stopped and zero package processes alive, and the service's own container confirmed destroyed:
Second, and better:
cowork-svc.exeruns in session 0, which a logoff does not touch. Across the recovery it was the same process instance — same PID, created 07:34:13 — running unchanged during every failure and during the 08:22:14 success. One variable changed between failure and success (the session, and with it the orphaned container), and the service wasn't it.Invoke-CommandInDesktopPackage— a different activation path entirely — fails identically, which places the fault in container creation rather than in any launcher.Two things that may save other people time
603 RegisterByPackageFullName … RepairAppRegistrationOption→649 ACLs repaired successfully … Register next time should succeed→400 finished successfully. It ran ~11 times on my machine and never helped. Anyone matching those register events to the failures should note the millisecond ordering: the register follows the error and is a reaction to it, not a cause.1.30096.1.0.Suggested repro
beforeQuitForUpdate). No crash needed.Microsoft-Windows-AppModel-Runtime/Admin— then log off and inspect the Event 217 at logoff and read which package version the destroyed container names. On my machine it named build N, not N+1.Environment
Happy to pull any further logs if useful — I still have the full deployment and runtime traces from the failure window.
Follow-up with a contrast case from the same machine ~2 hours later: an update swap that went correctly. Since this bug is intermittent, a clean swap sitting next to a failed one on identical hardware may be more useful than another failure report.
A successful swap, same machine, same day
1.30096.5.0staged while I was on1.30096.1.0, and Windows deferred it correctly:I then closed the app by hand and reopened it. The swap applied and the new build launched first try:
Both outgoing-version containers were destroyed before the new one was created — precisely the teardown that did not happen on 8/13. Event 215 count unchanged at 20; the old package folder was removed from
WindowsAppscleanly.The difference — a lead, not a finding
| When | Quit path | Result |
|---|---|---|
| 8/13 22:29 |
[stealth-update] Triggering stealth update after idle timeout— app quit itself while idle | container leaked || 8/15 08:33 | user closed the window by hand | clean teardown, swap applied, launched |
That points at the idle-timeout stealth-update path possibly not fully unwinding the container when nobody is at the keyboard.
Counter-evidence, so nobody over-reads this: my 8/12 04:30 swap was also a stealth
beforeQuitForUpdatequit and it succeeded (04:31:09 Starting app { appVersion: '1.28929.0' }). So it is not "stealth always leaks" — it stays intermittent, and this is n=1 on the manual path. Treat it as a place to look, not a conclusion.Net for anyone hitting this
The logoff recovery held. After it, a normal close-and-reopen and a full package swap both worked with no reboot, no reinstall, no repair, and no re-registration — the machine has now been up continuously for 2d 08h across the whole failure-and-recovery cycle.
If someone can reproduce on demand, the highest-value artifact would be the Event 217 at logoff naming which package version the surviving container belongs to. On my machine it named the outgoing build, which is what makes a missed teardown on the old container the most likely culprit.
Fresh occurrence today, updating
1.30096.5to1.32352.1.0. That starts from the build @HarvestEdge's successful swap landed on in their 8/15 contrast case, so the next swap from the same build failed here. I had written a much longer comment before reading this thread properly, then found most of it was already above, so I have cut it to the one thing I could not find anywhere here: a logged failure on the outgoing package during the swap, which looks like direct evidence for @HarvestEdge's missing-teardown theory.Environment: Windows 11 Pro 10.0.26200, x64, MSIX
Claude_pzs8sxrjxfjjc, SignatureKind Developer. Update 18 Aug 2026, cleanbeforeQuitForUpdatequit, no crash.The outgoing package's runtime status transition fails with ACCESS_DENIED
@HarvestEdge's reading is that the outgoing build's container holds the family's container slot and is never torn down, so the incoming build can never convert its job. On my machine there is an event that shows the outgoing package failing to complete its state transition at exactly that moment.
Microsoft-Windows-AppModel-Runtime/Admin, in order:Event 67 with
0x5is ACCESS_DENIED, it is the only failure logged against the outgoing package during the handover, and it lands one second before the first0x80070020on the incoming one. The outgoing package never reaches0x480000.I grepped the whole thread and could not find event 67,
0x280000or0x480000mentioned by anyone, so flagging it in case it is useful. If the missing teardown is the bug, this looks like the moment it fails rather than an after-effect. @HarvestEdge saw the same thing from the other end, with the Event 217 at logoff naming the old build. Two views of one incomplete retirement, possibly.For the record on my machine the container destroy at 11:14:47 did fire for the old package, so the object was not simply left undestroyed. Something in the status transition after it still failed.
Minor detail on the CoworkVMService question
@HarvestEdge's control experiment above (service stopped, zero package processes, launch still fails, service restarts only after the 215) is more rigorous than anything I ran, and my data is consistent with it rather than with the service being the blocker. Adding one small piece since the "just stop the service" advice keeps circulating from #57221, #76357 and #61635:
No recovery actions configured, so when people report the service coming back seconds after they stop it, that is not the service restarting itself, it is activation starting it. I confirmed three of the
cowork-svc.exePIDs in my event 211 lines againstWin32_Processcreation times, and each was a brand new process created in the same second as its activation attempt: 17832 at 11:15:28, 19800 at 11:24:21, 8348 at 11:26:12. So stopping it beforehand cannot work on the launch path, which matches the ordering @HarvestEdge measured.I also confirmed
Set-Service CoworkVMService -StartupType Manualreturns Access denied from an elevated prompt, same as thesc.exe configfailure reported in #57371. There is no user-side mitigation available through the service.Other details from my incident
(Get-CimInstance Win32_Process | Where-Object { $_.ExecutablePath -like '*WindowsApps*Claude*' }).Countreturned 0, andGet-AppxPackage -Name Claudereported1.32352.1.0withStatus: Ok. Deployment succeeded, only activation was broken. Same as several reports above.main.log, if it helps confirm labolabo's 8/12 timeline:11:14:17 beforeQuitForUpdate handler fired, then11:14:27 Starting app { appVersion: '1.30096.5' }followed immediately byNot main instance, returning early from app ready. The relaunch fired ten seconds after the quit handler and still found the old instance alive.1.32352.1.0.On the user experience side
I want to add support to the point @adpena made above, because I do not think it is a side issue.
The practical effect of this bug is that updating Claude Desktop has become something to avoid. That is a strange position to be in with a desktop app. On this machine an update has a meaningful chance of ending in an app that will not start, and until you find this thread the only visible information is a dialog naming a file, which points nowhere near the actual problem. The recoveries that work are a session logoff, a reboot, or force-unloading kernel registry hives as SYSTEM. None of those are reasonable things to ask a user to do, and the first two mean tearing down everything else you had open.
For anyone running long sessions, terminals, IDEs, local services or agent tooling, the cost of a failed update is not the app, it is the whole working session. So the rational response is to defer updates, which then leaves people on older builds. That seems like the opposite of what anyone wants, and it is worth weighing when this gets prioritised. A supported no-reboot recovery, or an updater that verifies the app actually launches before declaring the swap done, would change the calculation a lot.
Happy to pull more logs from this incident if any of the above is worth chasing. I still have the full AppModel-Runtime and AppXDeploymentServer traces for the failure window.
Consolidated index of related reports
Since I went looking anyway: below is every report of this bug and its immediate neighbours that I could find, with state as of 18 Aug 2026. Some are already linked individually in comments above, but not in one place, and about a third of them have never been linked here at all. The grouping is my reading of the signatures rather than anything authoritative, so corrections welcome.
Same activation failure as this issue (Event 215/208,
0x80070020, orphaned container or silo, recovered by logoff, reboot, or the SYSTEM hive unload described above):Container_Claude_...job held bysvchost.exe1.32352.0.00x80070020signaturecowork-svc.exelocks the packageDeployment side, where the update or install fails rather than the launch (
0x80073CF6,0x80073CF9,0x80073D02,0x80073D28):Modified, NeedsRemediation; independently reports the sameSet-Serviceandsc.exe configaccess-denied result I hit, and attributes the service DACL to TrustedInstallerclaude.exeandcowork-svc.exeWindowsApps\Deleted, suggests moving to wingetWIN32_PACKAGED_PROCESSandAUTO_STARTmanifest problemService configuration:
sc.exe configis refusedAdjacent triggers that end in the same state:
That comes to 27 reports, 14 open and 13 closed, spanning 15 Feb to 18 Aug 2026, on x64 and ARM64, on personal machines and on managed fleets, and still reproducing on
1.32352.1.0. Eight of the thirteen closures were duplicate or not planned.Two of those, #87607 and #87610, were filed today, within minutes of each other and while I was writing this. That is probably the clearest argument for consolidating: people keep independently rediscovering the same mechanism, writing it up carefully, and filing fresh, because the existing reports are scattered across two dozen issues and the majority of the closed ones were never triaged.
One last thing that is easy to mistake for this bug and does not appear anywhere in this thread. If the symptom is "Couldn't finish loading" with error code
1XAF0WC, andlogs\claude.ai-web.logshowsFailed to fetch dynamically imported module, that is a stale renderer cache (#81961), cleared by deletingCache,Code CacheandGPUCachefrom the app data directory with no session teardown required. Different bug, unrelated fix, but the two get conflated because the user-visible failure is again "the app broke after an update". On MSIX installs that directory is%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claude, not%APPDATA%\Claude, which is another thing that costs people time.Reproduced again today (2026-08-19), update-triggered variant — 3rd occurrence of the update-triggered pattern on the same machine (also 08-07, 08-12; 08-14 update was fine).
Environment: Windows 11 Pro 26200 (25H2), Claude Desktop MSIX 1.32352.1.0 → 1.32885.1.0
Timeline (AppModel-Runtime/Admin, JST):
Claude_1.32352.1.0runtime status 0x280000 → 0x200000 (shutting down for update)Claude_1.32885.1.0Register completes (AppXDeployment 400/613, overall 36 s,Gap: 34515 ms= waiting for old processes)0x80070020 ... error converting the job×2 → 208Cannot create the process ... [LaunchProcess]— the automatic relaunch failscowork-svc.exe(PID 91380) does get its container created successfully → the block is on the app launch path only, same as my 08-12 analysisshell:AppsFolder\Claude_pzs8sxrjxfjjc!Claude→ identical 215/208 sequence, so once the race is lost the orphaned Job persists for the whole user sessionGet-AppxPackage Claude→ Status: Ok the whole time (not a NeedsRemediation case), CoworkVMService Running/AutomaticRecovery expected to be sign-out/sign-in (as before). No new information on the root cause; posting for frequency tracking — on this machine the updater loses this race 3 out of 4 recent updates.
Follow-up to my report above (same 2026-08-19 incident,
1.32352.1.0 → 1.32885.1.0): recovered without sign-out/reboot using the SYSTEM force-unload workaround described earlier in this thread.hivelistshowed 8 orphaned\REGISTRY\WC\Silo*hives backed by the package'sHelium\User.dat/UserClasses.dat(both LOCKED, errno 13)NtUnloadKey2(..., REG_FORCE_UNLOAD)under SYSTEM (one-shot scheduled task): 8 → 2 silos, both.datfiles freedshell:AppsFolder\Claude_pzs8sxrjxfjjc!Claudeimmediately succeeded — 10WindowsApps\Claude_*processes, no new 215/208 eventsNo re-register needed this time either (package Status was Ok throughout). That keeps the pattern: the only broken piece after a lost update race is the leaked container silos holding the registry hives; once those are force-unloaded the new build starts fine in the same user session.
The orphaned silo here has a specific, findable cause on my machine: the package's Desktop Bridge ("Helium") registry hives stay mounted after a container crash.
The adjacent
.LOG1/.LOG2files indicate a hive is currently mounted. Creating a Desktop AppX container requires loading those hives; they were already loaded, so the load failed withERROR_SHARING_VIOLATION— the0x80070020in EventID 215, immediately followed by 208:This is why the usual remedies do nothing. Silo-mounted hives live in the container's own registry namespace, not the global one — they are invisible to Task Manager,
handle.exe, andreg query HKU, and are held by the kernel rather than by any user-mode process. Sotaskkill, Settings → Terminate, Repair, Reset, and stopping the packaged service all had no effect. Plain reboots failed too, because the still-registered package and its auto-starting packaged service (CoworkVMService, TYPE 210WIN32_PACKAGED_PROCESS) re-mounted the hive at every boot.What cleared it, in this order:
Get-AppxPackage *Claude* | Remove-AppxPackage— verifyGet-AppxPackage *Claude*returns nothing.sc.exe query CoworkVMServiceshould report the service does not exist.Remove-Item "$env:LOCALAPPDATA\Packages\Claude_pzs8sxrjxfjjc" -Recurse -Force. This succeeds silently once nothing has mounted the hive.Step 4 has to precede step 5. Installing first re-registers the package, re-mounts the hive, and puts you back where you started.
Two diagnostic traps that cost me time:
Get-AppxPackagereportingStatus : Okdoes not rule this out. The registration is fine; the hive is the problem.Caveat: single machine, n=1. I have not reproduced this elsewhere, and I can't say from one host whether the initial container crash has a common trigger.
Recurrence on the same machine as my 2026-08-18 report. Windows 11 Business 25H2 (26200.9106), this time updating
1.32352.1.0to1.34493.1.0, recovered by restart. Same hardware and same reporter, so nothing here independently confirms my own earlier observations, and I've flagged inline where that matters.Before anything else: most of what I was going to post as new is already in this issue family, in #76357 and #83968 rather than here. I went looking after drafting, and I'd rather say so than re-report other people's work. Credits and links at the bottom. The narrow thing I think is actually new is one log line, described next.
The narrow new bit:
close-appwithoutbeforeQuitForUpdate@tonydzi already showed (#76357, 2026-08-12) that the OS-driven deferred registration can fire on its own while the app is still logging
[updater] Staged version ... is still current, with nobeforeQuitline inmain.logat all. My trace is the same path, with one additional detail:main.loghere does record a shutdown line, and it isclose-appwithbeforeQuitForUpdateabsent.That distinction matters because
close-appon its own is not diagnostic. In the only other logs in this family that contain the line (HarvestEdge here, JeKie1408 in #87610), it appears immediately after a successfulbeforeQuitForUpdate, which is why JeKie1408 reasonably read it as reassurance that the app did its part. From my own log, the updater-driven path looks like this:And the 23/08 servicing path looks like this:
So
close-appplusbeforeQuitForUpdatemeans the updater drove it.close-appalone, with the updater still logging deferrals, means something else did. That is a one-line triage signal for anyone reading amain.logfrom this family, and it is the only part of this comment I would call new.The trace
The instance ran continuously from 18/08 20:52 to 23/08 22:49 while three versions stacked up behind it (
1.32885.1.0,1.34493.0.0,1.34493.1.0), with the updater loggingDeferring auto-restart after 117/118/119 hours: Claude is workingthroughout. The deployment side had also been backing off: event638at 22/08 16:25:27 reads "Packages were not updated because affected apps are still running. Running apps: {Claude_pzs8sxrjxfjjc!Claude}, ... Number of previous attempts: 2, Is user session locked: true". That event is itself a deferral recording two prior attempts, so by the handover the deployment side had backed off at least three times.Unchanged boot and logon timestamps rule out shutdown and logoff. The logs do not identify which operation requested the close: there is no event 603 for the 22:48:42 operation, which entered via
679 OnDemandRegisterPackageListand exited via821 During-logon registration, unlike the 09:37 repairs that log603 RegisterByPackageFullName ... ForceTargetApplicationShutdownOption. The same-second correlation with 607/855 associates the close with servicing, but I can't name the caller.No GUI activation followed. In the pre-recovery capture the retained AppModel log contains no event 201 for
1.34493.1.0, while still retaining the old version's 18/08 event 201, so the interval had not rolled out of the roughly 5-day window.main.logends at 22:48:42 and never advances again.Practical consequence, which is really @repko-artem's point rather than mine: the failure only appears the next time someone launches the app, so "worked yesterday, broken this morning, I changed nothing" reports in this family are plausible rather than user error.
Two corrections to my own earlier reasoning
The 210/211 pairs after the swap are the packaged service, not the app. At 22:49:14 a container was created and PID 22740 added, which looks like a successful relaunch. It is
cowork-svc.exe:C:\ProgramData\Claude\Logs\cowork-service.loglogsService readyat 22:49:14.789, and SCM 7045 installs the service the same second. Absence of event 201 corroborates that no application[LaunchProcess]creation was recorded. A 210/211 pair is not a universal service-versus-GUI discriminator on its own; here it is the service log and SCM lifecycle that identify these PIDs. @I083 made the more general version of this point in #77379: the package creates two containers, and deployment destroys only the service's.File mtimes do not establish hive mount time. I initially read
User.datmtime 17/08 19:59 as evidence the hives had been mounted since the 18/08 launch. That is unsound: a mounted hive's mtime updates on flush, so a hive held continuously across five days of use should show a later mtime, not an earlier one.One counting correction as well: this machine shows 8 hive entries across 4 distinct
Silo...GUIDs, which is not "8 orphaned silos". Anyone comparing counts should check both sides are counting the same thing.Confirmations, with the attribution straight
Mounted user hives with no GUI process.
User.datandUserClasses.datwere mounted and failed the exclusive-open test while no Claude Desktop GUI process was alive. I did not test whetherCoworkVMServiceis the holder on this machine; that it is not was established by @tazbdp's and @DevHoracioRodriguez's controls here and by @ostrakographos's ProcMon trace in #42776. Package registration reportedStatus: Okwhile activation failed.Automatic ACL repair does not restore activation, per @HarvestEdge (2026-08-15). Reproduced: each repair cycle logs
649 ... ACLs repaired successfully ... Register next time should succeed, followed by successful registration (400/613) and SCM service reinstallation (7040/7045), and activation still fails. Registration succeeds; activation does not.The
0x5at event 67 on the outgoing package (0x280000 -> 0x480000) is the same signature I reported on 2026-08-18. Same machine and same reporter, so treat it as a recurrence rather than independent confirmation. It does establish that the0x5reproduces across successive update generations here (1.30096.5to1.32352.1.0, then1.32352.1.0to1.34493.1.0). The bit semantics remain inferred:0x400000has never been observed succeeding anywhere in this family, so calling it "the hive-unload step" is still conjecture.Ruled out here
Microsoft.WindowsAppRuntime.2servicing is not involved. Its install completed at 22:48:56, 18 s before the handover, and all three stage operations were no-ops (735 Windows cannot install ... a higher version is already installed). Claude's Register had been de-queued and running since 22:48:42, before the Windows Update activity, so the ordering is backwards for a race.Kernel-Power 566at 09:36:46 reads "The system session has transitioned from 28 to 30. Reason InputAccelerometer", which I can't map to a documented state without SleepStudy data, so I'd treat it as noise rather than causal. It does follow that absence of Power-Troubleshooter events doesn't exclude Modern Standby, since Modern Standby doesn't log S3-style wake events.Speculation, clearly labelled
No evidence for this, offered as something testable. The manifest declares
runFullTrust,packagedServices,localSystemServicesandunvirtualizedResources, and ships a LocalSystem packaged service inside the package identity, so the container's lifetime is referenced by both a user app and a system service. If silo teardown assumes the container dies with the user's app, a split lifetime could break it. That would fit @I083's two-container observation. In the retained logs on this machine, Claude accounts for all 215/208 events and MSTeams, Photos, Terminal and VS Code for none, but that is a roughly 5-day circular log, not a lifetime comparison.Counterexamples worth respecting
I recovered by restart, but that is not universal and I don't want to add to the "just reboot" chorus:
0x80070002variant where two full reboots did not recover, withchrome-native-host.exeinside the package app-data store as the holder.Ask
Seconding @roopsikhaai-web's explicit-unmount or launch-time self-heal request, with one addition that follows from @tonydzi's trace and mine: when servicing is applied outside the updater's own quit-and-relaunch, nothing verifies afterwards that the new version can activate. A post-servicing activation check would surface this immediately and attributably, even without fixing the teardown.
Prior work this refines
DeferRegistrationWhenPackagesAreInUse, that Windows can then never come back to apply it, and that sign-out is the folk cure precisely because sign-out performs the pending registration. His cross-package control (event 215 over three days: Claude 44, every other package 0) also rules out a general AppX fault.beforeQuitline at all, followed by 28 activation attempts with zero package processes alive. This is the closest existing report to the path above; I add only theclose-appdetail.cowork-svc.exeroot cause and replaced it with the chain that still stands: event 658 deferred registration, abnormal container teardown mid-swap, silo hives left mounted,0x80070020. Worth crediting the retraction as much as the finding.Helium\User.dat/UserClasses.datlocks, that they are kernel-level and invisible tohandle64, and thatreg unloadfails as Administrator. Four months before the same files were re-derived on the activation path.Same failure, still open, worth consolidating
taskkill, no reboot. @leifclaesson's three-pinner framing is the clearest in this family.svchost.exeholding\Container_Claude_*is normal for every packaged app, so chasing that handle is a dead end.vmmemCmZygote) holding kernel VSMB/HCS mappings, invisible to Restart Manager.Closed without a fix while still reproducing
0x80070020, never seen by a human.invalid. Contains @TurielD's first report (2026-06-06) that sign-out alone recovers and no reboot is needed.Add-AppxPackage -Registerrecovery that needs no admin.One triage note. The only maintainer action I can find across this family is #81756 being closed as a duplicate of https://github.com/anthropics/claude-code/issues/73694. That issue is open but already labelled
stale, and it is scoped to0x80073D02, the deployment file lock. That is a different mechanism from the0x80070020activation failure discussed here. If #73694 is the designated canonical issue for this family, it may be pointing at the wrong bug.Environment and method
Windows 11 Business 25H2, 26200.9106. Package
Claude_pzs8sxrjxfjjc, sideloaded (SignatureKind: Developer),1.32352.1.0to1.34493.1.0.Recovery: after restart, the exclusive-open test on
User.datandUserClasses.datreturned free at 11:21:59, about 13 s before first launch. No Claude GUI process was running then, though the packaged service had been up since 11:20:32. That was an interactive check and is not captured in my snapshots. First launch succeeded and logged event 201 at 11:22:12. Once the app is running those hives are locked again, and that is the healthy state: the signature is locked with no process in the container, not locked as such.For anyone gathering evidence here,
Microsoft-Windows-AppModel-Runtime/Adminships at about 1 MB and rolls in roughly 5 days, so raise it before you need the history.Microsoft-Windows-AppXDeploymentServer/Operationalcarries the deployment side (603/607/613/638/649/679/821/855) and is where the servicing correlation is visible at all.Independent reproduction, plus a more specific trigger than "crash at startup" — and two more workarounds to cross off the list.
Still present on a much newer build: Claude Desktop
1.37937.1, Windows 11 Home 10.0.26200 (de-DE), non-managed machine. Three occurrences observed: 2026-08-21 (on1.34493.1), 2026-08-25, 2026-08-26. Same0x80070020, sameAppModel-Runtime/Admin215/208 pair.The trigger looks like a deferred-registration race, not a startup crash
In my logs the app does not crash. It quits itself deliberately for the stealth update, then re-activates before the old package's container is gone.
Microsoft-Windows-AppXDeploymentServer/Operational— the new version is installed with registration deferred, because the old one is still running:%LOCALAPPDATA%\Claude\Logs\main.log— the app then quits and the swap is attempted ~3 seconds later:Microsoft-Windows-AppModel-Runtime/Admin:Wedged from then on — every launch reproduces the pair (08:18:26, 08:21:11, 08:26:02, 08:26:04 …). Interestingly one attempt partially succeeds: event 210 creates a container and 211 assigns a process to it, then subsequent container creations fail — so the main process gets in and the children can't follow.
Quit type correlates with whether it wedges
| Quit | Next launch |
|---|---|
|
beforeQuitForUpdate(stealth) 08-21 00:53 | OK ~8 h later, no reboot ||
beforeQuitForUpdate(stealth) 08-21 09:09 | wedged, failed continuously 10:26 → 16:23 || normal
Windows session ending (shutdown)08-25 22:18 | OK next morning ||
beforeQuitForUpdate(stealth) 08-26 08:14 | wedged |The one stealth quit that recovered had a long gap before the next activation; the wedging ones re-activate within seconds. Consistent with a teardown race, though not proof.
Two more things that do NOT recover it
Adding to the list already in this issue:
sc.exe stop CoworkVMService(elevated) — no effect. In my case the service wentSTOP_PENDINGand auto-restarted, but that's not the reason it failed: the container errors at 08:21:11 / 08:21:12 are after the stop. This is worth stating explicitly because #57221 proposes the service as the cause and stopping it as the fix; it isn't sufficient here.IPackageDebugSettings::TerminateAllProcesses(the API behind Settings → Advanced options → Terminate), called on both package full names — returnsS_OK, hives stay locked, next launch still0x80070020.Windows' own repair registration (
RegisterByPackageFullNamewithForceTargetApplicationShutdownOption, RepairAppRegistrationOption) runs automatically on every launch attempt and succeeds each time — which is whyGet-AppxPackagekeeps reportingStatus: Okwhile the app is completely dead. That mismatch sends people down the wrong diagnostic path; the deployment logs look clean and onlyAppModel-Runtime/Adminshows the failure.Confirming the workaround: logoff + login is enough, no full reboot needed.
Partial user-side mitigation
For anyone stuck on this daily: setting the documented
disableAutoUpdatespolicy stops the stealth updater, so the race never fires — then update manually with the app closed.Documented for MDM deployments, but it's a plain registry policy read and appears to work on an unmanaged machine. Obvious cost: no automatic updates, on an app that currently ships roughly daily.
Suggested fix
Since
DeferRegistrationWhenPackagesAreInUsewas requested, the platform will apply the deferred registration on the next natural activation anyway. So:source=windowsStore, drop the self-managed stealth relaunch and let the platform apply the deferred registration at the next launch.0x80070020activation failure and say "sign out and back in to finish updating" instead of surfacing a generic file-in-use error.For those stuck with this bug, I asked Kiro/Claude to build a Powershell script which (for most cases) resolves the issue: https://github.com/Bestehorn/claude-desktop-update-unblock
In some cases, even killing a bunch of depending processes does not resolve this, so you have to log out and then back in, but it mostly works and then let's you update Claude Code properly.
Adding a deterministic trigger plus fresh forensics for this — hit it twice in the last two days with the exact signature described here (Event 215/208
0x80070020"error converting the job" on every launch attempt, only reboot recovers, user-facing dialog "Another program is currently using this file").Trigger identified: the in-app updater's forced shutdown. The app deadlocks while shutting down for the update's register operation, WER hard-kills it mid-servicing, and that kill is what orphans the silo/job.
Timeline reconstructed from
AppXDeploymentServer/Operational,AppModel-Runtime/Admin, WER, and the cowork-service log (2026-08-26, local time, updating 1.37937.1.0 → 1.37937.3.0):Addoperation, deferred registration) while the app is running. No problem at this point.RegisterByPackageFamilyNamestarts withForceApplicationShutdownOption. Same second, cowork-service log shows the app's persistent RPC connection drop (EOF) — the app begins shutting down.0x80070020"error converting the job" / Event 208, containers created then immediately destroyed. Only a reboot recovers.Recurrence data: WER shows MoAppHang for claude.exe 3× in 14 days — 08-13 (1.28929.0.0), 08-15 (1.30096.1.0), 08-26 (1.37937.1.0). Each hang is on exactly the version being replaced that day, i.e., every recorded hang coincides with an update register.
Verified NOT to recover the wedge (all attempted before rebooting):
chrome-native-host.exethat survived from the pre-update package\Container_Claude_<version>job handle in an earlier occurrence — not this time)CoworkVMService(cowork-svc.exe)Container_Claudeor the package family string — this round the stale job appears GUID-named / kept alive by membership, so there is no user-mode handle to closeexplorer.exe "shell:AppsFolder\Claude_pzs8sxrjxfjjc!Claude"— fails identicallySuggested fix direction: either the Electron main process needs to shut down cleanly when the MSIX deployment issues the force-shutdown, or the updater should defer the register until the app has actually exited (staging while running is fine; the forced register racing a hung shutdown is what wedges the machine).
Environment: Windows 11 Pro 10.0.26200, sideloaded MSIX build (
Claude_pzs8sxrjxfjjc).Same failure here on a current build (1.37937.x), and I have two additions that
aren't in the thread yet: the trigger is the in-place MSIX update, not only a
crash, and the occupant of the container is
cowork-svc.exeitself - with aworkaround that actually sticks.
Environment
SignatureKind=Developer, auto-updated fromdownloads.claude.ai(not Microsoft Store)The trigger is a normal, successful update - no crash needed
Microsoft-Windows-AppXDeploymentServer/Operational:The updater downloads, defers registration because the app is running, then ~10
minutes later re-registers with
ForceApplicationShutdownOption. Windows killsthe running app to apply it. Deployment reports success at every step. The app is
unlaunchable from that moment on.
The container is occupied by cowork-svc.exe
Microsoft-Windows-AppModel-Runtime/Admin:PID 59092 is
cowork-svc.exe(CoworkVMService), confirmed by process lookup atthat timestamp. The packaged service is added to the package's container right
before every failure to create one.
Confirming there is no file lock
While the dialog was on screen I ran a Restart Manager (
RmGetList) query againstResult: zero holding processes.
Add-AppxPackage -Register <AppxManifest.xml>also returned success and changed nothing. This matches the thread's conclusion
that "file in use" is only how
0x80070020surfaces.The dialog itself is owned by
sihost.exe(window class#32770), title = thepackage's
app\claude.exepath.Stopping the service is NOT enough - it comes straight back
CoworkVMServiceisWIN32_PACKAGED_PROCESSwithSTART_TYPE 2 (AUTO_START), soit restarts within seconds and re-takes the container. That is probably why
"restart the service" is reported as not working.
Workaround that does stick
plus, so the app does not expect the VM:
Applied on 2026-08-27; service is now
Stopped / Disabled, nocowork-svc.exerunning. Cost: Cowork is unavailable. I have not yet been through an update cycle
with this in place, so I can't confirm it prevents the failure - I'll report back.
Note this is not a supported configuration; Anthropic support explicitly said so.
Side effect worth fixing too
Every update leaves the old package directory behind. On this machine:
AppXDeploymentServerevent1230warns on every update about hardlinks sharedwith those stale folders (
app\chrome_100_percent.pakacross 1.30096.1.0,1.32352.1.0, ...).
Suggested fix
Don't let the packaged service join or hold the package's Desktop AppX container,
or ship
CoworkVMServiceas Manual/Demand start so only the app spins it up.Correcting my earlier comment, and confirming the preceding report's key claim with a controlled contrast.
Correction
I wrote that stopping
CoworkVMServiceshowed it was "not the holder — eliminated." That overreached, and I'd rather it not steer anyone away from the right suspect. The defensible version of my observation is narrower:**Stopping the service is not sufficient.** It is
WIN32_PACKAGED_PROCESSwithSTART_TYPE 2 (AUTO_START), so it returns within seconds and re-takes the container. That is a statement about the workaround, not about causation — and I stated it as the latter.Confirmation: success and failure path on one machine, 18 minutes apart
I happened to catch both paths on the same box today (Windows 11 Home 10.0.26200,
1.37937.1→1.37937.3).Successful launch — the app's own process joins the container:
Event 201 identifies 19824 as the app.
cowork-svc.exewas PID 10400, running since boot, and was never added. App launched normally.Failed launch after the in-place update —
cowork-svc.exejoins instead:PID 31808 is
cowork-svc.exe, created 10:52:47 — verified by process lookup while it was live:No corresponding event 201 appears in the window I captured, consistent with this not being an application activation — the packaged service is placed into the new package's container on its own. The app's subsequent container creations then fail with
0x80070020, and the package stays wedged.So the contrast is: app process in the container → launches fine; service process in the container → every subsequent container creation fails. Same machine, same package family, 18 minutes apart, no reboot in between. That's consistent with the preceding comment's PID 59092 finding rather than with my "eliminated" phrasing.
What I think this narrows it to
The service is
AUTO_START, so after the forced re-registration terminates it (event 9650) it races back up and is placed into the new package's container before the app is activated. Whoever gets there first appears to determine whether the package family is usable until the session ends.That would explain all of the otherwise-confusing observations in this thread at once: why deployment reports success at every step, why
Get-AppxPackagereportsStatus: Ok, why re-registration andReset-AppxPackagechange nothing, why stopping the service alone doesn't help — and why only logoff/reboot recovers, since that is what finally tears the silo down.Shipping
CoworkVMServiceasManual/demand-start, so only the app spins it up after its own container exists, looks like it would remove the race entirely — as the preceding comment suggests.Still unverified
I have not tested whether disabling the service prevents the failure across an update cycle; neither has the preceding reporter. Worth someone confirming before it's treated as a fix. Note also that the two policy values in that workaround (
secureVmFeaturesEnabled,isClaudeCodeForDesktopEnabled) do not appear in the published enterprise configuration docs, and it costs Cowork.The documented
disableAutoUpdates=1policy avoids the trigger instead of the occupant, and is supported — but it means updating by hand on an app currently shipping close to daily.Same signature today (Windows 11 Education 26200, de-DE, sideloaded MSIX, in-place update
1.34493.1.0to1.37937.3.0, updater-drivenbeforeQuitForUpdatequit, first 215/208 one second after the Register completed, then on every launch for 14 hours). I want to add one thing the thread does not have yet: an enumeration of what was actually inside the leaked silo, because on this machine it was neithercowork-svc.exenor a kernel-only artifact, and ending those members recovered the app without logoff, reboot, or the SYSTEM hive unload.The leaked silo had live members, and they were not Claude processes
hivelistshowed the familiar picture (as @Ciki, @adpena, @AccountZero and others documented): one\REGISTRY\WC\Silo<guid>set withHelium\User.dat/UserClasses.datmounted, zero processes with the package identity (tasklist /appsempty forClaude_), all sixHelium\*.dat*files failing an exclusive open.Enumerating every Job object on the system (NtQuerySystemInformation
SystemExtendedHandleInformation, thenQueryInformationJobObjectwithJobObjectSiloBasicInformation= 36 andJobObjectBasicProcessIdList= 3, script below) found exactly one silo that no running app accounted for:telemetryIdsits in the same sequential UUID series as the old app's container{656BD05C-9CD3-11F1-...}from event 217, and 1.67 million processes created over its lifetime is what days of the Desktop app's embedded Claude Code sessions look like. The eight survivors:Git-for-Windows
tail | greppipelines that a Claude Code session running inside Claude Desktop had started five days earlier as background log monitors. Their parentbash.exe/claude.exeprocesses died when the app quit for the update; the grandchildren stayed job members, so the silo never terminated and the hives never unloaded.Three consequences that match observations elsewhere in this thread:
tasklist /appsdoes not list them andGetPackageFamilyName()per PID returns nothing, so @DevHoracioRodriguez's identity-based sweep (which is the right tool for identity-inheriting children) cannot see this class of pinner. Job membership and package identity are different things; only the former keeps a silo alive.taskkill /IM claude*,cowork-svc*,chrome-native-host*,parsecd*): ordinarytail.exe/grep.exenames, dead parents, session 2.handle.exefinds nothing because nothing user-mode holds the hive files or the WC key paths; the pin is membership, as @ZHANGV25 suspected ("kept alive by membership, so there is no user-mode handle to close"). This is the same class as the orphaned elevated member in #73107.The service was not the occupant here
Tested with
hivelistre-read after each step, before touching the members:Stop-Service CoworkVMService(elevated, confirmedStopped, nocowork-svc.exeleft): the service's own silo (software+comhives underProgramData\Microsoft\Windows\WindowsApps\Claude_<ver>\Cache) disappeared. The leaked user silo withuser_sid/user_classesstayed, 6/6 files still locked.Restart-Service vmcompute: no change.So the 210/211 pair right after each Register (service added to a container, as @DrRIH and @Abtomation traced) is real but is a second, separate silo. The one that blocks activation is the old app's user silo, and on this machine it was held up by app-descended processes. That does not rule out the service (or a leaked Cowork VM, #87607) as the pinner in other people's cases; it just means "who is still a member of the old silo" is the question to ask before "who holds a handle".
Recovery without logoff (and without the SYSTEM unload)
Seconds later
hivelisthad no entries for the package, all six hive files opened exclusively, and the nextshell:AppsFolder\Claude_pzs8sxrjxfjjc!Claudelogged 210/211/201 instead of 215/215/208.1.37937.3has been running since, with two terminal-launched Claude Code sessions on the same desktop untouched throughout. Compared with theNtUnloadKey2(REG_FORCE_UNLOAD)route this needs no SYSTEM context and does not yank hives out from under anything.Suggested procedure for anyone stuck
hivelistcheck with no Claude Desktop GUI running: aSilo…user_sidentry forpzs8sxrjxfjjcmeans the old silo is alive.SILOline whosepidsyou cannot attribute to a running app. Check each PID's parent; dead parent plus a shell/tool name is the tell.hivelist, launch. If the silo showsprocs=0and still persists, you are in the handle-pinned case and the SYSTEM unload from earlier in the thread is the next step.<details>
<summary>PowerShell: list every silo on the box with its live PIDs (read-only, run elevated)</summary>
Class 36 fails with error 1505 on ordinary (non-silo) jobs, which is how the script filters them out. Then look up the listed PIDs with
Get-CimInstance Win32_Process -Filter "ProcessId = N"and check whether theirParentProcessIdstill exists.</details>
What this suggests for the fix
At least one path into the wedge is not a crash or a deployment race at all: the app quits for an update while descendants of an embedded Claude Code session are still running, they keep the old silo alive, and the new version can never mount the hives. Terminating the container job on quit-for-update (or at minimum the process trees of embedded sessions and their Monitor/background tasks) would close this path regardless of what the deployment side does. And the dialog text still sends people hunting for a file lock that does not exist.
n=1 machine, so treat the mechanism as one confirmed pinner among the several this thread has now identified, not the only one.
Adding data from another affected machine. Same symptom, but my error code is
0x80073D02rather than the0x80070020in the original report — posting heresince #76357 was consolidated into this issue. If maintainers judge this a
sibling defect rather than the same one, happy to split it out.
Environment
1.40609.0.0, MSIX, package familyClaude_pzs8sxrjxfjjc.msixfiles, not via Microsoft Store(
SignatureKind: Developer)The event that names the blocker
Get-AppPackageLogon a failed register writes AppXDeploymentServer event638, which states the blocking app explicitly. This seems underused in the
existing reports and is the fastest way to confirm the cause:
Every failure fails at the same state handler:
This is specific to the Claude package, not a broken deployment queue
Control test, same minute, same elevated shell:
| Package | Result |
|---|---|
|
Microsoft.WindowsCalculator| registered successfully, 656 ms ||
Claude_1.40609.0.0| failed atResolvedDeferredRegistrations, 78 ms |So the machine's MSIX subsystem is healthy; only the Claude package is blocked,
because only the Claude package has something of its own still running.
Timing: how long between the download and the forced shutdown
The updater downloads, then ~10 minutes later force-closes the app to apply.
Four consecutive update cycles:
Practical consequence: the whole cycle completes inside one working session, so
"shut down at the end of the day" does not avoid it. The app is killed
mid-session, and clicking the icon during the swap window produces the dialog.
A full uninstall + reinstall does NOT fix it
Worth recording so others do not spend the time. I uninstalled Claude Desktop
completely, confirmed no package remained registered, reinstalled from the
official download, signed in — and the very next register attempt failed
identically at
ResolvedDeferredRegistrationswith0x80073D02.An orphaned package folder also survives the uninstall
No package record in the repository — AppXDeploymentServer logs event 1230
("these hardlinks did not have packages in repository", ~100 entries) on every
deployment operation. It persisted through the uninstall/reinstall and had to be
removed manually after taking ownership. Its large files all report hardlink
count = 1, so it is genuinely dead space, not shared with the live package.
CoworkVMService ships with the app and is not opt-in
Confirming a detail from #76357:
CoworkVMService(cowork-svc.exe, displayname "Claude") is declared in
AppxManifest.xml, starts automatically at boot,and runs from inside the package directory. It is not a consequence of
enabling Cowork:
vm_bundlesandclaude-code-vmboth absent(zero Cowork data provisioned), the service was still
State=Running,StartMode=Auto
several days
So every Claude Desktop install carries a service that holds the package folder
open regardless of whether the user closes the window.
A debugging trap worth flagging
Do not count package processes with
cowork-svc.exereports an emptyExecutablePathvia WMI, so that filtersilently misses it and reports zero processes while the package is still in use.
That false reading cost me several hours and one unnecessary reinstall. Match on
process name, or better, just read event 638 and let Windows tell you.
Suggested fix (same as #76357, restating with the extra evidence)
The updater should, before applying the package:
Stop-Service CoworkVMServiceClaude.exeprocessesA reboot should never be required.
Also seeing this on Claude Desktop 1.40609.0.0 (MSIX). Symptom matches exactly: launch/update fails with "This file is in use by another program" referencing C:\Program Files\WindowsApps\Claude_1.40609.0.0_....
In my case, the Application event log shows repeated warnings from CoworkVMService around each occurrence:
Claude VM Service: failed to configure SCM recovery actions; if the service
crashes it will not restart until the machine reboots: open service: Access is denied.
Claude VM Service: failed to disarm SCM recovery actions for this stop; if the
stop overrun, the service may be auto-restarted during package servicing: open
service: Access is denied.
Get-CimInstance Win32_Service for CoworkVMService also fails to return details (StartName/PathName) with Access is denied under a normal (non-elevated) session — consistent with the TrustedInstaller-only DACL mentioned in #87610.
Occurred 3 times over ~2 weeks; only recoverable via full PC reboot. Most recent: 2026-08-29 14:39-14:45.
Full event log export attached.
claude_event_log.txt
The orphaned Silo is held by a stale
RuntimeBroker.exe— recoverable without logoff/rebootI hit this again today and traced the handle that keeps the orphaned container alive. It is not
cowork-svc.exe. It is the per-packageRuntimeBroker.exeinstance that Windows spawned for theold package version. Killing that one process destroys the orphaned container immediately and the
app launches — no logoff, no reboot.
This does not appear anywhere in this issue or in #48003 / #57221 / #76357, so posting the full trace.
Environment
| | |
|---|---|
| OS | Windows 11 Home China, 25H2, Build 26200.9168 |
| Package family |
Claude_pzs8sxrjxfjjc|| Old → new |
Claude_1.37937.3.0_x64→Claude_1.40609.0.0_x64|---
What actually happens
1. The app is running, so the updater correctly defers registration
Microsoft-Windows-AppXDeploymentServer/Operational, event 603:2. …then registration is forced through anyway, killing the running app
ForceApplicationShutdownOptionterminates the running old-version process instead of waiting for itto exit. That is the trigger — the container teardown path never runs.
3. The old container is never destroyed
Microsoft-Windows-AppModel-Runtime/Admin:PID 30520 was gone; no matching 217 (destroy) event ever fired.
4. Every subsequent launch fails
Windows retries
RegisterByPackageFullNamewithForceTargetApplicationShutdownOption,on every launch attempt, repairs the package ACLs, logsRepairAppRegistrationOption
Register next time should succeed— and the next launch fails identically. On 2026-08-28 that loopran 11 times before I gave up and rebooted.
---
The handle holder: a stale per-package
RuntimeBroker.exeRuntimeBroker.exeis spawned bysvchost.exehosting DcomLaunch / BrokerInfrastructure, and eachinstance is bound 1:1 to a single AppX package. Verified via
GetPackageFullName()on live brokers:The broker created at 18:41:26 — 13 s before the Claude container at 18:41:39 — was still alive
~19 h later, still pinned to the replaced package
Claude_1.37937.3.0_x64.Result of killing it (PID 14700, no elevation needed):
App launched normally, 9 processes,
cowork-svcclient connected and signature-verified. No reboot.---
Why the workarounds in this thread don't work
Stop-Service CoworkVMService— the service runs in session 0; the orphan is a user-sessioncontainer. Different silo, so stopping it changes nothing. (Matches the "service restart doesn't
work" note in this issue.)
Reset-AppxPackage/ reinstall — none of these close a kernel job-object handle heldby a live process.
---
Recovery script (no admin required)
To identify the exact broker instead of killing several, resolve each broker's package with
GetPackageFullName(P/Invokekernel32,PROCESS_QUERY_LIMITED_INFORMATION=0x1000) and kill onlythe one reporting the stale
Claude_<old-version>_x64__pzs8sxrjxfjjc.---
Suggested fixes
ForceApplicationShutdownOption. TheAddalready staged correctly withDeferRegistrationWhenPackagesAreInUse; let registration happen on next natural app exit ratherthan force-killing the running instance 11 minutes later.
RuntimeBrokerinstance as part of teardown, or verify a 217 destroy event fired before registering.
version, clean it up instead of looping on
RepairAppRegistrationOption.---
Unrelated but visible in the same logs
CoworkVMServicelogs this on every stop and start:The service cannot open its own SCM handle with
SERVICE_CHANGE_CONFIG. Per its own log text thismeans a crashed service stays down until reboot, and during package servicing SCM may auto-restart it
mid-update. Probably worth a separate issue — it's not what caused the launch failure here.
Another affected machine, and one detail I don't see stated explicitly in the thread yet: on this machine the wedge also forms after a plain close, with no update anywhere near it — and it is recoverable without logoff or reboot.
Environment: Windows 11 x64,
Claude_1.40609.0.0_x64__pzs8sxrjxfjjc, MSIX, SignatureKind Developer, self-downloaded.msix(not Store).Wedge without an update. I closed the app normally with the window X, no deployment activity at all in
AppXDeploymentServer/Operationalin that window. 13 orphanClaude.exeprocesses were still alive andCoworkVMServicewas still Running. Log from the launcher wrapper I now use:Stopping the service and killing the leftover package processes before activation recovers it — no logoff, no reboot. Consistent with the "membership, not handles" reading earlier in the thread: stopping the service alone was not enough here either, killing the leftovers is what matters. This also explains the days when the app died in the morning with no update in the logs at all: I had been treating those as a separate failure until I looked.
Update-driven occurrences. Four automatic updates in four days, each with the two-step signature already documented here — stage with
NormalPriorityRequest, DeferRegistrationWhenPackagesAreInUse, thenRegisterByPackageFamilyNamewithForceApplicationShutdownOption6 to 12 minutes later:| staged | forced shutdown | version |
|---|---|---|
| 2026-08-25 22:25 | 22:31 | 1.34493.1.0 → 1.37937.0.0 |
| 2026-08-26 04:31 | 04:42 | → 1.37937.1.0 |
| 2026-08-27 04:06 | 04:17 | → 1.37937.3.0 |
| 2026-08-28 19:38 | 19:50 | → 1.40609.0.0 |
The 19:50 one hit while I was working. Adding a user-side observation to the "misleading error message" point already raised: from the user's side the window simply vanishes, and there is no Application event, no WER report and no crash dump for any of these, because the process is terminated rather than crashing. Standard troubleshooting therefore finds nothing at all, and a normal user has no way to tell an update from a crash. It took a full deployment-log analysis to work out what was happening.
Windows' repair paths, for the record on 1.40609.0.0. Repair (
RegisterByPackageFullName+RepairAppRegistrationOption) completes and changes nothing. Reset (ResetPackageOperation) fails at step 1 of 4 with0x80073CF0(ERROR_INSTALL_OPEN_PACKAGE_FAILED) — a different code from the0x80073D02reported above, presumably because the staged.msixhad already been cleaned out of%TEMP%. Uninstall + reinstall did recover it on this machine, unlike some reports here, which is what I was doing several times a day before finding the process-kill route.Two asks, echoing the thread: don't force-close a running app to apply an update, and make sure the package's processes are actually gone before registering. The documented
disableAutoUpdatespolicy avoids the trigger, but it should not be the answer for an individual user on a consumer install.Follow-up: recurrence on 1.40609.0.0 and second successful no-restart recovery
This follows my earlier report and successful recovery on 1.30096.1.0:
https://github.com/anthropics/claude-code/issues/53247#issuecomment-5293117363
The same failure recurred on 30 August 2026 after Claude Desktop updated to:
Claude_1.40609.0.0_x64__pzs8sxrjxfjjc
The visible message was again:
AppModel-Runtime recorded the same signature:
State before recovery
Step 1: stop the Claude service and recheck
I stopped CoworkVMService and waited until it reported Stopped with PID 0.
That removed three service-related WindowsApps hives, but the result was still:
This cleanly separated the ordinary service-owned state from the deeper five-hive orphan. Stopping Cowork alone was not the recovery for this occurrence.
Step 2: targeted hive recovery
I reused the same narrowly restricted recovery described in my previous comment.
Before it ran, the helper reported:
TARGET_COUNT=5
PACKAGE_PROCESS_COUNT=0
The helper:
Independent checks after recovery showed:
TARGET_COUNT=0
PACKAGE_PROCESS_COUNT=0
Both Helium files could then be opened exclusively, the temporary task was absent, CoworkVMService remained stopped, and the Claude package still reported Status: Ok.
Step 3: restart Claude through the registered app identity
Claude was launched through its registered application identity:
Claude_pzs8sxrjxfjjc!Claude
The raw executable under C:\Program Files\WindowsApps was not launched directly.
Verification after launch:
No Windows restart or sign-out was used.
Repeated result
This targeted recovery has now successfully restarted the Claude application on the same machine twice:
This suggests the recovery is not tied to a specific Claude version. It is tied to the package family and the stranded WC/Silo hive state.
Safety caveat based on newer reports
Newer comments have identified stale job-member processes that may not have a Claude name or Claude package identity. Future tooling should inspect and terminate only processes proven to be members of the superseded Claude container job before force-unloading hives.
I did not enumerate job membership during this recurrence, so I am not claiming the five remaining hives were necessarily memberless. I am only reporting the measured sequence and successful result. The hive-unload method remains an unsupported, last-resort recovery and should never be broadened to unrelated hives, processes, or services.
The engineering need remains a supported Claude or Windows-side equivalent that completely tears down the outgoing package container before relaunching the updated package.
ForceApplicationShutdownOptionis the precondition, not the trigger. Measured on two of my ownmachines, six forced registrations produced two failures. The discriminator sits one level down,
and it is the missing container teardown that @Antairez already identified.
I have been tracking this on two Windows 11 machines (both build 26200) since 2026-08-21, and after
reading @Antairez's trace from 08-29 and @EasyjetCZ's four-update table from 08-30 I went back
through my own deployment and runtime logs to check the claim. The forced-shutdown part reproduces
exactly. The causal claim does not, and I think the difference matters for whoever picks this up.
The forced registration is confirmed
Machine A, the failure of 2026-08-29, straight from
Microsoft-Windows-AppXDeploymentServer/Operational:Same two-step signature as reported. Note the gap: the deferral sat for 15.5 hours before it was
forced through, so the "6 to 12 minutes later" timing in @EasyjetCZ's table is not a constant.
But forcing is not what breaks it
Across both machines my logs contain six registrations carrying
ForceApplicationShutdownOption. Two of them were followed by the launch failure. The otherfour were completely uneventful, including one on the same machine 30 hours before the failure
above (28.08 01:26:29, package 1.37937.3.0, no failure).
So a fix that only removes the forced shutdown would probably work, but the reasoning behind it is
incomplete: forcing happens routinely here and usually causes no harm.
What actually separates the cases
Machine B has a runtime log that reaches far enough back to answer this. It had its own failure on
2026-08-26 (six 215/208 events with
0x80070020at 10:43:11). Three forced registrations, one bad:| forced registration | container teardown (event 217) | outcome |
|---|---|---|
| 25.08 23:30:49 | absent, arrives only 26.08 10:43 | launch failure |
| 28.08 01:29:47 | 01:30:21, 34 s later | fine |
| 28.08 16:41:16 | 16:41:16, same second | fine |
The two healthy updates tear down the outgoing package's containers immediately, create the new
ones (210) and start the process (201), all within the same second. The failing one does not.
The evidence for the bad case is the presence of the teardown eleven hours later, not its absence
at the time, because a container can only be destroyed once:
Those containers survived the forced registration of the night before and were only torn down while
the failing launches were hammering at them. That is exactly the
210without matching217that@Antairez described. What I can add is the contrast case, where the same forced registration does
tear them down properly and nothing goes wrong.
What I cannot tell you
is how much of the process tree was still alive at the moment of the forced shutdown, which I do
not have for the failing runs.
the container question is permanently unanswerable there. Worth knowing for anyone else checking:
AppModel-Runtime/Adminis far shorter-lived thanAppXDeploymentServer/Operational. On my twomachines the deployment log reaches back 4 and 11 days, the runtime log 2 hours and 5 days
respectively, so gather it early or not at all.
out a teardown event inside that window. The argument above does not depend on it.
Suggestion
If someone at Anthropic instruments this: the cheap check is not "was the shutdown forced" but
"did a
217follow the register for every210of the outgoing package". That is a singlecondition, it is observable in the same log the updater already writes to, and on my data it
separates the failing runs from the healthy ones cleanly.
Following up on my earlier comment with the update-cycle result I promised, plus
one finding that matters for anyone using the
Start=4workaround.One update cycle passed with the service disabled
1.37937.3->1.40609.0, applied 2026-08-28 23:25 withCoworkVMServiceset toStart=4 (disabled)beforehand.Zero
215/208events. The app relaunched normally and no reboot wasneeded - the machine has been up continuously since 2026-08-27 13:08, four days,
across this update.
PID 66216 is
cowork-svc.exe(still running under that PID now, confirmed viaWin32_Service.ProcessId). Note it went into a different container(
efba5c5f) while the app gotefba5c58and produced its201. Consistent withthe race model in this thread: with the service disabled at the moment of
re-registration, it comes up late enough that the app wins.
This is n=1 and I want to be explicit that it is not proof. The same machine
failed at this exact point on 2026-08-26 and 2026-08-27, so it is a change in
behaviour, not a demonstration of cause.
The workaround does not survive an update
More useful than the above: the update re-installs the service as AUTO_START,
silently undoing
Start=4.Checked three days later:
Start=2, serviceRunning. So the machine wasunprotected again from the moment the update finished, and the next update would
have hit the original failure. Event
7045appears at every single packageregistration in my logs going back to 2026-08-19, so this is not a one-off.
Anyone applying this workaround has to re-apply it after every update. That also
means a report of "the workaround worked" can silently become "it is no longer
applied" without the user noticing.
I have re-applied it and will report the next cycle too.
Practical note
This makes
Start=4unsuitable as a standing fix for non-technical users - it isa per-update chore. The Manual/demand-start change suggested earlier in this
thread would have to come from the package itself to actually hold.
5th occurrence on this machine (2026-06-12 ×2, 07-25, 08-19, now 08-31), update-triggered again:
1.37937.1.0 → 1.40609.0.0, Windows 11 Pro 26200. Same 215/2080x80070020loop. Recovered without logoff/reboot for the 5th time via the SYSTEMNtUnloadKey2(REG_FORCE_UNLOAD)route (8 → 2 → 0 silo hives in two passes, then an immediately clean 210/211/201 launch).I ran extra forensics this time specifically to test @Antairez's stale-
RuntimeBrokerfinding, and the results add three data points the thread doesn't have yet:1. The wedge exists with NO holder process at all. I enumerated every process I could open (356) and called
GetPackageFullName(PROCESS_QUERY_LIMITED_INFORMATION)on each: zero processes carried anyClaude_*package identity — no staleRuntimeBroker.exe(all live brokers belonged to other packages or had no package identity), no leftover container member, nothing. Yet 8\REGISTRY\WC\Silo*hives were mounted andHelium\User.dat/UserClasses.datwere locked. This is consistent with how the registry works: a mounted hive is kernel-owned — the backing file stays locked with no process handle required. So the stale broker is one possible reason teardown never completes, but it is not the invariant; kill-the-holder recovery scripts have nothing to kill in this state.2. Unlike the trace above, the old container DID get its 217.
AppModel-Runtime/AdminshowsDestroyed Desktop AppX container {8D0D5A26-…} for Claude_1.37937.1.0at 16:04:10.016, right as the new version registered. The silos leaked anyway. Also in the same second: EventID 67Failed with 0x5 (ACCESS_DENIED) modifying AppModel Runtime status for Claude_1.37937.1.0 (current 0x280000, desired 0x480000)— possibly a fingerprint of the teardown path dying halfway. So "verify a 217 fired" would not be a sufficient updater-side check; the 217 can fire while the hive unmount is still skipped.3. The orphaned silo set is stable — failed launches don't compound it. While still wedged, I recorded the 8 silo GUIDs, deliberately triggered one more launch (fresh 215/208 pair logged), and re-enumerated: identical 8 GUIDs, nothing added. The interim 210/211 events (containers created, a process briefly added, then 217 + 215) do not leak additional mounts. The artifact is a fixed set of orphaned mounts from the moment the update raced, and every subsequent create fails against it.
Synthesis this suggests: the durable artifact across the thread's reports may be the mounted hives, not the job object or any particular holder process.
0x80070020isERROR_SHARING_VIOLATION— a file-sharing error — which is exactly what container creation would hit when it tries to mountHelium\User.dat/UserClasses.datwhile they are still mounted in an orphaned silo. That unifies the observations: killing a staleRuntimeBroker(or whatever holder exists) recovers because its death lets teardown finally unmount the hives; when no holder exists (this incident), only force-unmount — or logoff, which unmounts user hives wholesale — clears it. An updater-side fix should therefore verify the hives are unmounted (no\REGISTRY\WC\Silo*entries backed by the package's Helium.datfiles inhivelist) before registering the new version, rather than checking process exit or the 217 event.Method notes for anyone reproducing: process→package mapping via
kernel32!GetPackageFullNameon a0x1000-access handle (no elevation needed); hive enumeration viaHKLM\SYSTEM\CurrentControlSet\Control\hivelist(value name = silo key, value data = backing file); unload procedure as in my earlier comments in this thread.Third occurrence here, most recently
1.34493.1.0to1.40609.0.0, so1.40609.0.0is affected as @AccountZero and @Ciki also report. Recovered by restart again. Two things that might save others time.Correcting my own dating of this one, since it matters for anyone reading the pattern: the handover was 28/08 21:54:03, with event 67
0x5on the outgoing1.34493.1.0and then 215/215/208 for1.40609.0.0in the following second. So unlike the case I described on 24/08, this one failed loudly at swap time. The 01/09 events are just my next cold launch, three days later, rediscovering a wedge that had been there since Friday evening. I initially wrote this up as an 8-day-uptime failure, which conflated when I noticed it with when it happened.Running a watcher, because the evidence expires
Each time, I reconstructed the diagnosis by hand hours later, and twice the useful window had nearly rolled out of the log.
Microsoft-Windows-AppModel-Runtime/Adminships at 1052672 bytes. On this machine that held about 5 days of history, which is shorter than my gap between occurrences.What I now have running:
AppModel-Runtime/AdminandAppXDeploymentServer/Operational. Note the Admin stock size is 1052672 bytes, not 1048576, so passing "1MB" silently shrinks it.AppModel-Runtime/Adminevent 215 and on Application 1000/1002, with no delay. Container, service and package state move within seconds here, so a delayed capture can miss the state you wanted.hivelistsilo entries, the exclusive-open test onHelium\User.datandUserClasses.dat, both event logs, SCM 7040/7045 churn, and themain.logtail.Two things I got wrong first, in case they save someone a detour:
EventDatadoes carryPackageName, and an exact-value XPath match works, but it is the fully versioned string (Claude_1.40609.0.0_x64__...) and the Windows event XPath subset has nostarts-withorcontains(contains()is rejected outright as an invalid query). A package-filtered subscription therefore stops matching silently after the next update. Filter inside the collector instead.SEM_NOGPFAULTERRORBOXand Crashpad installs its own unhandled-exception filter, so for an Electron app the dump never lands, and LocalDumps does not fire for hangs (event 1002) under any configuration. I have not yet had a hang to test against, but ProcDump attached to the window-owning process looks like the only route that sidesteps both.I can share the scripts if anyone wants them.
Orphaned background processes: worth one check, but not the pinner here
Following @hypercat's silo-member finding, I looked for leaked members and found the same class in a different shape: four
nohup.exewrappers around eightpython.exe -m http.serverprocesses, started by Claude Code sessions running inside Claude Desktop on 24 and 25 August, parents long dead, still alive a week later with no established connections.Two notes:
tail|grep|bash|sh|nodemisses them. Includenohup, and better, look for any process with a dead parent rather than matching on names.User.datandUserClasses.datstayed locked and all 8 hive entries remained, so this machine was the handle-pinned case rather than the live-member case. That fits @Ciki's process enumeration on 31/08 finding nothing carryingClaude_*package identity.So the member check is worth one pass before reaching for a restart, but if the silo has no attributable members it will not be a process you can kill. Separately, those orphaned trees survive for days regardless of this bug, which is worth knowing on its own.
Fresh recurrence on 1.40609.0 + signed portable A/B test (2026-09-01)
This has recurred on the same Windows machine after our earlier report in #76357, which was closed as a duplicate of this issue. This is not just another “same here”: the current state provides a clean A/B comparison between the MSIX/AppX identity and the exact signed application downloaded from Anthropic.
Affected installed package
The visible launch error is again:
At the start of diagnosis, no
Claude.exeprocess was running. The registered package remains inModified, NeedsRemediationafter the failure.Controlled A/B recovery without reboot
1.40609.1:https://claude.ai/api/desktop/win32/x64/msix/latest/redirectD0282066855A3CAC5990912350C0DE4D01BB48CA65B8B6B4CE1EC9F2C910A6F9appdirectory to a normal user-writable directory, without registering the MSIX.Claude.exereports1.40609.1, has a valid Anthropic signature, and starts immediately.Modified, NeedsRemediation.This strongly narrows the failure to the AppX/MSIX registration or servicing lifecycle: the current official binary and the existing user profile work, while the registered package identity does not. The workaround now has to maintain a custom launcher that selects the newest verified unpacked Anthropic build and explicitly ignores installed packages whose status is not
Ok.Request for maintainer ownership and status
This canonical issue now has 38 comments and several independent, detailed reproductions, but I cannot find a maintainer response or confirmation of an internal tracking item. Consolidating duplicates is useful, but affected users still have no supported no-reboot recovery and are being pushed into custom unpackaged launchers.
Could an Anthropic maintainer please confirm:
1.40609.1contains any change intended to address this failure;Modified, NeedsRemediationthat does not require a reboot or destructive profile reset; andEven a short status update or a request for a specific diagnostic bundle would be materially better than continued silence on the canonical issue.
I am experiencing this issue currently and I have done everything with no luck I am completely stuck. Have restarted, cant find anything running to do with Claude someone please help me I have a very important project wrapped up in Cladue
Check my solution above: https://github.com/anthropics/claude-code/issues/53247#issuecomment-5470575588
No nothing here has worked. Ive been trying to troubleshoot with codex for about 3 hours now
Still happening as of Sept 1, 2026 on Claude Desktop 1.40609.1.0, Windows 11 Home build 26200.
This recurs roughly weekly and is triggered by the app's overnight background auto-update — no user action, no "Relaunch" click. I go to bed with the app running fine and wake up to "Another program is currently using this file" on every launch attempt.
Ending claude.exe and cowork-svc.exe in Task Manager (including elevated taskkill) does not clear it. The only recovery is a full Windows sign-out and sign-in, which means saving and closing everything else I'm working on.
I can't tell you have annoying and disruptive this is. It's driving me nuts. This has been open since April. For a paid user on Windows, a weekly forced session reset is a workflow-breaking defect, not an inconvenience. FFS please fix this Anthropic. This is something you need to do on your side -- not tell users to hack into the bowels of their devices and disrupt their work. Please fix this on your side rather than having users work around it in the registry. Thank you.
OK, this was a real pain, but it has been resolved for me for over a month now:
This thread has recovery mechanisms, but not a cure. Here is what stopped it coming back for us:
Every fix in this thread restores one launch. Reboot, sign-out, and the SYSTEM silo-hive
unload all work, and all three have to be done again after the next update. Several people
here are on their fifth or sixth occurrence in a fortnight. That is the actual shape of this
bug: it is not that you cannot get back in, it is that you have to keep getting back in.
We had it repeatedly, on updates, until July. Since then it has not come back, across fourteen
updates.
What we did was this:
Not
Reset-AppxPackage, not Repair, not an installer. The GUI buttons, Terminate first.That ordering may matter. Several people here report Reset failing outright, including with
"we cannot reset this app's data at this time", which is what you would expect while the
package still has something running. Terminate first, then Reset.
It is destructive and it cost us our projects, so the rest of this is why it is different from
the reinstalls you have already tried, and what you lose by doing it.
Why reinstalling never helps
Almost everyone here has reinstalled, and it does nothing. There is a reason for that, and it
took reading our own deployment logs to see it.
Installing over the top is not a reinstall. Windows processes it as an update: same
package family, per-user state left completely untouched.
winget install, the downloadedinstaller over the top,
Add-AppxPackage -Registerare all the same story. Whatever iswedged survives every one of them, because none of them touch it.
We reinstalled several times over five months. Our deployment log shows no removal of the
Claude package in that entire period. We thought we had reinstalled. We had not.
That is also why sign-out is the only thing that reliably works: it is the only common
action that tears down state rather than replacing files.
How Reset is different
Reset destroys the package's per-user state and re-registers it. That is a deployment-level
operation on the package, not a file swap, which is why it reaches something the installers
never do. On our machine it is the only such operation that has ever run against this package.
What it costs
Reset permanently destroys local app state. Copy
%APPDATA%\Claudesomewhere safe first,whatever else you decide.
undifferentiated list, no longer grouped under the project each belonged to. That structure
never returned.
%APPDATA%\Claude\claude_desktop_config.jsonholds your MCP server configuration and is inthe wiped tree. Save it. Restoring is a file copy.
Knowing what the alternative was, we would make that trade again. But it is a real trade, and
"just reset the app" is advice that sounds free and is not.
Note that several people here report Repair and
Reset-AppxPackagefailing outright, so thismay not be available to you in that state.
---
Evidence
Windows 11 Home 26200, MSIX package
Claude_pzs8sxrjxfjjc. All of the below is fromMicrosoft-Windows-AppXDeployment/Operationaland filesystem timestamps, not recollection.The reset, 2026-07-11. Recorded in a note written that same afternoon: "Windows Settings ->
Apps -> Installed apps -> Claude -> Advanced options -> Terminate -> Reset". At 13:51:43 the
per-user state was destroyed and recreated:
LocalState,RoamingStateandSettingsunder%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjcall carry that exact creation second, against a package folder created in March.
%APPDATA%\Claude\Local Storagewas recreated six seconds later.SystemAppData\Heliumstilldates from March, so the package was not reinstalled and the hives were not rebuilt. Only the
per-user data went.
It is the only deployment-level event in seven months. Our log retains back to 2026-02-01.
Across those seven months it holds exactly five deployment-operation records (event 332) for
this package, all between 13:50:56 and 13:51:43 on 2026-07-11. None before, none after.
No uninstall ever happened. 25 entries in that log name a package being removed. Not one
names Claude.
Fourteen updates have landed since: 1.21459.1.0, 1.22209.0.0, 1.22209.3.0, 1.24012.1.0,
1.24012.9.0, 1.24012.11.0, 1.25927.0.0, 1.26832.0.0, 1.28929.0.0, 1.30096.5.0, 1.32352.0.0,
1.32352.1.0, 1.40609.0.0, 1.40609.1.0. Seven weeks, including an in-place update this week,
and the package currently reports
Status: Okon the latest version.Being straight about which half is evidenced: the update history above is from the logs. That
none of them wedged the app is our experience, not something I can show you, because
AppModel-Runtime/Adminretains about eight hours on this machine, so the failures frombefore July are long gone. If you want to hold this to one verifiable claim, hold it to this:
the reset is the only deployment-level event this package has ever had here, and the problem
was routine before it and absent after.
Also did not work here, for the record:
winget install --id Anthropic.Claudeover thetop, and stopping plus disabling
CoworkVMServicebefore a launch attempt, consistent withthe controlled test upthread.
Separately: a negative result on the missing ApplicationData folder
On the theory that a missing
C:\ProgramData\Microsoft\Windows\AppRepository\Families\ApplicationData\Claude_pzs8sxrjxfjjcis the persistent condition causing the recurrence: on our machine that folder is also absent,
and has been absent throughout all fourteen updates above.
So its absence looks like the normal state for this package rather than the cause. Worth
checking on another healthy machine before more triage goes into it.
One machine, one incident, seven weeks of clean updates behind it.
Still happening on
Claude_1.40609.1.0_x64__pzs8sxrjxfjjc, Windows 11 Pro 10.0.26200 (x64).Same pattern as OP, recurring for weeks/months across updates: "Another program is currently using this file" on the WindowsApps package path when launching/updating. Killing all Claude processes does not recover it — only a reboot (or presumably logoff/login per this thread) clears it.
Still reproducing on
Claude_1.40609.1.0_x64__pzs8sxrjxfjjc, Windows 11 Pro 10.0.26100.I can confirm the 215/208 activation failures, but my logs also show the MSIX deployment-time
half that the OP ruled out, and the two interleave in the same 14-second window. Posting in
case the correlation is useful.
Deployment layer: registration is deferred because the old version never exits
Microsoft-Windows-AppXDeploymentServer/Operational, across my last two updates:The package's own auto-start service outlives the app window
The package declares a packaged service,
StartMode: Auto:On my machine it ran continuously from the 8/29 12:54 boot until 9/2 09:31:47, restarting
only when the new package registered. Closing the Claude window does not stop it, so the old
package version stays "running" for days, which is what event 658 is reporting.
Cleanup then fails on exactly the memory-mapped Electron files
Retried every ~6 minutes for half an hour, and only those two files. Those are the two an
Electron process memory-maps for its lifetime, which is consistent with a live mapping rather
than an ordinary open handle. That may be why
handle.exeshows nothing: a mapped sectiondoes not present as a file lock, but still blocks deletion.
The two layers correlate in one window
At next logon, deployment recovers and activation fails repeatedly in the same seconds:
Event 649 ("Trying to repair ACLs ... Register next time should succeed") firing on every
recovery suggests the failed update leaves the package directory ACLs damaged, which would
explain why only a logoff clears it: the repair runs on the next logon register.
Accumulated debris
Also worth noting: the scheduled task
\Microsoft\Windows\AppxDeploymentClient\Pre-staged appis Disabled on this machine, so thecleanup
WindowsApps\Deletedresidue is nevercollected. I do not know whether that is a Windows default or something the installer changed.
Suggestion
Whatever the container-layer root cause turns out to be, an auto-start packaged service inside
the same MSIX that the in-app updater replaces is a self-inflicted ordering problem. Stopping
CoworkVMServiceand draining the app's processes before staging, rather than lettingregistration defer, would at least remove the deployment-time half.
I have not yet been able to test whether pre-stopping the service prevents the failure, since
it only reproduces on a real update. Happy to run diagnostics on the next one if anything
specific would help.
Adding a data point on a current build — this is still reproducing as of September 2026.
Environment
Claude_1.32352.1.0_…_pzs8sxrjxfjjcunderC:\Program Files\WindowsApps\Symptom
After the app updates itself, every launch attempt fails with the generic sharing-violation dialog:
Retrying does not help; the app stays unlaunchable until a full Windows reboot, after which the new version starts normally. It recurs with updates — not a one-off. Same pattern as #76357 (closed into this one), #73107 and #83932.
Ask
Whatever the exact holder is on a given machine (CoworkVMService, lingering packaged processes, or the orphaned container silo / Helium hive), the failure is identical from the user's side: an update is applied underneath a package that is still alive, and the next activation dies with 0x80070020. Tearing the container down fully before servicing, or self-healing on 0x80070020 at launch, would close this for everyone in the thread. Until then, a meaningful message instead of "Another program is currently using this file" would at least stop people from hunting for file locks that don't exist.
@bcherny
Windows arch: x64 (AMD64);
claude --version: 2.1.199 (Claude Code);
C:\Program Files\WindowsApps\Claude_1.40609.1.0_x64__pzs8sxrjxfjjc;
Additional impact: session index corruption + data loss (pinned + project sessions) following this bug
Hit this exact issue this morning (Windows, dialog reads "Há um outro programa usando este arquivo no momento", same 0x80070020 pattern from cowork-svc.exe). Followed the standard remediation attempts before finding this thread: killing the process tree,
Reset-AppxPackage, restarting AppXSvc. None worked, consistent with what's already reported here (container-layer failure, not a real file lock).What's not yet documented: the eventual reboot triggered a side effect beyond just recovering app launch. It corrupted the local Claude Code session index (Desktop "Code" tab), silently dropping several pinned and project sessions from the UI.
Root cause (confirmed via filesystem investigation):
%APPDATA%\Claude\claude-code-sessions\<accountUuid>\<orgUuid>\, onelocal_<sessionId>.jsonper session.pinnedOrder) lives separately, in Local Storage LevelDB (dframe-store, Zustand).frame-pinned-empty-hinttimestamped before my reboot, showing the pinned list was already reporting empty while the app was stuck in the crash-loop state. So the corruption started during the failed relaunch attempts, before the reboot.local_*.jsontodeleted_*.json(contents overwritten with just a timestamp, losingcustomTitleand other metadata), timestamped exactly at relaunch..jsonlfiles in.claude\projects\) was not touched, only the Desktop's session index/UI state was affected. This made most sessions recoverable by cross-referencing.jsonlfiles against index entries, but this required manual filesystem forensics; nothing in the app itself surfaced the missing sessions or offered recovery..jsonltranscripts and were successfully reindexed manually. 1 session (created but likely never received a first message) had no.jsonland was unrecoverable. Pinned state itself (pinnedOrder) was not preserved anywhere and had to be manually reapplied per session after reindexing.Suggestion for the team: the crash recovery/cleanup logic that runs on relaunch should not silently drop sessions from the index without also checking for a corresponding
.jsonl. Pinned/recent state should probably be more resilient to (or at least logged during) this cleanup, since right now data loss here is silent and only recoverable via manual file inspection.Happy to share the full investigation trace (timestamps, LevelDB keys, index diffs) if useful for a proper repro/fix.
Confirming this on x64, package
Claude_1.40609.1.0_x64__pzs8sxrjxfjjc, Windows 11. Same signature as the original report. Adding diagnostics that may help narrow the cause.AppModel-Runtime/Admin — every failed launch produces the same triple:
Failures occur only on explicit launch attempts. No background or timer-driven occurrences.
Ruled out — no file lock exists.
handle64.exe -a -urun as Administrator, with the error dialog on screen:Ruled out — ACLs are not the cause.
icaclson the failing binary and on a binary from the same package that starts fine returns byte-identical output:Both list
ALL APPLICATION PACKAGES,Users,TrustedInstaller,SYSTEMwith identical rights.AppXDeploymentServer/Operationallogs an ACL repair (RepairAppRegistrationOption) reporting success and "Register next time should succeed", but the failure persists.Ruled out — package state is healthy.
Add-AppxPackage -DisableDevelopmentMode -Registeragainst the manifest, run repeatedly as admin, completes without error and does not resolve the failure.Control — AppX container creation works for other packages. With Claude failing,
Microsoft.WindowsCalculatorlaunches normally in the same session. The container layer is not broken system-wide; the failure is specific to this package.Launch parent is irrelevant. Fails identically from Start menu, from
Start-Process shell:AppsFolder\Claude_pzs8sxrjxfjjc!Claude, and from an elevated PowerShell.Stop-Process -Name explorer -Forcedoes not clear it.Procmon (~6.5k events filtered to the package path). No
SHARING VIOLATIONon any package file.ACCESS DENIEDrows onclaude.exeandcowork-svc.execome from Explorer/Taskmgr/perfmon icon extraction and appear for the working binary too, so they are not the failure.cowork-svc.exestarts successfully and maps its own image during the same window in whichclaude.execannot be launched.CoworkVMService.
StartType Automatic,Status Runningwith the app closed.Stop-Service -Forcefollowed by killing all package processes does not allow a successful launch, so on x64 the service does not appear to be the blocker. Note thatSet-Service -StartupType Manualfails withAccess is deniedeven from an elevated admin shell, since the service object is owned byTrustedInstaller— so users cannot apply that as a mitigation.Recovery. Signing out and back in resolves it, without a full reboot. Consistent with a session-scoped job object being the blocker.
Impact. Recurs at each update. There is no user-side configuration that prevents it; sign-out is recovery only.
Correction to my own test from 2026-08-30: the 210-without-217 condition I proposed there is too
narrow. I hit the failure again on 2026-09-01 with the teardown present.
Machine A, update to
1.40609.1.0, package folder created 20:45:24. Failed launches at 22:22 and22:26, both the usual
0x80070020. This time theAppModel-Runtime/Adminlog reached back tenhours and covered the whole update window:
The old package's container was destroyed 48 minutes before the first failed launch. So the
teardown happened, and the launch still failed.
At the same moment,
HKLM\SYSTEM\CurrentControlSet\Control\hiveliststill listed eight Claudesilo hives, with no
Claude.exerunning. That is the point: event 217 reports the container,not the silo. The two come apart, and the hivelist is the more reliable signal.
Two further measurements from the same night, in case they save anyone time:
Registerdeployment (event 400, 1594 ms, including ACL repair) completedseconds before the second failed launch. Re-registering does not clear the silo.
NtQuerySystemInformation, thenNtQueryKeyon eachduplicated handle): 615,302 handles, 15,363 of them registry keys, none inside the Claude
silo. Six of the eight hives can be unloaded with
NtUnloadKeyfrom an elevated session(stopping
CoworkVMServicealone takes it from 8 to 5); the last two returnSTATUS_CANNOT_DELETEand stay. So there is no user-mode process holding them - the mount iskernel-side and belongs to the silo object, which the session manager tears down at logoff.
That also explains why signing out is the only reliable fix, and why every lighter workaround I
tried stops short. If you are collecting data points, the useful question is not "did 217 fire?"
but "does the hivelist still show Claude silos after the update?".
Reporting back on the
Start=4test I said I would follow up on, plus a direct answer to@aonsi55's point that users cannot apply the service mitigation.
Four consecutive clean update cycles
Since disabling
CoworkVMServiceon 2026-08-27, this machine (Windows 11 Pro 26100) has takenfour in-place updates with no failure:
No reboot across any of them - the machine has been up since 08-31 15:49. The two updates
immediately before this change (08-26 and 08-27) both wedged and both needed a reboot.
I want to be careful about what that is and is not. It is one machine, n=4, against n=2
failures. @SpectraWorksVision and @aonsi55 both report that stopping and disabling the service
did not help them, so this is not a general fix and I am not claiming causation.
A distinction that might reconcile the conflicting results
The negative reports I can find describe stopping the service while already wedged. That
matches everyone's experience, mine included: once the silo hives are orphaned there is nothing
to kill, as @Ciki and @juergenbeck have both demonstrated with full handle enumeration.
What I changed is different in timing: the service was absent at the moment of
re-registration, not stopped afterwards. If the ordering hypothesis in this thread is right,
those are two different experiments, and only the second one can affect whether the silo leaks
in the first place.
That is testable and I would rather it be tested than believed. The falsifiable prediction is
that pre-emptive disabling changes the outcome and post-hoc stopping does not.
@aonsi55: the mitigation is applicable, just not through Set-Service
Confirmed on the SCM path, but writing the registry value directly works from an elevated
shell:
Verified after:
Start = 4, serviceStopped / Disabled, nocowork-svc.exerunning, and itsurvives reboots. So the mitigation is reachable; it just cannot be applied through the service
control manager.
Every update re-arms it - 4 out of 4
Following up on my 08-31 comment: the re-arm is not occasional. Event
7045fired on every oneof the four updates above, each time reinstalling the service as
auto start, silentlyrestoring
Start=2.This matters for anyone testing a mitigation here: a machine that "worked after the
workaround" may simply no longer have the workaround applied. Worth checking
Startbeforeattributing a pass or a failure.
I automated the re-application with a scheduled task triggered on System event 7045 filtered to
ServiceName='Claude', 60-second delay, running as SYSTEM, which re-writesStart=4. It hasfired correctly on the last two updates:
Note for anyone copying this: unlike event 215, event 7045's
EventDatahas a stableServiceNamevalue (Claude), so an XPath-filtered subscription does keep matching afterupdates - the versioned-string problem @DrRIH hit with 215 does not apply here.
Hivelist corroboration
@juergenbeck's point that the hivelist is the reliable signal matches what I see. With the app
running normally, this machine shows exactly 5 mounted Claude silo hives:
That is consistent with @juergenbeck's observation that stopping
CoworkVMServicetakes thecount from 8 to 5 - i.e. the three that drop are the service's own silo. So "5 while the app is
running" looks like the healthy baseline, and hives present with zero
Claude.exeprocesses is the wedged state. I have added that as the primary check in my own tooling rather
than looking for file locks.
Log retention
Seconding @DrRIH:
Microsoft-Windows-AppModel-Runtime/Adminships at 1052672 bytes and heldonly about six days here.
AppXDeploymentServer/Operationalshipped at 5 MB. I raised both to32 MB. Anyone planning to report on their next occurrence should do this first, or the evidence
will already be gone by the time they look.
Still no maintainer response
Echoing @mySebbe: this issue has been open since April, is now past 50 comments with multiple
independent root-cause analyses, and there is still no confirmation that it is tracked
internally. A short acknowledgement, or a request for a specific diagnostic bundle, would let
the people in this thread stop duplicating each other's forensics.
Still broken on 2026-09-03. Claude Desktop MSIX 1.44121.4.0 (Claude_1.44121.4.0_x64__pzs8sxrjxfjjc), Windows 11.
This exact dialog (“Another program is currently using this file”, title bar C:\Program Files\WindowsApps\Claude_*) has been on the public tracker since at least April 2026 (#42776, #45400). The later cluster is the same bug, not a new one: #46179, #73694, #83932, #83968, #88101, #88181, #89680, #90031, and this thread. Months of duplicates, still shipping.
Reproduced today after [stealth-update] / beforeQuitForUpdate:
The no-reboot workaround is not enough once AUTO_START grabs the package job. Remaining recovery is still reboot or sign-out.
adding a data point on the CoworkVMService mitigation from @catseye82's comment above. on my machine the msix update reset the service start type back to auto, so it's worth re-checking the value after an update instead of assuming it stuck.
windows 11 home 26200, package family
Claude_pzs8sxrjxfjjc.timeline:
so the package re-registers its services when it registers, and anything you set under
HKLM\SYSTEM\CurrentControlSet\Services\CoworkVMServicedoes not survive an update. that also means "n clean update cycles since i changed it" might be measuring a setting that isn't applied anymore, so probably worth re-checking the value before reading much into it.two smaller things:
Start=3(manual) seems to be enough, i don't think you needStart=4. with manual the service still starts on demand when the app launches, so you don't have to give up cowork to get the mitigation. but i only have one clean update cycle on this and that same update reset the value, so treat it as untested rather than confirmed.the 04:59 update itself was clean, with
Start=3in effect at the time:no 215/208 across the update or on any launch since. one sample though, not claiming cause.
on automating the recovery, the unload helper can be run from a scheduled task (SYSTEM, highest privileges) with an event trigger on EventID 215 in
Microsoft-Windows-AppModel-Runtime/Admin, instead of running it by hand every time you get wedged. guard it so it does nothing whileClaude.exeis running. the kernel refuses in-use hives with0xC0000121anyway so a stray run doesn't hurt.might also be related to #86157,
sc qtriggerinfohere shows the named pipe trigger registered asCUSTOM : 1f81d131-3e60-4c76-9860-37334e4ffce3 [ETW PROVIDER UUID]withDATA : \pipe\cowork-vm-service.Still reproducing on a much newer build — confirming this is not fixed.
Environment
Claude_pzs8sxrjxfjjc)Same signature as the original report: on every failed launch, one container is
created (210) and a process is added to it (211), then the follow-up container
creations fail with
0x80070020 ... converting the job(215) and the launchaborts (208). Seven consecutive attempts between 14:33 and 14:45, all identical.
Two data points that narrow the "already attempted" list:
Stoppedat the time of the failure.Get-Service CoworkVMServicereportedStoppedwhile the error dialog wasshowing; running
Stop-Service -Forcefrom an elevated prompt changednothing. So the leak survives the service being down, not just being
restarted.
Name : Claude
Version : 1.44121.2.0
Status : Ok
I also see a container destroyed at activation time whose GUID belongs to an
earlier session (
{683F0334-...}while everything else in that attempt isFD0D4...), which seems consistent with the leaked-handle hypothesis.In my case reinstalling the package also restores it, but the failure comes
back after roughly 4-5 hours of use.
Having the same issue:
TimeCreated : 4/09/2026 1:09:13 PM
Id : 208
LevelDisplayName : Error
Message : 0x80070020: Cannot create the process for package Claude_1.46388.1.0_x64__pzs8sxrjxfjjc because an
error was encountered while configuring runtime. [LaunchProcess]
Copy-paste version of the SYSTEM
NtUnloadKey2route from this thread, as one self-contained script. Worked for me today (2026-09-04) on Windows 11 Pro 26200, Claude1.46388.1.0(Claude_pzs8sxrjxfjjc), zero Claude processes, Event 215/2080x80070020. Five Claude Silo hives were listed inhivelist; after the unload Claude launched immediately, no sign-out or reboot.No PsExec or other tools needed. It self-elevates (one UAC prompt), re-runs itself as SYSTEM through a one-shot scheduled task, force-unloads only Silo hives whose backing file belongs to the Claude package family (max two passes), deletes the task, prints the log, and launches Claude.
Save as
Rescue-ClaudeDesktop.ps1, then:Do not run it while Claude is actually working; it unloads Claude's live hives.
Log ends with
done: no Claude silo hives remainon success. If it printsSTILL MOUNTED, sign out and back in instead of re-running it.Following up on the
Start=4test I said I would report on. It is not a fix. Four cleanupdate cycles, then a failure on the fifth, with the workaround correctly in place.
4 pass, 1 fail
Windows 11 Pro 26100. The two updates before this change (08-26, 08-27) both failed, so on this
machine the change did correlate with a run of passes - but it does not prevent the failure. I
would now describe it as a partial mitigation at best, and I would not want my earlier comment
read as a working workaround.
What was different about the run that failed
The failing cycle had an extra step the four passing ones did not: the deferred registration was
attempted and failed once before the forced one.
In the four passing cycles the app's own process reached its container within 2-3 seconds and
produced its
201. Here it did not, and the service took it instead. I cannot tell from thelogs whether the failed 15:51 register is causal or incidental, but it is the one structural
difference I can see between the runs.
Negative result: an event-7045-triggered guard cannot win this race
I had automated the re-application with a scheduled task on System event 7045, 60-second delay.
It fired correctly, but 60 seconds is far too late - the service joins the container 2 seconds
after 7045. Shortening the delay does not fix it either; SCM starts the service essentially
immediately on reinstall. Anyone considering this approach should know it cannot be won from the
7045 side.
Negative result: stopping the service after the wedge does nothing (confirmed here too)
I ran the disable script at 15:56:50, verified
Start=4,Stopped, nocowork-svc.exe. Thefailures continued unchanged:
Add-AppxPackage -Register(Windows' own ACL-repair register at 15:57:06-09, "Register next timeshould succeed") also changed nothing. This reproduces what @aonsi55 and @SpectraWorksVision
reported, on a machine where the pre-emptive version had appeared to help. So both halves are now
observed on the same box: pre-emptive disabling correlates with passes, post-hoc disabling is
inert.
Recovery: logoff worked, but calling it the "light" fix is misleading
No reboot, machine up since 08-31. But for a workstation user this is not a cheaper recovery than
a reboot in any way that matters: it closes every open application. In my case that meant two 3ds
Max sessions with unsaved scenes, a running screen capture, and a build. The only difference from
a reboot is about 90 seconds of POST time. The thread often presents logoff as the mild option; it
is the same loss.
The 7045 re-arm is now 5 for 5
Every one of the five updates above reinstalled the service as
auto start, wipingStart=4.Worth repeating for anyone testing mitigations: check the value before attributing an outcome.
@aonsi55: the registry path does work
Confirmed on the SCM path, but the registry write succeeds from an elevated shell and survives
reboots:
Given the 4-of-5 result above, I would call that worth applying and not worth trusting.
One detail on
disableAutoUpdatesthat I have not seen mentionedThis gets suggested as the way to take control of when the risky moment happens. It works, but the
cost is larger than "you update manually". Reading the shipped
app.asar, the policy also removesthe manual path:
with a later filter dropping any item whose
visibleis false. The app's own description of thekey is *"Stop Claude Desktop from fetching updates entirely (no time limit). You'll need to push
new versions yourself."* So there is no update notification and no in-app check - you have to
watch the release feed yourself. On a build shipping this often (7 updates here in ten days) that
is a real burden for an individual user, as opposed to a fleet with an MDM behind it.
Where this leaves a single user
There is currently no user-side prevention. The mitigation helps sometimes, the recovery costs a
full session either way, and turning off updates costs visibility into updates. I have gone back
to leaving it alone and rebooting when it happens, which is not a good place for a paid product to
leave people. Still no maintainer response on the canonical issue.
Additional data point, with a measurement that I think narrows this down further than what is in the thread so far. Two things I could not find posted yet:
cowork-svc.exeis the only process of the package that ever successfully gets a container, while the app process never does.Environment
Claude_1.46388.2.0_x64__pzs8sxrjxfjjc,Status: Ok,InstallLocation: C:\Program Files\WindowsApps\...CoworkVMServicerunning (WIN32_PACKAGED_PROCESS,START_TYPE: 2 AUTO_START,LocalSystem, binary inside the versioned package dir)Recurrence
I have a local watchdog that logs every AppXDeployment event 208/404 for this package. Since 2026-07-12 it has recorded 30 events across 13 distinct days and 12 distinct package versions:
Every single occurrence was triggered by an in-place self-update. Different versions, different boots — so this is not a one-off corrupted state.
The failure, end to end
The app quits itself for a stealth update and never comes back. From
main.log:That is the last line the app ever wrote. Every launch attempt afterwards produces no log line at all — the main process never reaches logger init.
Microsoft-Windows-AppModel-Runtime/Admin, one launch attempt (18:44), millisecond resolution:The correlation: who wins the container
I polled
Win32_Processfor newly created processes during that same launch attempt:Both PIDs match exactly the two
Id=211events above. On an earlier attempt the same holds:Id=211reports process578248added to container{6FB5ED5C}at 18:37:43, andWin32_Processshowscowork-svc.exePID578248created at 18:37:43.In every single attempt, the only process of this package that is ever successfully placed into a Desktop AppX container is
cowork-svc.exe(session 0, LocalSystem). The app's own process in the user session never gets one.cowork-service.logshows the service crash-looping while this happens — it starts, waits for a handoff that never comes, dies, restarts:This matches #28231 — the app has no chat-only fallback when the CoworkVMService handoff fails, so it takes the whole process down, and that is the crash that leaks the silo.
Negative control: the session and the AppX layer are fine
This is the part I have not seen posted. Two other MSIX packages were activated from the same user session (session 1), minutes and seconds apart from Claude failures:
— created in the same second as a Claude
0x80070020failure.So Desktop AppX container creation, job→silo conversion and activation all work correctly in this session at the exact time Claude cannot be launched. The orphan is package-scoped, not session-scoped. Anything suggesting "reset your Windows AppX stack" is chasing the wrong layer.
Remedies attempted, all ineffective
Confirming the list already in this issue — each of these reported success and changed nothing:
| Attempt | Result |
|---|---|
|
Add-AppxPackage -Register "...\AppxManifest.xml" -DisableDevelopmentMode| returns OK, app still will not launch ||
Stop-Service CoworkVMService -Force| service is restarted on the next activation attempt ||
Stop-Service+Stop-Process cowork-svc+ re-register, in one sequence | no change || Killing every Claude/cowork process | no change |
| Checked
PendingFileRenameOperations| no Claude entries (only Chrome/OneDrive) || Checked Crashpad | no dumps written |
| Checked for stale package versions in WindowsApps | none |
Two side observations
1. The packaged service cannot manage its own recovery actions.
sc sdshow CoworkVMService:The second ACE is
NT SERVICE\AppXSvc. TheAUACE has noDC(SERVICE_CHANGE_CONFIG), and there is no ACE forSYorBA— so the service, running as LocalSystem, cannot callChangeServiceConfig2on itself. That is why both "failed to configure recovery actions" and "failed to disarm recovery actions for this stop" appear on every start/stop.sc qfailureconfirms no recovery actions are armed at all. If the intent of the disarm-on-stop logic is to keep SCM from auto-restarting the service during package servicing, that logic is inert as shipped.2.
C:\ProgramData\Claude\Logs\cowork-service.loghas grown to 526 MB with no rotation. The crash-loop above appends to it continuously while the app is unlaunchable.Request
Nothing here changes the ask already in this issue, but it does sharpen it:
Happy to provide the full event traces or the watchdog log if useful.
Post-update relaunch fails with 0x80070020 (leaked AppX job); no file lock and no crash involved
[🤖] Adding a data point here, since #76357 was closed as a duplicate of this issue. My log supports this thread's central claim — that the "file in use" message is misleading and there is no lock in the install directory — and I can now show it directly: the Cowork service was explicitly stopped and no package process was alive, and the launch still failed with the same dialog. It also contradicts the file-lock mechanism proposed in #76357 and the AppInfo-service mechanism proposed in #61635.
Environment
Claude_pzs8sxrjxfjjc1.46388.3.01.44121.4.0→1.46388.2.0→1.46388.3.0Disabled(see "Secondary finding")Symptom
Windows dialog: "Another program is currently using this file", pointing at
C:\Program Files\WindowsApps\Claude_1.46388.3.0_x64__pzs8sxrjxfjjc\...Every relaunch fails identically. Signing out of Windows and back in resolves it; a full reboot is not required.
Timeline
Reconstructed from
C:\ProgramData\Claude\Logs\cowork-service.logandMicrosoft-Windows-AppModel-Runtime/Admin. Username, home paths and SID redacted.| Time | Event |
|---|---|
| 12:28:10 | App exits (RPC
EOF); service stop requested;Service stopped|| 12:28:12 | Service restarts on
1.46388.2.0|| 12:28:19 | App reconnects, signature verified — update succeeded |
| 13:47:15 | App exits (RPC
EOF); service stop requested;Service stopped|| 13:47:17 | Service restarts on
1.46388.3.0|| — | App never reconnects. No client connection until 15:03:35 |
| 13:49:51 / 13:49:52 | Stop + restart (failed launch attempt) |
| 13:54:34 | Stop + restart (failed launch attempt) |
| 14:45:39 | Service start with no preceding stop — prior instance died without shutdown |
| 14:46:00 | Service start with no preceding stop — same again |
| 14:49:53 |
Stop-Service CoworkVMServiceby hand; clean stop, service confirmedStopped|| — | Launch attempted with service stopped and no package process alive → same error. No service start logged;
claude.exefailed before SCM was asked to start it || 14:51:04 | Sign out / sign in; service starts |
| 15:03:35 | App connects, signature verified — working, still on
1.46388.3.0|Get-AppxPackage *Claude*afterwards:1.46388.3.0,Status: Ok. The package registration was never damaged.AppModel-Runtime events at 14:46:00
PID 7540 was
cowork-svc.exe— confirmed live at the time viaGet-Process, running from the package path and owned by serviceCoworkVMService(StartMode: Auto).What this establishes
claude.exeentries in the Application log at all. The app exited cleanly (RPCEOF, orderlyService stop requested→Service stopped) as part of the normal update relaunch. The failure is in the post-update relaunch, not in applying the update — the package flipped to1.46388.3.0correctly and the service restarted on it.CoworkVMServicestopped and verifiedStopped, and no process running from the package path, the launch still produced the same "file in use" dialog. Nothing in user space was holding anything. The blocker is the leaked job object, and the dialog text is misleading (as #53247 argues).cowork-svc.exePID to container...F5. Correspondingly, the service instances started at 13:54:34 and 14:45:39 both vanish from the log with noService stoppedline — container teardown takes the process with it. A machine-wide Windows service being scoped into a per-launch AppX container looks wrong on its own, and it explains both the unclean exits and the leaked job.Secondary finding: the service cannot configure its own recovery actions
Every start logs:
and every stop logs:
The service lacks
SERVICE_CHANGE_CONFIGon itself. Its own message describes the consequence: it "may be auto-restarted during package servicing" — the mechanism #76357 blamed for update-time locking. Worth fixing regardless of this bug.The same ACL blocks administrators:
Set-Service -Name CoworkVMService -StartupType Manualreturns "Access is denied" even from an elevated PowerShell, so users cannot opt out of the service as a workaround.Stop-Serviceis permitted.Secondary finding: Cowork's VM backend is non-functional on this machine
Every service start logs:
Virtual Machine Platform / Hyper-V is not installed — confirmed directly:
So HCS never initializes and the stale-VM cleanup pass has never run. The service still starts, still joins the app's container, and still participates in the launch lifecycle while being unable to do its actual work. If Cowork is unavailable, the service arguably should not be started at all — or at minimum should not be enrolled in the app container.
Expected behaviour
0x80070020on job conversion).CoworkVMServiceshould not be scoped into the app's per-launch AppX container.Workaround
Sign out of Windows and sign back in. A reboot works but is unnecessary — the job is session-scoped. Killing processes and stopping the service do not help.
This error is driving me nuts. For me Claude launches fine on boot, but the error happens when it auto-updates and tries to close-reopen itself. The reason it's annoying is because restarting my computer is the only thing that allows me to reopen Claude. So when i'm running long-horizon tasks with other AI's, restarting my computer at that time is a problem.
Here's what Fable 5.1 told me to comment about it:
Deterministic trigger for this: the auto-updater's self-restart.
Same dialog ("Another program is currently using this file", pointing at
C:\Program Files\WindowsApps\Claude_<version>_x64__pzs8sxrjxfjjc\...), same outcome: app will not launch until reboot. x64, Windows 11 Pro. MSIX from claude.com/download.The reporter lists reproduction as not deterministic. For me it fires every time the updater closes the app to apply a downloaded update on its own. It has happened 6–7 times in a few weeks.
Reproduce
cowork-svc.exe— theCoworkVMServicehost, not the app. End Task on it changes nothing: the service is back within seconds.Stop-Service CoworkVMService -Forcelikewise: it returns within ~30 s, and launch still fails in the window while it is stopped.Recurred across versions. First failure on
1.37937.1.0. A reboot successfully applied the update. The next day the same failure happened again applying the following update, with1.46388.3.0now the registered package. So fix-on-reboot does not survive the next update cycle.Also tried without success: Settings → Apps → Claude → Terminate, then Repair. Repair reports the app is "currently running" with no app process present — consistent with the orphaned Silo/Job diagnosis above.
Service state at time of failure
Impact: Each occurrence blocks all desktop use until a reboot. Because the restart fires on user inactivity with no defer option, it lands mid-workload by design — which is the worst possible time to demand a reboot.
Asks
CoworkVMService, wait for it to reach Stopped, confirm no package-owned processes remain, then swap the package and restart the service (as in #57221 and #49655).disableAutoUpdatesin HKLM to avoid a forced restart that reliably breaks the app.Still reproducing on 1.46388.3.0 (Windows 11 Pro 26100, x64) as of 2026-09-05 — newer than the 1.32352.1.0 last reported here, so this is not fixed.
Same clean-quit trigger described by @Sabin-He and @HarvestEdge, not a crash.
%LOCALAPPDATA%\Claude\Logs\main.log:Identical sequence on 2026-08-23 23:53:30. Every activation since fails, reproducible on demand via
shell:AppsFolder\Claude_pzs8sxrjxfjjc!Claude:Confirming @DevHoracioRodriguez's hive finding on this build:
SystemAppData\Helium\User.datandUserClasses.datcannot be opened withFileShare.Noneeven after stoppingCoworkVMServiceand waiting 45s with zero processes running from the package install location.settings.datandroaming.lockin the same tree open fine.Two details I did not see mentioned yet:
config.jsonstill reportsupdaterLastSeenVersion: "1.46388.2"while the registered package is 1.46388.3.0 — from the app's side the update never completed.Package Status = Ok, signature valid to 2026-10-21. Reboot recovers.
A within-machine control: the leaked silo is not just the mechanism, it is the predictor
[🤖] Analysis run with Claude Code against my own machine's event logs. The mechanism in the OP matches what I found independently, so I won't restate it. What I think the thread is missing is a control: five consecutive updates on one machine, four failures and one success, with a single discriminating variable.
Windows 11 Pro 26100 x64, package
Claude_*_x64__pzs8sxrjxfjjc, Developer-signed sideload. Container GUIDs truncated to their first segment below (the full v1 UUID embeds the host MAC).The five transitions
| Update | Outgoing version's container | Result |
|---|---|---|
| 09-03 10:22 → 1.44121.4.0 | still alive | 6×
215/208, reboot 10:25:01 || 09-04 07:49 → 1.46388.1.0 |
{A57A732E}still alive |215/208at 07:49:08 and 07:49:17 || 09-04 18:49 → 1.46388.2.0 |
{85A6670E}+{85A66673}both destroyed 18:49:08 | relaunched by itself,201at 18:49:14. Zero errors. No reboot. || 09-05 00:08 → 1.46388.3.0 |
{84E76263}alive until 00:42:34 | failures at 00:08:56, 00:42:02/03/25/26, reboot 00:42:33 || 09-05 06:54 → 1.46388.4.0 |
{9962D43A}alive until 08:56:54 | failures at 06:54:26, 08:56:40, 08:56:41, reboot 08:56:53 |Every failure had a container belonging to a superseded version still alive. The one success did not. In both failures where I could bound it, the stale container was destroyed at session teardown (00:42:34 and 08:56:54), seconds before the shutdown, never spontaneously.
Method, if you want to reproduce it on your own machine: reconstruct container lifetimes from
Microsoft-Windows-AppModel-Runtime/Adminids 210 (created) / 211 (process added) / 217 (destroyed), keying on package full name, and clip unterminated spans at boot boundaries.Two things that save time
1. Event
67(Failed with 0x5 modifying AppModel Runtime status) is a red herring. It looks incriminating because it fires ~1 s before the first215in every failure. But it also fires in the successful 09-04 18:49:08 update. Not causal, don't chase it.2. Repair cannot work here, structurally. Repair ran 3 times across 2 incidents; each time
AppXDeploymentServerid 649 reportedACLs repaired successfully ... Register next time should succeed, and the launch failed one second later with the same0x80070020:The reason is that Repair is addressed to the package full name. On 09-05 it force-terminated the current version's containers, but the straggler was
{9962D43A}, belonging to1.46388.3.0— a version already moved toWindowsApps\Deletedand gone from the repository. No user-facing Windows tool addresses an object belonging to a deregistered package, which is exactly why only logoff or reboot clears it.On the title's "after app crash"
Corroborating @spadieri and @Barncore: on this machine it is never a crash. The 09-05 06:54 sequence is a clean, intentional quit-for-update, and the deployment half succeeds completely:
The update is flawless. Only the activation that follows it fails. Suggest the title's "after app crash" is too narrow — the auto-updater's own self-restart is a deterministic trigger, and for me it has been 100% reproducible across every version bump.
The one open question
What process keeps the outgoing version's container alive? I could not name it. Ruled out on my machine: the MCP servers and CLI child processes carry no package identity (checked with
GetPackageFamilyNameover every process), so Windows does not count them at all. That leaves a package-tree process — a Chromium helper such ascrashpad_handler, a utility or GPU process — surviving the quit. Anyone catching the failure live can settle it, since the state persists for hours:Any row naming a Claude version other than the installed one, or a path under
WindowsApps\Deleted\, is the survivor.Also worth flagging: @jtrobles-cdd reports the launch still failing with
CoworkVMServicestopped and no package process alive, which would rule the packaged service out as the pin. That is consistent with what I see — the service's own container is torn down and recreated cleanly on every update, including the successful one.Confirming on Windows 11 Enterprise 26200, packages
Claude_1.46388.3.0andClaude_1.46388.4.0— same 215/208 +0x80070020signature, twice in one morning. That part is already well covered in this thread, so I'll only add three things I haven't seen mentioned here.1.
CoworkVMServiceis trigger-started on a named pipe, which is why "stop the service first" workarounds keep failing.The package manifest declares it not just as auto-start but with a named-pipe trigger (
\pipe\cowork-vm-service, subtype GUID1f81d131-3e60-4c76-9860-37334e4ffce3=NAMED_PIPE_EVENT_GUID):So stopping the service does not hold: the next launch attempt trigger-starts it again. In my logs every failed activation is accompanied by a fresh service start, e.g.
This may reconcile the conflicting results upthread about whether stopping the service helps — it can only ever help until the next launch attempt re-arms it.
2. The "SCM recovery restart loop" explanation does not hold on my machine, yet the failure still occurs.
sc qfailure CoworkVMServicereturns no failure actions at all:There is nothing for the SCM to act on, so the restarts here are the pipe trigger, not service recovery policy. Worth separating the two mechanisms, since #91736 attributes the restarts to a recovery loop.
3. Decoded DACL — the ACE that looks like the service's own SID is actually AppXSvc's.
sc sdshow CoworkVMService:| Principal | Rights |
|---|---|
|
NT AUTHORITY\Authenticated Users| QueryConfig, QueryStatus, EnumDeps, Start, Stop, PauseContinue, Interrogate, ReadControl ||
NT SERVICE\AppXSvc| full, incl. ChangeConfig, DELETE, WRITE_DAC, WRITE_OWNER |S-1-5-80-1949724575-...resolves toNT SERVICE\AppXSvc. The service's own SID isS-1-5-80-690231842-763816591-443537665-320658410-1005583601(sc showsid CoworkVMService) and does not appear in the DACL at all — nor do LocalSystem or Administrators.That is the concrete reason for the
open service: Access is deniedwarnings the service logs on every start and stop: no principal in its own token holdsSERVICE_CHANGE_CONFIG. It also explains whySet-Service -StartupType Disabledandsc configare refused even from an elevated prompt, leaving the HKLMStartvalue as the only route — as reported in #91736.Note this is the standard DACL AppXSvc applies to MSIX-manifest-declared services, so a fix likely has to come from the app side (set recovery actions from the installer, or drop the self-management attempt) rather than from expecting the runtime ACL to change.
Happy to supply full event-log exports if useful.
Reproduced on demand, x64, 1.37937.x → 1.46388.4.0: the old container's live members are the non-elevated MCP-server / plugin processes that Claude Code spawned. Name-based kills miss them, which is why "no Claude processes remain" reports still wedge. Clearable without elevation and without sign-out.
Extending leifclaesson's live-member model from #73107 (pinner 1) and LucVanLuc's deferred-registration trace on #76357. Windows 11 Pro 10.0.26200 x64, Claude Desktop MSIX
Claude_pzs8sxrjxfjjc, four bad updates 28 Aug → 5 Sep, one good update (3 Sep) as the control.1. The discriminator, from
Microsoft-Windows-AppModel-Runtime/Admin. On the one update that worked, event 217 (container destroyed) fired for the app's session container at the moment the app quit. On all four bad updates it did not: the old app container survived the quit, and its 217 came only 2–4 s before Winlogon 7002 (sign-out). Today:The two-containers-per-version pattern LucVanLuc described is service (session 0) + app (user session). The service one is always fine; the app one is the one that fails.
2. Who the live members are. Not
Claude.exe, notcowork-svc.exe, notchrome-native-host.exealone. After the quit, the processes still running that had been spawned under Claude were the MCP servers and plugin helpers started by Claude Code sessions:bun.exerunning a plugin's MCP server (...\.claude\plugins\cache\...)uvx.exe→uv.exe→chroma-mcp.exe→ twopython.exechrome-native-host.exe(plus itscmd.exewrapper)litellm/python.exeprocess launched from a Claude Code terminalNone of them are elevated.
main.logshows the teardown only kills PTY trees ([CCD] Killing N PTY process tree(s) on quit); MCP servers are not in that set, so they outlive the app and keep the old container Job alive. This is leifclaesson's pinner 1 without the elevation requirement, i.e. it is the default case for anyone running Claude Code with MCP servers configured, not the rare elevated-child case. It also explains the reports here and in #76357 where killing everyclaude*/cowork-svc*/chrome-native-host*by name "left no Claude processes" and still wedged: the members are namedbun,uvx,python,node.3. Proof, no update needed. With Claude Code sessions open, quit from the tray → no 217 for the app container within 60 s (leak), 69 and 56 leftover processes on two runs. Kill the non-elevated leftovers (plain
Stop-Process, no admin) → 217 fires within seconds (01:46:39 on my run). Nothing else was touched: no service stop, no re-register, no sign-out. Relaunch then works. The broad kill is confirmed; killing only the MCP/helper set above (leaving VS Code, Chrome etc. alone) is what I am testing on the next occurrence.4. During the fault (Sysinternals Handle, elevated):
svchost.exe(Appinfo, PID 9036) holdsJob \Container_Claude_1.46388.3.0_x64__pzs8sxrjxfjjc-<SID>, the old version, while 1.46388.4.0 is the installed one. Appinfo's service state stays RUNNING. That matches #61635; the handle is the symptom, the members are the cause. Restart Manager shows no file lockers because the hold is a Job/silo, not a file handle. Package isStatus: Ok, andAppXDeploymentServershows nothing for this because it is an activation failure (afram123's correction in #80286 holds).5. What would fix it, app side. Before the stealth relaunch (
beforeQuitForUpdate), terminate every member of the app's container Job, MCP servers and plugin processes included, not just PTY trees; or wait for the old container's 217 before launching the new package. Self-heal on launch (find the staleContainer_Claude_<old>job, terminate its members, retry), as already asked for in #73107, covers it too. Both are doable from the packaged SYSTEM service.User-side workaround until then, no sign-out: when the dialog appears, kill the leftover non-elevated processes started under Claude (the MCP servers / helpers above), wait for 217, relaunch. Because they are the user's own non-elevated processes this needs no elevation prompt, which matters, since the prompt is often unusable during the fault.
Scripts (PowerShell 7: a 60 s watcher that tracks the live container GUID and reports a leak, an on-demand quit test with optional reap, and the clear tool) available on request.
Root cause found (nested job objects), with a repro and a workaround
Symptom: after the idle-triggered stealth update the app won't start with "Another program is currently using this file". Event log Microsoft-Windows-AppModel-Runtime/Admin shows events 215/208 with 0x80070020 "error converting the job".
What is going on:
How to see it (Windows 11, PowerShell inside a Claude Code session):
Workarounds:
Possible fixes on the app side: before quitting for the update, terminate the CLI process trees the app spawned (it owns those jobs), or spawn the CLI with PROC_THREAD_ATTRIBUTE_DESKTOP_APP_POLICY = BREAKAWAY_ENABLE_PROCESS_TREE so sessions live outside the container.
Hitting this on Windows 11 Pro 26100 with the MSIX/Store build. Two occurrences in under
14 hours, both after an idle-timer auto-update, both leaving the app unlaunchable with no
notification. Adding timings and log excerpts since I have a clean pair.
Package:
Claude_1.46388.4.0_x64__pzs8sxrjxfjjc(Store/MSIX)Occurrences
| | update fired | app returned | downtime |
|---|---|---|---|
| 2026-09-04 | 14:55:13 | 16:10:21 | 1h 15m |
| 2026-09-05 | 04:23:20 | 09:31:55 | 5h 08m |
Both preceded by
[stealth-update] Triggering stealth update after idle timeoutand, onesecond later,
beforeQuitForUpdate handler fired, going down for update.The update succeeds; the relaunch is what fails
Worth stating explicitly because the symptom reads like a failed update. In
Microsoft-Windows-AppXDeploymentServer/Operationalthe servicing completes cleanly:Then in
Microsoft-Windows-AppModel-Runtime/Admin, immediately after:So the new package is installed and enabled, and the app simply cannot be launched. Nothing
is half-installed and there is nothing to roll back.
Frequency
60
0x80070020events naming the Claude package, all within these two days:The 15:50–15:57 and 09:22–09:25 clusters are me repeatedly clicking the icon and getting
nothing. Each click is a fresh failed container creation.
CoworkVMService state
Consistent with #57221. On this machine right now:
Notably the deployment log shows Windows does terminate it during servicing:
So termination is not being skipped — but with
StartType: Automaticthe service returnson its own and can re-occupy the package job before the new container is built. Terminating
it once during servicing does not appear to be sufficient.
Also present at the time of writing: 19
Claude.exeprocesses from the package, 17 ofthem resolving under
WindowsApps\Claude*.Two things that make this much worse than the error itself
beforeQuitForUpdate, the app is gone.There is no notification, no retry, no tray icon, no log entry indicating the relaunch
was even attempted from the app's side. The only signal is that the app you were using
has vanished. That is how a failed relaunch became a five-hour outage overnight — I was
asleep, and there was nothing to notice.
[CCD] Killing 5 PTY process tree(s) on quitbefore quitting. An idle-timer updatekilled five terminal process trees. In my case the work had finished ten minutes earlier,
but an idle UI does not mean idle work — long-running jobs in those terminals would
have been destroyed with no warning and no way to resume.
Suggested asks
beforeQuitForUpdate, verify the new process actually started; if it did not,surface a notification and retry rather than exiting silently.
container exists, rather than letting
Automaticrestart race the container creation.Happy to supply the full event-log exports if useful.
Update: Incident did return after a few months of being clear - thankfully recovered without rebooting; Orphaned child processes confirmed
This recurred on 6 September 2026, and we recovered it without restarting Windows.
Environment
Failure sequence
The update initially failed with
0x80073D02, naming the previous Claude version as still in use. Registration subsequently succeeded, but every launch failed with0x80070020:Repeated registration repairs and Cowork service recycling did not recover it.
What actually cleared it
We found several surviving command-line processes whose parents had exited:
| Process | Observation | Result |
| --- | --- | --- |
|
git ... remote -v| Idle for over two hours, with an orphaned console | Stopping it did not resolve the failure ||
findandhead| Orphaned Claude log-search commands, approximately two hours old | Stopping both released the old container |The remaining commands were:
The event log recorded the recovery immediately afterward:
| Local time | Event | Result |
| --- | --- | --- |
| 13:55:51 | 217 | Old 1.46388.3.0 Desktop AppX container destroyed |
| 13:55:55 | 201 | New 1.46388.4.0 Claude process successfully created |
The desktop app opened normally. No reboot, sign-out, reinstall or data reset.
We stopped
findandheadtogether, so we cannot distinguish which one held the final container reference.Implication
This supports the mechanism described in #91763, but with ordinary
find/headchildren rather than a Git filesystem-monitor daemon.Checking only for
claude.exe, Cowork or Git processes can miss the actual survivors. The update lifecycle needs to account for child processes retaining the old app container after their parent exits.The generic “Another program is currently using this file” dialog conceals the useful diagnosis: the previous version's container is still alive because child processes survived cleanup.
Another x64 (non-ARM), domain-managed repro, with a deterministic trigger: the *first
launch of the app each day* fails. Every time.
Environment
| | |
|---|---|
| OS | Windows 11 Enterprise 10.0.26100 (24H2), x64, domain-joined |
| App | Claude Desktop MSIX,
Claude_*_x64__pzs8sxrjxfjjc|| Versions seen failing | 1.40609.1.0, 1.44121.1.0, 1.46388.1.0, 1.46388.4.0 |
| Window observed | 2026-08-29 → 2026-09-07 |
Same signature as the OP —
Microsoft-Windows-AppModel-Runtime/Admin,0x80070020:---
1. The trigger is the first launch of the day — 4 days out of 4
Cross-referencing the 215/208 clusters against the first successful app connection each day
(
Client connected: ... exe=claude.exeinC:\ProgramData\Claude\Logs\cowork-service.log):| Day | First launch attempt | First successful launch |
|---|---|---|
| 09-02 | 09-02 10:20:30 — FAILED | 10:34:07 (+14 min) |
| 09-03 | 09-03 09:08:41 — FAILED | 09:11:39 (+3 min) |
| 09-04 | 09-04 12:39:06 — FAILED | none that day |
| 09-07 | 09-07 09:13:09 — FAILED | 09:33:18 (+20 min) |
Every day the app was used, the day's first launch failed. (09-01, 09-05 and 09-06 have no
Claude activity at all — weekend plus one unused day — so there is no counter-example in the
window, not a single one.)
Retrying a few minutes later often succeeds; a logoff or reboot always works.
2. The failure comes before any deployment activity — the repair is a consequence, not the cause
This is the part I think matters most, and it corrects an assumption I initially made.
On the morning incidents the launch fails first, and Windows then kicks off a
same-version
RegisterByPackageFullNameself-repair about a second later:Note the version does not change —
1.46388.1.0→1.46388.1.0. Identical shape on 09-03with
1.44121.1.0. There is no Claude deployment activity between 00:00 and the firstfailure on either day.
So the package is already in the bad state when the day begins. Windows notices at
activation, tries a same-version repair, and that repair also races the service (see §3),
which is why the next few attempts keep failing before it settles. Compare
https://github.com/anthropics/claude-code/issues/83932, which reports same-version
repair racing the service it is repairing.
The machine sleeps rather than shuts down, so the logon session survives overnight — which
fits an orphaned Silo/Job scoped to the user session persisting from the previous day's
update until the next morning's first activation walks into it.
3.
CoworkVMServicere-enters the package container ~1s into servicingThe service is stopped for servicing and restarts under a second later, mid-servicing,
and logs that it could not prevent exactly this:
Same shape at 09:13:13 (restart 1.5s later) and 13:01:22 (0.76s later). The two warnings
in the Application log name the failure mode outright:
sc.exe qfailure CoworkVMServiceconfirms recovery actions were never armed(
RESET_PERIOD : 0, no actions) — it is losing this call on both ends. On a domain-managedmachine the packaged service apparently cannot open itself in SCM with the rights it needs.
4. No crash precedes it
The issue title attributes the orphaned Silo to a crash during startup. There is no crash
here. Over 10 days: 50
Windows Error Reporting/Application Error/Applicationevents in the Application log and 386 directories inHang
C:\ProgramData\Microsoft\Windows\WER\ReportArchive— zero for Claude or cowork. WERdemonstrably works on this box and never sees Claude fault.
5. Manifest
StartupType="auto"and a named-pipe trigger, so setting the service to Manual will notkeep it down — which likely explains why
https://github.com/anthropics/claude-code/issues/61635 saw it return ~30s after
Stop-Service.6. Suggested direction
StartupType="auto"for a service living inside the package it must not hold looks likeRepro tip for anyone trying to reproduce this: don't try to reproduce it by sleeping the
machine. Several reports here (mine included, initially) describe the trigger as sleep/wake.
On this machine that correlation does not survive checking — 9 away-blocks over 60 minutes
produced 1 incident, while 31 shorter ones produced 6, and overnight blocks of 6–10 hours
produced none. What is deterministic is *the first activation of the package in a logon
session that has already seen an update*. Leave the session logged in across an app update
and launch the next morning.
Happy to pull further traces — this reproduces daily.
Adding a culprit family to the list here, with the evidence on #91763 since the
mechanism there is identical.
Git for Windows' GnuPG daemons:
gpg-agent,keyboxdandscdaemon,spawned by GPG-signed commits made from the Code tab. They survive the update's
forced shutdown inside the container's job object, so the old container never
gets its 217 Destroyed event and every launch of the new version fails 215/208
with
0x80070020.Recovered here without a reboot or a sign-out by ending those three,
gpg-agentfirst because while it lives it respawns the other two straight back into the
same job. This reaches anyone with
commit.gpgsign=true.Container GUID pairing, the orphan sweep that finds it, and why it does not
happen on every update:
https://github.com/anthropics/claude-code/issues/91763#issuecomment-5570389648
Same failure on 1.49585.0.0 x64, English Windows 11, PowerShell 7.6.5. A few things here that the original report doesn't cover.
The main one: no update was pending.
Get-AppxPackageshowed 1.49585.0.0 before the failure and the same version after I recovered. Nothing staged, no MSIX operation running. So this isn't the deployment path from #76357, #83932 or #49655. It's the crash path the OP describes.The build is also a lot newer than what's in the other reports. 1.49585.0.0 against the 1.1.x and 1.2x.x builds already filed. Nothing has fixed it.
Event log,
Microsoft-Windows-AppModel-Runtime/Admin. Eleven events between 13:46:26 and 13:46:47, one 215/208 pair per launch attempt:Same as the OP's, but on en-US, so the dialog isn't a locale artifact.
State while it was failing:
Stop-Serviceworked and nothing was left running underC:\Program Files\WindowsApps\Claude_*. No usermode handle on the package, and activation still failed. That matches the OP'shandle.execheck.Signing out and back in fixed it. I didn't need a full reboot.
Two things I hit that aren't in the report:
1.
Restart-Service Appinfodoesn't work. #61635 pins the leaked handle onAppinfo, the UAC elevation broker, so restarting it is the obvious thing to try. It won't stop on a live desktop:If #61635 has the mechanism right, there's no way for a user to make the holder release, which leaves ask #2 as the only route.
2. Administrators can't reconfigure
CoworkVMService, and it doesn't come back after you stop it.Stop-Serviceworks.Set-Servicedoesn't, elevated:Stop is allowed and config isn't, so it's the service DACL rather than my token. Looks like
SERVICE_CHANGE_CONFIGisn't granted to Administrators. Same gap as the "failed to open service for recovery config: Access is denied" line incowork-service.login #40067.StartType Automaticonly covers boot, so once you stop the service mid-session the SCM leaves it stopped. The workaround going around from #76357 is "stop CoworkVMService, then relaunch," which means Cowork is down for the rest of your session, and per #28231 the app crashes instead of falling back to chat-only when it can't reach the service. That crash is what leaves the orphaned container behind. So the workaround sets up the bug it's working around. You need an explicitStart-Serviceafterward and you can't make that stick withSet-Servicebecause of the ACL.On ask #3: yes, please. The dialog names the install directory, so that's where you go looking, and I spent a while chasing file locks that don't exist. Nothing in the app or the message points at the container layer, and
AppModel-Runtime/Adminis the only place the real error shows up.Answering my own open question: there is no surviving process. The silo is empty.
[🤖] Follow-up to my earlier comment, where I asked which process keeps the outgoing version's container alive. I caught the failure live on 2026-09-09 (
1.46388.4.0->1.49585.0.0) and snapshotted the machine before recovering. The answer is that nothing is in it.Container GUIDs truncated to their first segment; the full v1 UUID embeds the host MAC.
The snapshot
Zero rows. Taken 2h11m after the update, while the app was still refusing to launch. Meanwhile the orphaned silo was very much alive:
A job object dies when its last member process exits. This one persisted 2h18m with no members, then died 1 second into session teardown.
What that settles
1.
taskkillandStop-Service CoworkVMServicecannot work, by construction. There is nothing to kill. This directly corroborates @jtrobles-cdd, who reported the launch still failing with the Cowork service stopped and no package process alive — that result is not anomalous, it is the expected one.2.
handle.exefinding no handles into the install directory is correct and irrelevant. It is the wrong object. The leak is a handle on the job, not on any file. Every "find what's locking the file" approach in this thread is searching the wrong namespace, which is also why the dialog's wording has misled so many of us.3. Logoff is sufficient; the boot does no work. The silo died 26 seconds before the kernel came back. Anyone rebooting for this is paying for something session teardown already did.
Discriminator holds, 5th consecutive time
Same pattern as the five transitions in my earlier comment: the container that survives is always the one holding the app's own UI process, while its sibling is torn down normally in the same second.
Caveat, stated honestly
The snapshot ran non-elevated, so a LocalSystem process (e.g.
cowork-svc.exe, session 0) would have a blankExecutablePathand would not match the filter. But{BC46CB77}is a user-session container whose logged member was the app's own UI process, which runs as the user and would have appeared. So "no surviving process" is established for the container that actually blocks the launch, not for session 0.The next step for whoever can catch it
The remaining question is no longer which process but which handle. Elevated, during the failure:
and look for a job whose name references the stale
Claude_<oldversion>_x64__pzs8sxrjxfjjc, then check which process holds it. That names the leaker outright. I did not have this captured in time; posting the method so the next person does.Confirming this on x64 Windows 11 Pro (10.0.22631), Claude Desktop 1.49585.0.0. Same fingerprint —
0x80070020, AppModel-Runtime EventID 215/208, only logoff/reboot recovers, service restarts and package re-registration do not.Three things I have not seen in this thread yet.
1. The trigger is the unattended forced MSIX update — and I have a control case
Deployment log, 2026-09-09:
The updater force-terminated the app at 02:04 while I was away (the default enforcement path waits for 10+ minutes of idle). From then the app was unlaunchable. I rebooted at 13:49 — 11h45m of downtime.
Control case, 2026-09-07 11:44. Same app, same MSIX pipeline, same
ForceApplicationShutdownOption— except I clicked "Restart to update" in the Help menu:Clean when the restart is user-initiated. Broken when the updater kills the app on idle. Three occurrences in six days (09-03, 09-07, 09-09), each preceded by an unattended forced shutdown; every user-initiated update in the same period succeeded.
2. The app's own self-repair fails — 15 re-registrations including a full Remove/Add
The issue body notes that
Reset-AppxPackageand re-registration do not recover. Here the app itself attempted exactly that, repeatedly, and failed:15 repair re-registrations plus a full package Remove → Add over 3.5 hours. None recovered. Only the reboot did. Further confirmation that the orphaned handle sits above the package layer, so nothing at the deployment layer can clear it.
Matching AppModel-Runtime entries during the same window:
3. This failure mode is invisible to telemetry
Across the whole 11h45m window:
Application Hangand noApplication Erroreventssettings.dat)All three of my occurrences look identical from the server side: nothing happened. Absence of crash reports for this bug should not be read as absence of impact.
Suggested mitigation while the Silo/Job cleanup is being fixed
Stop force-terminating the app to apply a staged MSIX update. Apply it on the next user-initiated restart instead. In my data that path has a 100% success rate and the forced path has a 0% one.
One angle that has not come up in this thread: affected users cannot opt out of the packaging layer the bug lives in.
The official Windows download is an
.exethat installs an MSIX package. The winget manifest points at the same artifact:Result on my machine — the Microsoft Store was never involved:
Nothing under
%LOCALAPPDATA%\Programs, no entry in Apps & features, and updates arrive as.msixfrom the same host. There is no non-MSIX build to switch to. (Earlier advice in #46179 to move to a standalone install via winget no longer applies — the manifest now resolves to the MSIX installer.)Consequence for this issue: for everyone hitting 215/208 here, the only mitigation anyone can offer is "log off" or "reboot". There is no packaging fallback, so until the Silo/Job cleanup is fixed the failure has no user-side workaround at all.
Filed separately as #93008, which github-actions auto-labelled
invalid11 minutes later; reposting the substance here since this is where the mechanism is actually being worked out.aFollow-up to my comment above — this reproduced again on 1.49585.0.0, and the sequence
matched the prediction end to end. Two new findings: retrying is not just useless, it makes
Windows re-register the package on every attempt, and logoff clears it in 14 seconds.
The predicted sequence, observed
The machine had not rebooted since 2026-09-07 13:03. The update landed the previous evening
and broke the session on the spot; the session then carried the damage overnight.
That is exactly the repro recipe from my previous comment: leave the session logged in
across an app update, then launch. No sleep/wake needed.
Retrying does not converge — and re-registers the package every time
I retried for roughly half an hour. Every attempt failed, and each one triggered a fresh
package registration. One paired
7040+7045in the System log per attempt:215/208 fired on every single one. It never settled.
I think this explains the reports here that
CoworkVMService"cannot be stopped". I couldnot stop it either. It is not that the stop is denied as such — SCM is tearing down and
re-creating the service entry underneath you on every launch attempt, so a
Stop-Serviceraces a re-registration that is already in flight. The more you retry, the more reliably the
stop fails.
Worth noting for the maintainers: a failed activation triggering a full
re-register + packaged-service reinstall is a fairly heavy self-repair to run on every click,
especially when it demonstrably cannot fix this state.
Logoff fixed it in 14 seconds
App launched normally straight after. Consistent with the OP's session-scoped Silo/Job
diagnosis — and a full reboot was never needed.
Practical note for others hitting this
Don't wait it out and don't bother retrying; both cost time and neither works. Sign out and
back in — it is seconds, not a reboot. In my case the failure is now costing a logoff every
morning, because the app updates most days and the session always outlives the update.
Environment unchanged from my comment above: Windows 11 Enterprise 10.0.26100, x64,
domain-joined, MSIX
Claude_*_x64__pzs8sxrjxfjjc, now on 1.49585.0.0.Still reproduces on Claude Desktop 1.52386.0.0 (x64, MSIX) / Windows 11 Home 26200 — same 215 + 208 /
0x80070020signature described here.Trigger in my case: an MSIX update applied while the app was running (1.49585.0.0 → 1.52386.0.0). Sequence captured from
Microsoft-Windows-AppModel-Runtime/AdminandMicrosoft-Windows-AppXDeploymentServer/Operational(local time; username and SID redacted):21 × 215/208 errors total in that window. Only the reboot recovered it.
Three details from this capture that might help narrow the root cause:
Registerdoes not clear the stale Job. At 23:25:07 AppXDeploymentServer logsRegister ... finished successfullyfor the new package, and the very next launch attempt ~1 second later still fails with 215/208. So the orphaned Job survives re-registration of the package — consistent with the reports here thatAdd-AppxPackage -RegisterandReset-AppxPackagedo not recover.Destroyed Desktop AppX container ... Claude_1.49585.0.0only fires at shutdown, roughly an hour after the update. That looks consistent with the old version's Job never being released when the updater swapped packages underneath a live app — which would also explain why this correlates so strongly with the update path rather than with plain crashes.CoworkVMServicewasRunning/Automaticthroughout, and noApplication Error/Application Hangevents or Crashpad dumps were produced — the app does not crash here, it is blocked at container creation.I have not personally confirmed that a logoff alone is sufficient (I rebooted); noting it only because this thread reports logoff as equivalent, and it would be a meaningfully cheaper recovery to document if confirmed.
Filing this as a comment rather than a new issue since #76357 was already closed as a duplicate of this one — just confirming the bug is still live on the current build, in case the version and timing data is useful.
Confirmation on
Claude_1.52386.0.0— stoppingCoworkVMServicedoes not recoverReproduced after an in-place MSIX update. Adding diagnostics from a still-broken live state (no reboot yet).
Environment
Claude_1.52386.0.0_x64__pzs8sxrjxfjjc(Get-AppxPackageStatus =Ok)User-visible symptom
Bare Windows dialog titled with
C:\Program Files\WindowsApps\Claude_1.52386..., text equivalent to "This file is being used by another program."Claude.exenever appears.AppModel-Runtime/Admin on a failed launch
Ruled out
RmGetList) onapp\Claude.exeandapp\resources\cowork-svc.exe: 0 lockers while launch still failsWindowsApps\Claudemodules loadedStop-Service CoworkVMServicesucceeds; service staysStopped; launch still failsStart-Processof theclaude:protocol and ofapp\Claude.exefail with the same sharing-violation messageAdd-AppxPackage -DisableDevelopmentMode -Register <AppxManifest.xml>: no recoverySet-Service/sc configto Manual/Disabled: Access denied (packaged service ACL).StartupTyperemains AutomaticManifest on 1.52386 still declares auto-start
AppxManifest.xmldesktop6:Service:CoworkVMServiceStartupType="auto"StartAccount="localSystem"app\resources\cowork-svc.exe(inside WindowsApps)The Manual/Demand-start change proposed in related issues has not shipped in this build. The service is still
WIN32_PACKAGED_PROCESS+AUTO_START.Takeaway
This matches the leaked Job/Silo path rather than a live userspace file lock. The dialog is misleading. Stopping the service is not sufficient. Only logoff or reboot has been reported to clear it.
@Originalutter's finding that retrying makes Windows re-register the package on every attempt matches what I captured on 2026-09-09, and I can put a number on it.
The forced update landed at 02:04 while I was away:
From 10:27, while I kept trying to launch the app, the deployment log records this:
15 repair re-registrations plus a full
Remove→Addover 3.5 hours, none of which recovered it. Note the package was completely reinstalled at 11:13 and the container still would not activate afterwards — consistent with the orphaned handle living above the package layer, and with retrying being actively counterproductive rather than merely useless.Two practical notes:
1.52386.0.0(registered 2026-09-11 10:11) and have not hit the failure on this build yet, so I cannot confirm or deny it from my side — but given @luifer993 and @jmylot both reproduced on it, it does not look fixed.Still reproducing on Claude Desktop 1.52386.3.0 (MSIX), Windows 11 Pro 26200. Adding a newer data point than the reports above (1.20186.0.0, 1.6608.0.0), plus two details I did not see in the thread.
Sequence, from Windows and app logs:
DeferRegistrationWhenPackagesAreInUse.[stealth-update] Triggering stealth update after idle timeout, thenbeforeQuitForUpdate. The relaunch never completed.updaterLastSeenVersionstayed on the old build and astealth-relaunchmarker was left behind.0x80070020while converting the job.CoworkVMService(DisplayName "Claude",cowork-svc.exe) isAUTO_STARTwith its binary at...\Claude_1.52386.3.0_x64__pzs8sxrjxfjjc\app\resources\cowork-svc.exe, so it runs whenever the machine is on, app open or not.Nothing short of ending the logon session recovers it. I tried, in order:
Stop-Service CoworkVMService -Force(it comes back), re-register,Reset-AppxPackage, then a fullRemove-AppxPackageand clean reinstall. The reinstall failed with0x80073CF6/0x80073D05because...\Local\Packages\Claude_pzs8sxrjxfjjc\SystemAppData\Helium\User.datwas still a loaded hive, with 5 silos mounted. Only ending the session cleared it. Every step before that was wasted, and the uninstall left the machine with no working app in the meantime.The forced restart is what makes this risky rather than annoying.
autoUpdaterEnforcementHoursdefaults to 72, and my logs showAuto-restarting app after update pending for 73 hours. On a machine with long uptime, the app picks its own moment to relaunch into a package it cannot activate, with nobody present.The fix already proposed in #76357 looks right: stop
CoworkVMService, wait forcowork-svc.exeto exit, and terminate leftover package-ownedClaude.exeprocesses before applying the update. Two smaller asks alongside it: make the service demand-start so it is not holding the package at idle, and fix the error text, since "Another program is currently using this file" sends people hunting for a file lock when the stuck object is a kernel silo.Still reproducing on 1.52386.6.0 (x64 MSIX, Windows 11 Pro 26200), the latest build as of 2026-09-13. Adding one machine's frequency data, because it shows what separated the failed updates from the clean ones.
6 updates in 24 days: 4 left the app unlaunchable until reboot, 2 were clean
| Date | Update | Trigger | Result |
|---|---|---|---|
| 08-21 | 1.32885.1 → 1.34493.1 | update | 5 × event 208
0x80070020, reboot || 08-26 | 1.34493.1 → 1.37937.1 | stealth update | relaunch failed, reboot |
| 08-29 | 1.37937.1 → 1.40609.0 | normal quit, deferred register | old container survived ~19 h, next-day launch failed, reboot |
| 09-07 | 1.40609.0 → 1.46388.4 | stealth update | clean, relaunched in 2 s |
| 09-09 | 1.46388.4 → 1.49585.0 | stealth update | clean, relaunched in 37 s |
| 09-13 | 1.52386.3 → 1.52386.6 | stealth update | automatic relaunch + 4 manual attempts failed over 67 min, reboot |
The difference: in 3 of the 4 failures a console process hung during the forced shutdown and WER logged
AppHangB1(bash.exe08-26,conhost.exe08-29 and 09-13). Neither clean update logged a hang. That fits the nested-job analysis above:ForceApplicationShutdownonly reaches processes with package identity, so a stuck identity-less child keeps the old container alive.09-13 sequence (local time)
Container membership on a healthy session (QueryInformationJobObject from a Claude Code tool shell): 47 processes. 17
claude.exe(desktop app + CLI) carry package identity; the other 30 do not: 9cmd.exe, 9conhost.exe, 8node.exe(stdio MCP servers), 3rbx-studio-mcp.exe, 1powershell.exe.Correction to my earlier comment, plus a data point against the
AppHangB1split @NullF4iTH proposed.On 09-09 I wrote that in my data "the forced path has a 0% success rate". That no longer holds. Since then the updater force-applied four more updates on this machine and all four were clean. Full history for this machine, every update I have logs for:
| Register | To | Initiated by |
AppHangB1in window | Outcome ||---|---|---|---|---|
| 09-03 12:37 | 1.44121.4 | updater, idle | none | failed — confounded:
vmcompute.dllalso failed to load until reboot || 09-04 23:48 | 1.46388.2 | updater, idle | none | failed — unlaunchable next working morning, reboot |
| 09-07 11:44 | 1.46388.4 | me (Help → Restart to update) | none | clean, ~5 s |
| 09-09 02:04 | 1.49585.0 | updater, idle | none | failed — 215/208, 11h45m, reboot |
| 09-11 10:10 | 1.52386.0 | updater, idle |
git.exeat 10:11:02 | clean — but Register took 42 s || 09-12 00:21 | 1.52386.1 | updater, idle | none | clean, ~4 s |
| 09-12 05:32 | 1.52386.3 | updater, idle | none | clean, ~4 s |
| 09-14 01:43 | 1.52386.6 | updater, idle | none | clean, ~4 s |
So: 3 of 7 updater-initiated forced updates failed, 4 were clean. The forced path breaks sometimes, not always, and something else decides which.
Against the
AppHangB1splitOn this machine the WER hang record does not separate the outcomes, in either direction:
AppHangB1(or any Application Hang) anywhere near the forced register.git.exehere is almost certainly a child of a Claude Code session running in the desktop app's Code tab, so it is exactly the "stuck child without package identity" case — and the old container was released anyway.Two readings I can't distinguish from logs alone:
AppHangB1is a poor proxy for it. A child can hold the container without ever being reported as hung (my failures), and a reported hang may get torn down by WER in time for the container to be destroyed (my 09-11 case — note the 42 s stall, consistent with the register waiting on it).Either way, absence of an
AppHangB1should not be used to rule this bug out. If anyone catches a failure live, the child-process tree of the old container before recovering is the thing to capture.Follow-up: it happened again on the next update, 1.52386.3.0 to 1.52386.6.0, same machine. The logs show the trigger needs no user action.
From
%LOCALAPPDATA%\Claude\Logs\main.log:Then AppModel-Runtime event 215:
0x80070020: Cannot create the Desktop AppX container for package Claude_1.52386.6.0_x64__pzs8sxrjxfjjc because an error was encountered converting the job. Unlaunchable until reboot.autoUpdaterEnforcementHoursisn't the only trigger. The quit also killed 11 running Claude Code sessions.``
``Claude VM Service: failed to disarm SCM recovery actions for this stop; if the stop overruns, the service may be auto-restarted during package servicing: open service: Access is denied.
It looks like a fix is partly in place, but the service can't change its own recovery settings, so it can restart during servicing and lock the package again.
Data point that contradicts the
CoworkVMServiceworkaround being circulated in #76357 / #51954: on this machine stopping the service does not recover the launch, because the launch attempt itself re-installs and restarts the service.Environment
Claude_1.52386.6.0_x64__pzs8sxrjxfjjc(updated from1.52386.0.0)1. Stopping the service does not help
Microsoft-Windows-AppModel-Runtime/Admin:The container holding the service was torn down four seconds earlier, and
LaunchProcessstill fails withERROR_SHARING_VIOLATION. So whatever holds the silo is not the service's container membership.2. Why the "disable the service, then Relaunch" workaround cannot work
System/ Service Control Manager, at the exact moment of each launch attempt:The launcher re-registers the service with
StartType=Automaticand starts it again (new PID 13460, new container{9474F7A9-...}) — before the main process gets to start. Any manualSet-Service -StartupType Disabledis undone by the next Relaunch.This is not a one-off. The same 7040 → 7045 pair fires on every launch attempt, across updates:
3. Old package does not deregister cleanly
During the update itself:
0x5= access denied while moving the previous package out of its state. Possibly related, possibly separate — flagging it in case it helps narrow this down.(Event messages on this machine are localized; event IDs, HRESULTs and package names are verbatim.)
Summary
Claude.exeprocesses remain, and the only package process alive is the service.Happy to collect anything more specific (ETW trace,
hcsdiag, handle dumps) if that would help.@gammaraay fair, and your sample is bigger than mine. Two corrections to my comment:
AppHangB1. So neither the hang record nor the Register stall separates the outcomes here. Your reading (1) fits the mechanism better: a windowless child (MCP server,find,head) never gets reported as hung, so a hang record is at best a side effect, not the thing holding the container.On capturing the tree live: agreed, that's the missing piece. I now have a scheduled task on AppModel-Runtime event 208 for
Claude_pzs8sxrjxfjjc!Claudethat records, before anything recovers, every process with its package identity,IsProcessInJob, parent liveness and command line, plus the 201/208/215/217 and AppX events. It doesn't kill anything. If it catches the next failure I'll post which in-job, identity-less processes were alive.The leak is dormant, not immediate: it can survive a whole successful update cycle and detonate on an unrelated relaunch days later
[🤖] Third data point, following my first and second comments on this issue. I caught this one live with a script that reconstructs container lifetimes from the event log, run before recovering. It changes the timing model, not the mechanism.
Container GUIDs truncated to their first segment.
The sequence
What this changes
My first comment's control table implicitly assumed the leak and the failure it causes are close together in time - the orphan from update N blocks the relaunch that follows update N. That's not required. The leak from update N can survive update N+1 completing perfectly cleanly (N+1's own quit created a fresh, healthy container and nobody noticed anything), and then block some completely unrelated relaunch of N+1 days later, with no update in the picture at that moment at all.
Practical fallout for anyone trying to self-mitigate with "sign out right after every update": that is not provably sufficient on its own. You have to confirm no orphan is actually left behind, not just assume one sign-out cleared the slate - because the thing that finally bites you might be a leak from an update cycle you already thought you'd handled safely.
One more confirmation on Repair
@Sabin-He and others in this thread have noted Repair doesn't help. This adds a wrinkle: it's not only that manually clicking Repair in Settings doesn't help - Windows appears to auto-invoke an equivalent repair-style registration the moment a launch fails (
RegisterByPackageFullName ... RepairAppRegistrationOption, no user action), and it still can't reach the problem, for the same structural reason: it only touches the current package's containers, and the orphan belongs to a version that's already deregistered. It's not that Repair is broken - it's addressed to the wrong package version by construction, automatically or manually.Detection script, if useful to others
I built a small read-only PowerShell script that reconstructs container lifetimes from
Microsoft-Windows-AppModel-Runtime/Admin(ids 210/211/217, keyed by package full name) and flags any live container whose version differs from what's currently installed - which is exactly how I caught this one. Happy to paste it here if it'd help others self-diagnose without waiting for a failure to also catch a live snapshot.Addendum to my dormant-leak comment: it survives sleep, which is why it can be dormant so long
[🤖] Short follow-up to my previous comment on this thread. Someone reasonably asked (well, I did, of myself) whether the app might have silently crashed and sat broken for days without anyone noticing. Checked, and no - and the reason why is worth recording here since it explains the mechanism, not just the timing.
Microsoft-Windows-Kernel-Power506/507 (Modern Standby entry/exit) show the machine asleep continuously across the whole gap:Zero
215/208events anywhere in the 3-day span itself. The leaked Desktop AppX container isn't repeatedly failing while nobody's watching - it's suspended along with the rest of the machine's state, same as any other job object. It only collides with the OS's next attempt to build a new container, whenever a real launch next happens to occur - which in this case was the literal moment of waking the machine, not some earlier silent failure.Practical takeaway for anyone else chasing this down from their own logs: if you're trying to correlate a failure with "what must have happened while I was away," check
Kernel-Power506/507 for Modern Standby spans and cross-reference againstAppModel-Runtime/Admin215/208 in the same window. A leak from days ago plus a machine that's been mostly asleep will look, from a wall-clock distance, like it "must have crashed at some point" - but the event log settles it precisely, and in this case the answer was "nothing failed until the exact second the machine woke up."Same 215/208
0x80070020signature, now on the 2.x line (1.52386.6.0 → 2.110.0.0, 2026-09-15). Adding three things I don't see in the thread yet: a failed restart that never rebooted still cleared it, a hung console child at register time on every failed update here, and the exact container pair behaviour. Everything under "Observed" is from logs; inferences are labelled.Environment: Windows 11 Home 10.0.26200 x64 · MSIX
Claude_pzs8sxrjxfjjc,SignatureKind: Developer,Status: Ok· CoworkVMService present, Auto ·ClaudeStartupStartupTask enabled (State=2) ·C:\ProgramData\Microsoft\Windows\AppRepository\Families\ApplicationData\Claude_pzs8sxrjxfjjcabsent (same as @ennsta / @mySebbe) · logs at%LOCALAPPDATA%\Claude\logs\main.log. Earlier write-up from this machine on the0x80073D02variant: #76357 (2026-08-09).Observed: 2026-09-15 timeline (local)
1. A restart that failed still cured it
The 20:19:22 restart never completed: Winlogon logged 4004 a minute later and the boot time is unchanged. But the orphaned
1.52386.6.0container was destroyed in the same second the restart was requested, and the next launch at 20:32 was clean. So the cure is the session-teardown process sweep, not the boot and not a completed logoff. That narrows @TomerReuven's "logoff is sufficient" one step further: whatever Winlogon kills in the first second of teardown is enough.Inference, not measured: the process Winlogon then failed to terminate is plausibly the hung console child from the next section, i.e. the sweep killed the pinning member and then got stuck on something else.
2. A hung identity-less console child at register time, on every failed update here
Four stealth updates this month, WER Application Hang records within the register window:
| Stealth update | Transition | PTY trees killed | Hang at register | Outcome |
|---|---|---|---|---|
| 09-11 01:55 | 1.49585.0 → 1.52386.0 | 8 |
cmd.exeAppHangXProcB1 (waiting onpython.exe) 01:55:42 | dark 5h26m, reboot || 09-11 22:44 | 1.52386.0 → 1.52386.3 | 6 | none | relaunched in 2 s |
| 09-13 19:07 | 1.52386.3 → 1.52386.6 | 8 |
conhost.exeAppHangB1 19:07:37 | dark 41 min, reboot || 09-15 20:15 | 1.52386.6 → 2.110.0 | 15 |
conhost.exeAppHangB1 20:16:07 | dark 16 min, see §1 |3/3 failures had a hung console child in the forced-shutdown window; the 1/1 success did not. n=4, one machine, so I'm reading this as consistent with @NullF4iTH's mechanism rather than proof of it, and @gammaraay's counter-examples still stand. Note the
[CCD] Killing N PTY process tree(s) on quitline is a usable proxy for how much identity-less tree the forced shutdown has to reap.3. The container pair
Both
1.52386.6.0containers were created at the 09-13 19:48 launch.TerminateApplicationsat 20:16:07 destroyed one; its sibling{60E4BA7A}survived empty for 3 min 15 s until the teardown in §1 and was what blocked every 2.110.0.0 activation. Matches @TomerReuven's observation that the survivor is always the one holding the UI process. Event 670x5(0x280000 → 0x480000) fires at the same instant, as @ZardoZAntony noted.Mitigation applied, will report back
Set the documented machine policy so the stealth path cannot fire, and will update manually with the app closed:
Per the MDM reference this is one of the "app-behavior keys" that leaves the rest of the configuration local. If the
[stealth-update]line stops appearing and the next update (done by hand, app closed) registers cleanly, that's a usable off-switch for anyone who'd rather own their update timing than lose 15 sessions to it.Caveat on scope: single machine, timestamps verbatim from the logs, §1's "which process" is inferred.
Follow-up to my rescue-script comment: the same launch failure recurred today, 2026-09-17, on Claude Desktop
2.110.1.0(Claude_2.110.1.0_x64__pzs8sxrjxfjjc).Observed in
Microsoft-Windows-AppModel-Runtime/Admin(local time, UTC+02:00):0x80070020while converting the job, plus Event 208 while configuring runtime /LaunchProcess.NtUnloadKey2(REG_FORCE_UNLOAD)recovery as SYSTEM through a temporary scheduled task.Recovery succeeded without signing out, rebooting, reinstalling, or resetting the app. The standalone CLI process remained running.
This confirms that the failure still occurs on
2.110.1.0and that the previously posted recovery script restored launch on this occurrence. I did not capture the per-hive unload output in this run, so I cannot report a hive count or individual unload statuses. A supported recovery path and a fix preventing recurrence are still needed.Corroborating from an independent set of logs, plus one thing I cannot find in this thread.
Briefly, so as not to restate what's here: I independently hit the same
0x80070020on AppModel-Runtime 208/215, with the HeliumUser.dat/UserClasses.datpinned, event 649 reporting "ACLs repaired successfully ... Register next time should succeed" and register then failing, and the 7040/7045 re-arm on every servicing. All already established here, most of it in more depth than I had. 2.110.0.0 and 2.110.1.0 are already covered by @berad217 and @kamkie.The new part: both HRESULTs occurred inside a single incident on my machine, same package, two minutes apart. All times UTC:
In fairness, Settings-initiated repair was already in flight by then (603 from
SystemSettings.exeat22:29:38.167Z,22:30:03.279Z,22:30:14.003Z) and fresh package data appeared from22:33:27.664Z, so the0x80070002may be downstream of that remediation rather than an independent fault. Flagging it because #76357 (closed as a duplicate of this) and #94241 both treat the two codes as separate failures, and on this machine they were not cleanly separable.Minor addition: Settings Reset did not recover it here on 17 September, and it is destructive, wiping local app config, the MCP server list, scheduled tasks and the sidebar session list. Worth steering people away from it for this signature, given the silo unload in this thread costs nothing.
Safety note on the SYSTEM unload script: check for running Desktop processes first.
While building a local wrapper around @kamkie's script I tested it against a healthy, working Claude Desktop, and found something worth flagging for anyone running it.
A normally running install has these hives mounted too. Right now, with Claude working fine and 13 Desktop processes alive,
hivelistshows 8 Claude silo entries, including the two this thread is concerned with:So a mounted silo is not itself the fault. The fault is a mounted silo with no Desktop process alive. The script's own filter, package family plus silo prefix, matches both states identically, and its guard against this is a line of prose in the comment ("do not run it while Claude is actually working").
Suggested addition: refuse unless there are zero Claude Desktop processes, with an override switch. Worth filtering on executable path rather than process name, since the Claude Code CLI also runs as
claude.exefrom%APPDATA%and is unrelated to the package container, so it should not block the repair.I have not tested what force-unloading live hives does to a running install, and did not want to find out on a working one. But given people are running this mid-incident, when it is easy to misjudge whether the app is truly dead or just slow to show a window, a process check seems cheap insurance.
Adding a root-caused instance of this on Windows, with the trigger timestamped and the container error identified. Hopefully useful to whoever picks this up.
Environment: Claude Desktop MSIX 1.52386.6.0 → 2.110.0.0 → 2.110.1.0, Windows 11, enterprise-managed (Defender for Endpoint, Dell Trusted Device, Absolute). Package
Status: Ok, standardWindowsAppslocation.Trigger — confirmed via
Get-AppxLog: the auto-updater applied 2.110.0.0 → 2.110.1.0 at 00:43 and again 00:54 local time withForceApplicationShutdownOptionwhile the app was open and idle overnight. The app never relaunched. Same pattern on the previous update. It only happens when the app is left running unattended.The launch failure is not a file lock. The dialog says "Another program is currently using this file," but
Microsoft-Windows-AppModel-Runtime/Adminshows the real error:Container job creation fails. Verified no user-mode process holds any package file:
Get-Processby path,Win32_Processenumeration, and Resource Monitor → Associated Handles searched while the error dialog was on screen — all empty. Killing orphaned MCP/bun/node/python processes does not help because there are none. Windows auto-runsRegisterByPackageFullNamewithRepairAppRegistrationOption, which completes0x0, and launch still fails. Sign-out/in does not clear it; only a full reboot does.Application logging is dead.
main.log,claude.ai-web.log,cowork_vm_node.loglast written 2026-08-20;main-window.logandmcp.log0 bytes since 2026-08-11. Persists across two major version upgrades and a clean reboot. Thelogs\directory is writable (ACL verified, write probe succeeded) and IndexedDB/Local Storage in the same container are written normally. So none of the four abnormal exits since 2026-09-05 have any application-level record.Related — service cannot arm its own recovery.
cowork-service.logon every stop:failed to configure recovery actions (a crashed service will stay down until reboot): open service: Access is denied.The service DACL is:No ACE for
BAorSY, soSERVICE_CHANGE_CONFIGis denied to LocalSystem and to elevated administrators.sc.exe qfailureshowsRESET_PERIOD 0with no actions.Asks:
autoUpdaterEnforcementHourscaps at 72 with no "never" option.Happy to supply full
Get-AppxLog, AppModel-Runtime, andcowork-service.logoutput on request.Hitting this again today (2026-09-17), same signature. Claude Desktop
2.110.1.0,CoworkVMService/cowork-svc.exe.cowork-service.logshows the service repeatedly failing to reset its own crash-recovery config after each crash, which appears to be what leaves the AppX job/silo handle orphaned:Recurred 6 times in a single day (12:26, 12:28, 12:29, 12:31, 13:00, 16:06-16:08). Stopping
CoworkVMServiceand killingcowork-svc.exemanually does not clear the lock -- app still fails to launch with0x80070020afterward. Only a full reboot recovers it. Would be good to get a fix prioritized since this is happening multiple times per day now, not as a one-off.Two more occurrences today on the same machine, and the logs this time rule out
the explanation most of these reports assume. Adding them because the sequence
is unusually clean.
Environment
Claude_pzs8sxrjxfjjc2.110.0→2.110.1→2.2553.0(two updates in ~3.5 hours)The failure is not caused by anything holding the package
Previous reports (and my own earlier one) assume the leak follows a forced
shutdown of a still-running app. Today shows it happens when the app shuts
itself down cleanly and Windows has already stopped the packaged service.
Occurrence 1, from
main.logplus the AppX logs:Occurrence 2, same day, identical shape:
So at the moment of the failing container creation:
beforeQuitForUpdate, not been force-killedCoworkVMServicehad already been terminated by the deployment engine(events 9648/9650 at 09:26:46, three seconds before the first 215)
The register is fine. What fails is rebuilding the container afterwards. Every
subsequent launch attempt produces a fresh 215/208 rather than recovering, so
each attempt to reopen the app makes the situation worse rather than better.
Every register leaks, without exception
Correlating every Claude register operation against AppModel-Runtime 215/208
within 3 minutes, since 08-31:
| Register | Forced | 215/208 |
|---|---|---|
| 09-01 21:28 | yes | 3 |
| 09-02 02:30 | yes | 15 |
| 09-02 02:31 | yes | 9 |
| 09-02 02:31 | yes | 3 |
| 09-03 12:29 | yes | 3 |
| 09-07 15:48 | yes | 3 |
| 09-07 16:12 | yes | 3 |
| 09-08 13:14 | yes | 12 |
| 09-17 09:26 | self-quit | 3 |
| 09-17 12:51 | self-quit | 3 |
10 of 10. The two self-quit cases matter most: they remove "something was still
running" as an explanation.
Outcome varies even though the leak does not. Sometimes the app recovers on its
own after ~10 minutes (both of today's cases). Sometimes it stays unlaunchable
until sign-out or reboot (09-03, 09-07, 09-08). A user-session script cannot
clear it either way - I tried stopping the service and terminating every
package process, and it changes nothing, which is consistent with the object
being bound to the logon session.
Frequency makes this expensive
Update cadence on this machine: 08-25 (x2), 08-26, 08-28, 09-02, 09-03, 09-07,
09-08, 09-10, 09-11, 09-13, 09-15, 09-17 (x2). Roughly daily, twice on some
days. Each one costs ~10 minutes of the app being gone, and anything unsaved in
a Design canvas at that moment is lost, because the canvas is not persisted
locally.
The client log also shows
[updater] Using GrowthBook check_interval_ticks=1- this account appears to be in a cohort checking four times as(default 4)
often as default. Even without a code fix, moving affected users out of that
cohort would cut the exposure by ~4x. That seems worth considering as an
interim mitigation, since it needs no release.
What would help users today
The app already knows when it is about to do this -
beforeQuitForUpdatefiresfirst. Two things that need no fix to the underlying container bug:
AppModel-Runtime) and tell the user plainly that a Windows sign-out is
required, rather than leaving them with Explorer's generic "Another program
is currently using this file" dialog.
another 215/208 and does not recover.
Second machine on
check_interval_ticks=1, with measured check rates. Corroborating @rachellliao's cohort observation.@rachellliao noted her client log shows
[updater] Using GrowthBook check_interval_ticks=1 (default 4)and suggested moving affected users off that cohort as an interim mitigation. My machine is in the same cohort, and I can put numbers to what it costs.That line appears 252 times across my retained logs, always with the same values:
Measured update checks per day from
main.log:That is roughly hourly, which is what
ticks=1implies, against roughly six a day at the default of 4. Six failures here in eight days, against reports in this thread of hitting it occasionally.The hypothesis worth testing: hit rate scales with update-check frequency, because each applied update is another chance to leak the silo. @rachellliao's data supports the mechanism directly, with 10 of 10 registers leaking regardless of whether the shutdown was forced or clean. If leak-per-update is near constant, then updates-per-day is the whole story, and the cohort assignment would explain most of the variance in how often people hit this.
Ask for anyone hitting this often: please check which cohort you are in and post the value. It is one line:
If the frequent reporters are all
ticks=1and the occasional ones areticks=4, that narrows the repro considerably and makes the cohort change @rachellliao proposed a defensible interim mitigation with no release required.I'm getting it every night :/ some support for the ticks hypothesis:
PS C:\Users\Driver> Select-String -Path "$env:LOCALAPPDATA\Claude\Logs\main*.log" -Pattern 'check_interval_ticks' | Select-Object -Last 1
AppData\Local\Claude\Logs\main3.log:40943:2026-08-25 19:51:14 [info] [updater] Using GrowthBook check_interval_ticks=1
(default 4)
Just got it on my windows PC, it does not boot the claude desktop "dit bestand wordt door een ander programma gebruikt" . Account develuse@gmail.com
Following up on my earlier comment with a live capture on 2.110.1.0: a snapshot taken automatically at the failure, before any recovery. The process holding the old container was not a Claude Code child, contrary to what I expected. It was
RuntimeBroker.execarrying the old package's identity.Sequence (local time, Windows 11 Pro 26200 x64, MSIX
Claude_pzs8sxrjxfjjc)Snapshot at 09:11:08 (
GetPackageFullName+IsProcessInJob+ parent liveness over every PID, taken by a scheduled task triggered on event 208):RuntimeBroker.exepid 4296, parent DcomLaunch,-Embedding, in a job, started 09-16 13:00:18, one second after that session's main process.{DB60FB19}2.110.0.0 (created 09-16 13:00:17, the blocker) and{F6410FF6}2.110.1.0 (the service).Second snapshot at 12:42:41, same incident: RuntimeBroker 4296 was gone, no process carried the old identity at all, and
{DB60FB19}was still alive and still blocking. So both states discussed in this thread occurred in sequence within one incident on one machine: first a live member process with the old identity, then an empty leaked container after it exited.Two practical notes:
Get-Processimage path will not surface this one.RuntimeBroker.exeholds no package file and its path isC:\Windows\System32; it is only visible by callingGetPackageFullNameon every PID (or from the 211 events). It is also a Windows broker, not something the app spawned, which may be whyForceApplicationShutdownleft it behind.It's unbelievable that this issue is still open. PLEASE FIX!
Same failure on Windows 11 Pro (build 26200), Claude Desktop MSIX 1.52386.0.0 -> 1.52386.3.0, 2026-09-12
Adding timestamped evidence that may narrow this down. The container failure happens 2 seconds after the app quits for update, before any user or tooling can intervene:
Key observations
Stoppedeach time); 3 automatic + 3 manual attempts all failed. Only a reboot recovered it.``
`CoworkVMService: failed to disarm SCM recovery actions for this stop; if the stop
overruns, the service may be auto-restarted during package servicing:
open service: Access is denied
CoworkVMService: failed to configure SCM recovery actions ... Access is denied
AUTO_STARTThe service is
+WIN32_PACKAGED_PROCESS+ LocalSystem, with no SCM recovery actions configured (sc qfailure->RESET_PERIOD 0`).Note for anyone collecting logs: the
Microsoft-Windows-AppModel-Runtime/Adminchannel wrapped in 7-20 minutes on my machine, so the 215 events are gone if you look later. Capture right after the failure.Follow-up to my 2026-09-17 report — recurred again today, fourth consecutive occurrence, and this one was mid-workday.
Get-AppxLogshows the forced update2.2553.1.0 -> 2.2553.13.0at 10:45 and 12:05 local time on 2026-09-22, while I was actively using the machine. Same "Another program is currently using this file" on relaunch, same AppModel-Runtime 215 /0x80070020pattern, only a reboot recovers. So this is not an idle/overnight edge case: whatever timer drivesForceApplicationShutdownOptionfires during active use too. The two attempts ~80 minutes apart match the pair I logged on 09-17 (00:43 / 00:54 for2.110.0.0 -> 2.110.1.0).Two data points that may help whoever picks this up:
WindowsApps\Deleteddelete-pending leftovers (cleared — no effect), packageStatus/SignatureKind, package-folder ACLs (repaired by Windows on every launch attempt, still fails), and every user-mode handle via Resource Monitor while the error dialog was displayed (empty). Nothing on the endpoint explains it. @NullF4iTH'sRuntimeBroker.exe-with-old-package-identity capture is consistent with that: a broker holding the silo, not a file, is exactly what a file-handle search would miss.logs\directory. I can't contributecheck_interval_ticksorbeforeQuitForUpdatetimings because the app writes nothing. If that's a separate regression it's blocking diagnosis for at least some of the people in this thread.Ninety-eight comments, five months, no maintainer response. A forced restart that leaves the app unlaunchable until reboot is a P1 for anyone using Desktop as their primary surface.
DITTO FOR ME TODAY ALSO
Hi, I’m experiencing the same recurring issue, and it has been happening for about a month and a half.
Today, September 22, Claude updated from 2.2553.1.0 to 2.2553.13.0 and closed while I was using it. It now refuses to reopen, displaying “Another program is currently using this file.”
Windows logs show ForceApplicationShutdownOption at 21:26 local time, followed by AppModel-Runtime events 215/208 with 0x80070020 (“error converting the job”). No claude.exe process remains.
Have you found a reliable recovery without signing out or rebooting, or received any response from Anthropic? I can provide targeted logs if useful.
A fresh recurrence on a newer build, on the same machine that previously experienced this failure.
Environment
26200.9457Claude_2.2553.13.0_x64__pzs8sxrjxfjjcOkReproduction and current evidence
On 2026-09-23 at 08:05 local time, launching Claude produced no targetable window.
Microsoft-Windows-AppModel-Runtime/Adminrecorded:Additional observations:
CoworkVMServicewas stopped;Appinfowas running.%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\SystemAppData\Helium\User.dat%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\SystemAppData\Helium\UserClasses.datHKLM\SYSTEM\CurrentControlSet\Control\hiveliststill contained the Claude user-container mappings underSilo934eac67-a570-82a8-6db9-fe7c1c4ab787.Claude.exe.This is a recurrence across releases on the same machine: the same
0x80070020/ Event 215+208 failure was previously observed withClaude_2.110.1.0on 2026-09-17, and rebooting only provided temporary recovery. It returned after the next update cycle on2.2553.13.0.Please provide either:
A supported update-deferral option would also reduce disruption until the underlying issue is fixed.
Summary
This is another reproduction of this issue, from a stealth auto-update, with a full process-level trace. After the update, the new version couldn't start. The shell shows "Another program is currently using this file" on
C:\Program Files\WindowsApps\Claude_2.7032.0.0_x64__…\app\Claude.exe, and AppModel-Runtime logs 215/2080x80070020. On this machine it only ever cleared at sign-out/reboot.The trigger here was long-running processes that a Claude Code session had started through the Bash tool (
nohup … &).ForceApplicationShutdowndidn't terminate them, and they ran on past the update. The old per-user container\Container_Claude_<oldver>_x64__pzs8sxrjxfjjc-<SID>stayed alive until they exited, and Windows couldn't create the container for the new version. Related: #89680, #93220, #73107, #91763, #92167, #95266.Environment
Claude_pzs8sxrjxfjjc2.2553.13.0 → 2.7032.0.0; Claude Code CLI 2.1.280; Bash tool = Git for Windows bashSteps to reproduce
rdctl start …(returns, but theRancher Desktop.exeit spawns keeps running),nohup dotnet run --project <api> > api.log 2>&1 &,nohup npm run dev > web.log 2>&1 &[stealth-update] Triggering stealth update after idle timeoutfires.Expected: the new version relaunches, and spawned tools are either terminated or don't block the relaunch.
Actual: every launch fails the same way until sign-out or reboot. Ending the orphaned processes is reported to fix it in #73107, #91763 and #93220; that wasn't tested here.
Timeline (2026-09-23, local time)
| Time | Event |
|---|---|
| 08:42:39 | App 2.2553.13 main process starts in container
{C36B4903}(AppModel 210/211) || 08:44–08:52 | Bash tool:
rdctl start,nohup bash db/apply.sh &,nohup dotnet run … &, 2×nohup npm run dev &|| 09:15:25 |
[stealth-update] Triggering stealth update after idle timeout; CLIs stopped;Killing 2 PTY process tree(s) on quit|| 09:15:27.842 | AppXDeploymentServer 603
RegisterByPackageFamilyNamewithForceApplicationShutdownOption; main process exits on its own at 09:15:27.956 || 09:16:03.109 | Only 5 of the old app's descendants terminated (crashpad-handler + 4 console
conhosts, viaWerFault /hc). Application 1002/MoAppHang is for the crashpad-handler. The old cowork-svc, in its separate PackagedService container, was also ended. || 09:16:04–05 | Automatic relaunch: AppModel-Runtime 215
0x80070020 Cannot create the Desktop AppX container … converting the job(twice) + 208[LaunchProcess]. The first 215 fires just before AppX 400 "Register finished successfully"; the second comes after it. The new version's PackagedService container (cowork-svc) is created fine. || 09:16–09:45 | Old container
{C36B4903}stays alive; 42 Bash-tool descendants still running (Rancher Desktop + wsl helpers,dotnet→ API → PuppeteerSharp chrome ×7, 2× npm → vite → esbuild, a hungdocker.exe) || 09:45:32.240 | Reboot/logoff ends them → AppModel 217 destroys
{C36B4903}(the per-family HeliumUser.dat/UserClasses.datshow the same LastWriteTime). After boot, 2.7032 launches normally. |Survivor list reconstructed from EDR process journals (exact start/exit times + command lines). Process-creation auditing (4688) wasn't enabled.
Frequency
Of 33 in-app update quits between 2026-06-17 and 2026-09-23, 7 never relaunched. 4 of those (09-17, 09-18, 09-22, 09-23) have the identical AppModel 215/208
0x80070020signature in AppModel-Runtime logs captured during the investigation; the older ones are inferred from log gaps. Every failure where the launcher is known (6 of 7; 09-11 is unclear) followed a dev stack started from a Code session in the same boot. The failure was also seen to persist:RepairAppRegistrationOption).Which launch paths join the Claude container (tested live on 2.7032)
| Started from inside a Code session via… | Lands in
\Container_Claude_…? ||---|---|
| Bash tool:
nohup cmd &| yes || Bash tool →
powershell.exe5.1Start-Process| yes || Bash tool →
nohup pwsh …| thenohup.exewrapper yes, and it stays alive as long as pwsh does, so a long-running pwsh still pins the container. pwsh and its children: no. || Bash tool → Store-pwsh alias (
%LOCALAPPDATA%\Microsoft\WindowsApps\pwsh.exe)Start-Process …| no || PowerShell tool (Store pwsh) →
Start-Process …| no || WMI
Win32_Process.Create| no |CREATE_BREAKAWAY_FROM_JOBfrom a Bash-tool process succeeds, but the child is still in the Claude container. Packaged parents (Store pwsh, Windows Terminal) do get their children out, so spawning outside the container from the app side looks feasible.App-side observations
main.loglogs[windows-app-job] skipped: flag offon every start.taskkill /Ton PTY/MCP trees. That's a parent-PID walk, so it can't reach orphans whose parent has already exited. It then calls Electron's MSIXquitAndInstall(RegisterApplicationRestart+RegisterPackageByFamilyNameAsync(ForceApplicationShutdown)), which never enumerates or waits on the container job.Workarounds
\Container_Claude_<oldver>_…-<SID>job, or sign out and back in. Listing the job's members (NtOpenJobObject + JobObjectBasicProcessIdList) needs an elevated process, because the job DACL grants only SYSTEM and Administrators. Ending your own processes doesn't.Start-Process(table above).Suggested fixes (any one)
RegisterPackageByFamilyNameAsync, enumerate the app's container job and terminate its members (or wait for it to empty).[windows-app-job]work.0x80070020) and tell the user which PIDs to end, instead of silently staying closed.What is inferred rather than proven
0x80070020in the retained logs happened while an old user container was alive, and there's no counterexample, but no intervention was done here. Intervention evidence comes from #73107, #91763 and #93220.Rancher Desktop.exeexited. However, Rancher's new Windows-side files weren't redirected into the package LocalCache (the npm logs were), so its membership is unresolved. If Rancher was outside the job, the last holder is unidentified.User.dat/UserClasses.dathive held by the old silo. Evidence: the hivelist, the matching timestamp, and openingUser.datfails with0x80070020while a silo holds it. There's no handle trace at the moment of failure.ForceApplicationShutdownterminates: unknown. It ended exactly those 5 processes and no others.Stealth auto-update relaunch races the old process tree → 0x80070020 "converting the job"; 5 of 14 auto-updates left the app dead until reboot
Adding a timed reproduction from one machine that points at the update relaunch path specifically, not a startup crash. Data is from
%LOCALAPPDATA%\Claude\logs\main*.logand theMicrosoft-Windows-AppModel-Runtime/Admin+AppXDeploymentServer/Operationalevent logs.Environment
Claude_pzs8sxrjxfjjc), versions 1.40609 → 2.7032 over the period below; Electron 44.2.0 at the last failureSequence on 2026-09-22 (local time)
AppX/AppModel event log, same second range:
After that the app never tried again;
main.loghas nothing between 13:31:30 and the next boot. A manual Repair at 15:47 (RegisterByPackageFullName with RepairAppRegistrationOption, done twice) re-registered the package and restarted cowork-svc successfully, but the app launch failed with the identical 215/208 pair both times. A reboot the next morning fixed it; the app then launched normally (Version changed since last launch: 2.2553.1 → 2.2553.13).It is a race, and it is frequent. Relaunch attempted 4 s after the quit → failure. Successful stealth updates on this machine relaunched 15-20 s after the quit line:
| stealth update (quit) | relaunch | outcome |
|---|---|---|
| 08-30 14:57:29 | 14:59:52 | ok |
| 09-02 23:26:04 | 23:26:19 | ok |
| 09-03 09:51:56 | 09:52:13 | ok |
| 09-04 00:03:40 | 00:03:52 | ok |
| 09-04 08:25:28 | 08:27:30 | ok |
| 09-05 07:27:45 | next start 09-06 08:54 | dead until relaunched next day (10 PTY trees killed) |
| 09-11 13:32:24 | 13:32:37 | ok |
| 09-11 15:43:59 | 15:44:04 | ok |
| 09-13 15:55:09 | 17:17 after user reboot | dead (8 PTY trees) |
| 09-15 20:02:23 | 20:02:44 | ok |
| 09-17 02:16:09 | 09:58 after reboot | dead (7 PTY trees) |
| 09-17 21:53:12 | 09-18 08:02 after reboot | dead; 8 manual launch attempts 07:50-07:54 all logged 208/0x80070020 |
| 09-18 11:01:19 | 11:01:30 | ok |
| 09-22 13:31:30 | 09-23 08:27 after reboot | dead; detail above |
5 of 14 stealth updates since 2026-08-30 left the app unlaunchable until a reboot. The failures cluster on updates with more live sessions / PTY trees (7-16 killed) and a relaunch inside ~5 s of the quit. No WER/Application Error events for Claude.exe in the same period, so this is not a crash of the new process; the launch is refused before the process exists.
Why it hurts. The update is silent and idle-triggered, so the user comes back to no app and every Claude Code session gone, with no error shown. The Windows dialog on manual launch says "another program is using this file", which sends people hunting for file locks that do not exist. Repair does not help. Nothing in the app retries.
Suggestions
beforeQuitForUpdate.Workaround I am using: a user-level scheduled task that watches for the main
Claude.exeto disappear, waits 60 s, ends strayClaude.exechildren, and launchesshell:AppsFolder\Claude_pzs8sxrjxfjjc!Claudewith backoff. It cannot fix the 0x80070020 state itself; reboot still does that.Happy to attach the full
main.logwindow and an.evtxexport of the two event logs if useful.I got Claude Desktop to launch without restarting Windows or signing out by copying its application files outside the WindowsApps package directory and launching that copy.
In my case, stopping
CoworkVMService, repairing the app, and re-registering the package did not resolve the launch error. Event Viewer continued reporting0x80070020with "an error was encountered converting the job."What worked:
``
powershell
``(Get-AppxPackage -Name Claude).InstallLocation
appsubfolder, including its contents, to a separate folder for example:%LOCALAPPDATA%\Claude-Launch-Workaround\<version>claude.exefrom the copied folder.The copied app opened and its window was responding. No reboot or Windows sign-out was required, and the original installation was left intact.
This is an unofficial temporary workaround. It does not repair the original package's launch problem. Cowork, automatic updates, and other integrations have not been verified in the copied version. Do not delete or reset your existing Claude data.
This kept happening to me too. Killing these python services fixed it and let Claude launch. Here's the diagnosing powershell:
This was the output:
Attaching a ps1 script that claude thinks will fix this problem for you if you run it:
Fix-ClaudeDesktopLaunch.txt
But it's just a one-time fix. Claude needs to avoid orphaning these jobs it seems.
Adding another affected machine with current diagnostics, as of 2026-09-24.
Environment and symptom
Claude_2.9939.2.0_x64__pzs8sxrjxfjjc;Get-AppxPackagereportsStatus: Ok.Microsoft-Windows-AppModel-Runtime/Adminrecords 215 (0x80070020, cannot create the Desktop AppX container, “an error was encountered converting the job”) and 208 (0x80070020, failure while configuring runtime,[LaunchProcess]).Current observations, 2026-09-24
Claude.exewas running during the diagnostic snapshot.GetPackageFullNameandGetPackageFullNameFromTokenfound onlycowork-svc.exeexposing Claude package identity among the readable processes. One process could not be queried.User.datandUserClasses.datunder%LOCALAPPDATA%\Packages\Claude_pzs8sxrjxfjjc\SystemAppData\Heliumremained mounted inHKLM\SYSTEM\CurrentControlSet\Control\hivelist, under the\REGISTRY\WC\Silo...namespace.FileShare.None) on both files failed with sharing violations.RmRegisterResources/RmGetList, read-only; no shutdown requested) identified the same holders for both files:These findings identify the reported file holders, not the upstream cause. Mounted hives alone do not prove an orphaned container, and the package-identity scan does not rule out every possible surviving descendant or reference.
Recovery attempts during the earlier 2026-09-22 occurrence
CoworkVMServicedid not release the hive locks.-ForceApplicationShutdown, succeeded but did not restore launch.IPackageDebugSettings::TerminateAllProcessesreturnedS_OKfor the then-current package and the previously observed package versions; both hive files remained locked afterward.Please provide a supported per-package recovery procedure that preserves the current Windows session and full desktop/Cowork functionality, or guidance on a targeted trace that would distinguish an orphaned container from a remaining process/reference. Windows sign-out or reboot disrupts unrelated running work, so a session-preserving recovery is important.
Still happening on 2.16120.0.0: now on two machines, survives uninstall/reinstall, and the reinstall wipes Code session history
Environment
Symptom
On launch, Windows shows: "Another program is currently using this file." with the path
C:\Program Files\WindowsApps\Claude_2.16120.0.0_.... The app does not start. This is a recurrence; it has happened before after an update.What I tried (none fixed it without ending the session)
Stop-Service CoworkVMServiceand force-killingclaude,cowork-svc,nodeReset-AppxPackage)Add-AppxPackage -Register ...AppxManifest.xml -ForceApplicationShutdownThe only known fix is logging off or rebooting. That isn't acceptable here: the machine is running a 24h+ job in my user session that would be killed.
Second problem: reinstalling loses Code session history
After uninstalling/reinstalling, the desktop app's Code tab shows no previous sessions. The transcripts are intact in
%USERPROFILE%\.claude\projects\andclaude --resumein the CLI lists them all. The desktop app keeps its session index in the package data, which is deleted on uninstall, and it does not rebuild the list from existing transcripts. Since this bug pushes users toward reinstalling, the result is effectively lost history in the app.Requests
~/.claude/projects(or store the index outside the MSIX package data) so an uninstall doesn't orphan history.