[BUG] MSIX in-place update leaks a container silo, making Claude Desktop unlaunchable until reboot (0x80070020)
Summary
When the MSIX/Store-packaged Claude Desktop app updates itself in place while the app is running,
the old Desktop AppX container silo is not torn down. It stays alive with the package's registry
hives mounted and no member processes. Every subsequent launch then tries to create a fresh
silo, fails to mount the already-mounted hives, and dies with ERROR_SHARING_VIOLATION.
The user-visible symptom is a bare Windows dialog titled with the WindowsApps path and the text
"Another program is currently using this file." The app never opens. Nothing the user can
reach clears it — only a reboot.
Environment
- Windows 11 Pro 26200 (25H2)
- Claude Desktop
Claude_1.32885.1.0_x64__pzs8sxrjxfjjc(MSIX),Get-AppxPackageStatus =Ok - Claude Code CLI 2.1.235 (unaffected, works fine)
- ESET Security active; Defender real-time protection off (verified incidental — see below)
Reproduction
- Run Claude Desktop (Cowork in use, so
cowork-svc.exeis running in the package container). - Let the app update itself in place. Here the package directory was rewritten at 09:25:01
while PID 46504 was still a live member of container ca32ded5-9ad1-11f1-... as of 09:24:19.
- Close the app, launch it again.
- Dialog: "Another program is currently using this file." App does not start.
Diagnostics
Microsoft-Windows-AppModel-Runtime/Admin, on every launch attempt:
Id 215 Error 0x80070020: Cannot create the Desktop AppX container for package
Claude_1.32885.1.0_x64__pzs8sxrjxfjjc because an error was encountered converting the job.
Id 208 Error 0x80070020: Cannot create the process for package
Claude_1.32885.1.0_x64__pzs8sxrjxfjjc because an error was encountered while configuring runtime. [LaunchProcess]
0x80070020 = ERROR_SHARING_VIOLATION.
The leaked silo, from HKLM\SYSTEM\CurrentControlSet\Control\hivelist:
\REGISTRY\WC\Silo a4a0511c-014a-486f-bf61-c44a3c696993 software -> ProgramData\Packages\Claude_pzs8sxrjxfjjc\...\Helium\Cache\37e1ffe37fb1fef1.dat
\REGISTRY\WC\Silo a4a0511c-014a-486f-bf61-c44a3c696993 user_sid -> AppData\Local\Packages\Claude_pzs8sxrjxfjjc\SystemAppData\Helium\User.dat
\REGISTRY\WC\Silo a4a0511c-014a-486f-bf61-c44a3c696993 user_classes -> AppData\Local\Packages\Claude_pzs8sxrjxfjjc\SystemAppData\Helium\UserClasses.dat
\REGISTRY\WC\Silo a4a0511c-014a-486f-bf61-c44a3c696993 com -> ...\Helium\Cache\37e1ffe37fb1fef1.dat
\REGISTRY\WC\Silo d9e841e0-9075-e360-a2b0-23fa25edbf07 com -> ...\Helium\Cache\37e1ffe37fb1fef1_COM15.dat
Both .dat files fail an exclusive open (FileShare.None) with zero Claude processes running.
Contrast with a healthy MSIX app: Snipping Tool created container 5468137C once and then
joined it for later launches (event 211 against the same container id at 09:42 and 09:44).
Claude instead mints a new container id on every attempt — 5468206E, 5468206F, 5468207D,546820B4, 546820B7, 546820BD — each failing to mount the same three hives.
Ruled out (all tested)
| Hypothesis | Test | Result |
|---|---|---|
| Main binary locked | [IO.File]::Open(app\Claude.exe,'Open','Read','None') | Opens fine — not locked |
| Orphaned cowork-svc.exe holds it | killed all package processes, relaunched | Fails with zero package processes running |
| Some surviving container member | cross-referenced all event-211 PIDs vs live processes | None alive |
| chrome-native-host.exe is a member | checked lineage + event 211 | Spawned by Chrome via cmd.exe; never a container member |
| Broken registration | Get-AppxPackage | Status Ok; Windows' own re-register at 09:40:51 succeeded and did not fix it |
| Cowork VM service broken | C:\ProgramData\Claude\Logs\cowork-service.log | Starts cleanly every time: HCS/HCN load, signature verified, named pipe listening, "Service ready" |
| Locked hives are inherently the bug | surveyed all 29 MSIX packages | 10 have locked hives incl. WindowsTerminal/ScreenSketch, which launch fine — the mount is normal, the orphaning is not |
| Owned by AppXSvc | Restart-Service AppXSvc -Force | Mounts and locks unchanged |
| ESET interference | ESET is active AV, Defender real-time off | Incidental; failure is in silo creation, not file scanning |
Impact
Hard-blocks the app with no user-reachable recovery. A leaked silo has no supported user-mode
teardown — reg unload cannot address the \REGISTRY\WC\ container namespace, andReset-AppxPackage rewrites app data without unmounting the silo. Users get an error message
that names a file but not which program, with no actionable next step.
Suggested fixes
- Before applying an in-place package update, fully terminate the container — including
cowork-svc.exe and any Cowork/HCS-backed children — and confirm silo teardown before the swap.
- On launch, if container creation fails with
0x80070020, detect the orphaned silo and surface
an actionable message ("restart required to finish updating") instead of the raw Windows dialog.
- Consider deferring the package swap to next launch (or a restart) when a Cowork container is live.
Showing cached comments. Read the full discussion on GitHub ↗
4 Comments
Independent confirmation on a second machine, same package version — and with a different AV vendor, which I think closes the ESET question you flagged as incidental.
Environment
Claude_1.32885.1.0_x64__pzs8sxrjxfjjc(MSIX),Get-AppxPackageStatus =Ok,SignatureKind: DeveloperLeaked silo present here too
HKLM\SYSTEM\CurrentControlSet\Control\hivelist, with zero Claude processes running:Minor variation from your capture: my entries point at
ProgramData\Microsoft\Windows\WindowsApps\Claude_<version>\Cache\rather thanProgramData\Packages\Claude_pzs8sxrjxfjjc\...\Helium\Cache\, and there are nouser_sid/user_classesrows — onlysoftwareandcom. Same phenomenon, slightly different hive set.Same events on every launch attempt (
Microsoft-Windows-AppModel-Runtime/Admin), locale pt-BR:Positive evidence that the process tree outlives quit-for-update
#77421 notes that no further quit lines are written after
beforeQuitForUpdate. Mymain.loggives the complementary positive signal — the tree is demonstrably still alive 16 seconds later, because the periodicprocess-memorysampler keeps reporting it:15 Electron processes and 2.79 GB resident, 16 s after the app announced it was going down for the update.
cowork-svc.exefor the new package started at 18:46:09, the Register completed 18:46:10, and the container errors landed 18:46:10–11.Deferrals accumulate for days
Because the app is essentially never fully closed,
AppXDeploymentServer/Operationalevent 658 fired on three consecutive updates, all blocked by the same old package:Ruled out independently (matches your table)
| Hypothesis | Test | Result |
|---|---|---|
|
CoworkVMServiceholds the container | Stopped the service, verified zero processes fromWindowsApps\Claudeand zero orphans, then launched | Fails identically — 3 fresh 215/215/208 at 18:49:50 and 18:49:53 || Main binary locked |
[IO.File]::Open(Claude.exe,'Open','Read','None')| Opens fine || Broken registration |
Get-AppxPackage|Status = Ok; Register operations complete in ~1.5–2 s || Antivirus | Defender only, no third party | Reproduces anyway |
One extra data point on recovery: force-killing the orphaned trees (which needs admin — a medium-integrity token gets Access Denied even with
taskkill /F /T) does not help and appears to be what strands the silo. Only a reboot clears it here as well.Third occurrence on this machine: 2026-08-04, 08-13 and 08-19 — effectively every auto-update.
Third machine, and one detail that I think matters for triage: this reproduces on a newer package version. Your report and the confirmation above are both pinned at
1.32885.1.0, so nothing there rules out a version-specific defect. It survives the bump.Environment
Claude_pzs8sxrjxfjjc, updated1.32885.1.0->1.34493.0.0,Get-AppxPackageStatusOkRecurrence on 1.34493.0.0 (2026-08-20)
The Store updated the package and the app quit itself to install it. Every launch afterwards fails identically.
Microsoft-Windows-AppModel-Runtime/Admin, at the launch attempt:In the same second, the outgoing package flips runtime status:
%APPDATA%\Claude\logs\main.logreceives no writes after the attempt and no package process is ever created, which matches your "app never opens, nothing reaches it" description. That log going silent is the fastest way to distinguish this from the app starting and failing later.The leaked silos, including the new package's own
HKLM\SYSTEM\CurrentControlSet\Control\hivelistwith zero package processes running:Worth noting against your silo-teardown theory: the first group is the package-profile silo you documented, but
445dbdc3andd7920e68map to the new version's own cache directory. So the incoming package leaks a silo too, not just the outgoing one. If the fix is scoped to tearing down the old silo onbeforeQuitForUpdate, that may leave this half in place.Consistent with your ruled-out table
Independently reached the same dead ends on 2026-08-18, in case it saves anyone re-testing them: launching from Start menu, packaged shell, and non-packaged shell all fail identically; no leftover Electron processes; Restart Manager reports no handles on
claude.exeorapp.asar; the first container creation fails withCoworkVMServiceverified STOPPED, so it is not the live blocker; Windows re-registers the package on every attempt and it changes nothing. Reboot is the only recovery here as well.Frequency
Twice in three days on this machine, across two different package versions, and on effectively every update before that. Because the Store schedules the update and the app quits itself to take it, the timing is not the user's to choose, so the reboot lands whenever it lands.
Separate minor thing, not a cause
After an update the app cannot refresh its Chrome native messaging host while Chrome holds the old one:
The app logs "Native host sync complete" straight afterwards and continues, so the extension silently runs a stale host until Chrome exits. Agrees with your finding that the native host is never a container member, so it is unrelated to the wedge, but versioning the host filename would fix it independently.
Fourth machine, and the reason I am adding it rather than opening a new issue: this reproduces on
package
1.34493.1.0. The report is pinned at1.32885.1.0and the confirmation above at1.34493.0.0, so the servicing revision does not fix it either.Environment
1.32885.1.0->1.34493.1.0on 2026-08-21 at 09:49Get-AppxPackageStatusOk,SignatureKind: Developerpreceding 24 hours
quser), Claude Code CLI unaffectedLeaked silos present, two groups
HKLM\SYSTEM\CurrentControlSet\Control\hivelist, with zero Claude processes running:Both hive-set variants reported in this thread are present at once here: the package-family set
under
ProgramData\Packages\Claude_pzs8sxrjxfjjcincludinguser_sidanduser_classes, and theversion-scoped set under
WindowsApps\Claude_1.34493.1.0.Events on every launch attempt are identical to the report (
Microsoft-Windows-AppModel-Runtime/Admin,Id 215 and Id 208,
0x80070020)."No member processes" verified three independent ways
This is the part I would like to add to the thread, because it rules out the explanations that
usually get suggested first:
RmStartSession/RmRegisterResources/RmGetList) onClaude.exereports 0 blocking processes. This is the same mechanism installers use, so "some process
holds the file" is not merely unproven, it is refuted.
GetPackageFullNamecalled against every running process finds 56 packaged processessystem-wide and none belonging to
Claude_pzs8sxrjxfjjc. No helper process survives theupdate.
File.Open(..., FileShare.None)onClaude.exesucceeds, so the file is genuinely free.The packaged service is not the blocker here
Worth separating from #84435 and #88101, which are about the update being blocked. For the
launch failure,
CoworkVMServiceis not the cause on this machine:RecordIdrather thanTimeCreated, the container failure consistently precedesthe service start within the same second. Time-sorting these events reverses their order and
makes the service look guilty; that cost me a full diagnostic branch.
StartupTypecannot be changed (Set-Servicesilently leaves it atAutomatic), matchingthe ACL finding in #84435.
Things that do NOT clear the leaked silo
Each tried individually with a launch attempt in between, all ineffective:
Add-AppxPackage -Register "<pkg>\AppxManifest.xml" -DisableDevelopmentMode -ForceApplicationShutdown(succeeds, no effect)CoworkVMServiceAppReadiness,ClipSVC,StateRepository,AppXSvcRuntimeBrokerprocessessihost.exe(Shell Infrastructure Host, restarts cleanly)explorer.exeOnly a reboot is confirmed to clear it on this machine.
I want to explicitly flag what I have not tested, rather than let it be assumed: whether
signing out and back in is sufficient. It would be the cheaper remedy, but the hive set above
argues against taking it for granted. Only
user_sidanduser_classescome fromAppData\Local\Packages;softwareandcomare mounted fromProgramData\Packages\...andProgramData\Microsoft\Windows\WindowsApps\..., which are machine-wide, so a logoff may well leavethose two mounted. If anyone has actually tested the logoff path, that result would be worth having
in this thread.
Reproduction without the shell
Control: the same direct launch works for
Notepad.exeandms-teams.exefrom their own packagefolders, so the path itself is not blocked.
Impact
Every update costs the user their entire working session. On this machine it has occurred on every
update so far, without exception.
Follow-up to my comment above, on the one thing I explicitly marked as untested: signing out and
back in is sufficient. A full reboot is not required.
Measured on the same machine (Windows 11 Pro 26200, package
1.34493.1.0) while the launch failurewas present: signed out of the interactive session, signed back in, and Claude Desktop launched
normally on the first attempt.
Proof that no reboot was involved:
Boot time three days old, new interactive logon minutes before the successful launch.
This also settles the objection I raised myself. The
softwareandcomhives are mounted fromProgramData\Packages\...andProgramData\Microsoft\Windows\WindowsApps\..., so they lookmachine-wide, but they belong to the session silo and are torn down with it. My reasoning that they
might survive a logoff was wrong.
Practical upshot for anyone landing here after an update: sign out, sign back in, done. Everything
that does not clear the silo is still listed in my previous comment, and I have found nothing that
clears it without tearing down the session.