Windows: Desktop crash wedged the MSIX package; recovery required manual package removal, destroying local app data (Code-tab group assignments, crash dumps)
Environment
- Windows 10 Pro 19045, x64
- Claude Desktop 1.24012.9 (MSIX, direct download, not Store)
- Claude Code 2.1.219 native at crash time (2.1.220 after recovery)
- claude.ai subscription auth (Max), Remote Control active with two concurrent Claude Code sessions bridged to the desktop app
Summary
Claude Desktop hard-crashed mid-stream. The app could not relaunch ("This app can't open - There's a problem with Claude. Reinstall the application"), the taskbar shortcut disappeared, and reinstall failed repeatedly until a manual Remove-AppxPackage plus reboot. The wedge chain is fully visible in the AppXDeploymentServer/Operational event log plus ClaudeSetup.log: zombie app processes and the CoworkVMService held file locks, the installer's own cleanup could not remove that service ("Access is denied"), elevation failed, and Windows refused the data-preserving removal path. The eventual manual package removal destroyed all package-local app data.
Timeline (2026-07-25, UTC-7, from event log + ClaudeSetup.log)
- 14:52:04 - precursor: 15x event 8761 "AppExecutionAlias directory missing" (0x8007010B), ~2.5 h before the crash (auto-update staging?)
- 17:31:46 - last activity timestamps in both live CC session transcripts (crash moment; = 2026-07-26T00:31:46Z)
- 17:32:04 onward - repeated register/repair attempts fail 0x80073D02 "Unable to install because the following apps need to be closed" (zombie processes still alive)
- 17:35-17:46 - installer attempts (ClaudeSetup.log excerpt below): service removal denied, data-preserving removal rejected (0x80073CFA, requires developer mode), AddPackage 0x80073CF9 with inner 0x80070020 sharing violation creating
...\app\resources\cowork-svc.exe, then "Elevation failed: elevated installer exited with code 1" while the UI showed "Administrator access is required to install Claude with full features" to an already-elevated user - 18:03-18:04 - after manual
Get-AppxPackage *Claude* | Remove-AppxPackage(Windows PowerShell 5.1 admin; the Appx module fails in pwsh 7 with 0x80131539): AddPackage now fails 0x80073CF6 with inner 0x80073D05 "An error occurred while deleting the package's previously existing application data" while registering windows.stateExtension - reboot flushes the locks
- 18:13 - clean install succeeds, fresh package state
- Aftermath: fresh OAuth login required (401 on
claude rc); a globally set ANTHROPIC_API_KEY forced API-key auth so Remote Control refused to start, but the desktop banner only says "check your terminal" whileclaude doctorknows the actual cause; the manual /login URL flow was nearly unusable in default Win10 conhost because clipboard paste was broken and OAuth codes kept expiring
ClaudeSetup.log excerpt
17:35:15.925682 WARNING: failed to remove conflicting service: could not open CoworkVMService: Access is denied.
17:35:15.946275 Windows rejected data-preserving removal for Claude_1.24012.9.0_x64__pzs8sxrjxfjjc (0x80073CFA, requires developer mode); relying on in-place update
17:35:17.230496 MSIX installation failed: AddPackage failed: AddPackage failed with HRESULT 0x80073CF9
17:35:21.256976 Elevation failed: elevated installer exited with code 1
17:35:21.256976 ERROR dialog (with log path): Administrator access is required to install Claude with full features. You can try again or install without Cowork.
17:46:00.414773 (repeat cycle, same failure)
18:04:37.236124 MSIX installation failed: AddPackage failed with HRESULT 0x80073CF6
Full 29 KB log available on request.
Data lost
Recovery required package removal, which destroyed package-local state:
- Code-tab custom group assignments and pins. These live in renderer localStorage (
dframe-store/dframe-starred-code, origin https://claude.ai) inside the package profile, so they die with the package while the session transcripts under~/.claudesurvive. Post-recovery investigation confirmed the desktop app is the sync owner for this state (ccd-sync-ownerprotocol): assignments written in the claude.ai web app do not propagate back to Desktop, so there is no user-accessible way to restore them - they had to be reconstructed by hand-patching the leveldb WAL offline. - Crashpad/sentry evidence for the original fault (see below).
- Device registration, window state, and app settings.
Original crash cause
Unrecoverable locally, and the reason is circular: no Event 1000/WER record exists (Crashpad captured the fault), but the Crashpad/sentry data lived in the package profile that had to be destroyed to un-wedge the app. Server-side crash telemetry for account 3b7ebde4-1173-48bb-a3f7-05f7ae380469 (org d65be200-e7c3-4a7e-b86d-789666e120a2) around 2026-07-26T00:31:50Z should hold the dump; happy to correlate.
Suggested fixes
- Installer: detect and terminate stale app processes and stop/remove CoworkVMService before AddPackage; retry on 0x80070020. The cleanup exists but fails ("Access is denied") even when elevated - service ACL issue?
- Fix the elevation failure (elevated installer exit code 1) and the misleading "Administrator access is required" dialog when already elevated.
- Provide a data-preserving reinstall that does not require developer mode (0x80073CFA), or move critical state out of package-local storage.
- Persist Code-tab group assignments and pins next to session data (e.g. under
~/.claude) rather than in renderer localStorage - it is exactly the state users lose in any reinstall, while their transcripts survive. Being the sync owner makes it unrecoverable even from claude.ai. - The Remote Control disconnected banner should surface "ANTHROPIC_API_KEY is forcing API-key auth" when that is the cause (
claude doctoralready knows). - Login fallback: a short user-typeable device-code flow for environments where clipboard interop is broken (default Win10 conhost).
Possibly related
#49917 (same 0x80073CF9 AddPackage failure, open), #47877 (MSIX stuck permanently), #40682 (installer fails, Canary), #71159 (0x80073CF9 orphaned package)
Showing cached comments. Read the full discussion on GitHub ↗
4 Comments
Addendum after two days of hands-on state recovery. These findings reframe the data-loss part of this report: the loss is not just "package removal deleted local files" - three separate design decisions make recovery impossible even when the user still has all the underlying data.
dframe-store,dframe-starred-code) and are synced (ccd-sync-*keys) with the desktop app as the sync owner. On every desktop boot, the app pulls the server copy and discards local edits. We verified this directly: well-formed leveldb WAL records written while the app was fully quit (correct CRC framing, winning sequence numbers, verified by strict replay) were applied on disk and then silently overwritten by the boot-time sync pull. Assignments written through the claude.ai web UI do not propagate back either - the web side is a read-mostly follower. The only writer that sticks is the desktop UI itself, one drag at a time.archived. The sidebar only fetchesstatuses=active&statuses=paused, so from the user's perspective two weeks of history simply vanished - it was neither deleted nor hidden by choice. Recovery required discovering and mass-callingPOST /v1/code/sessions/<id>/unarchive(94 calls) through an authenticated browser session, which is not something a normal user can do.limit=50fetch plus a single "Show N more" expansion - observed ceiling 53 rendered of 119 active). Custom groups only display members that happen to be inside that window. Sessions created before server sync existed (10 here) have no server record at all and cannot be re-listed once the local index is gone, even though their transcripts under~/.claudeare intact.Suggested additions to the fix list:
Happy to share the full recovery tooling and timestamps if useful.
I can reproduce a very similar failure chain on another Windows 10 Pro 19045 x64 system running Claude Desktop 1.24012.9 (direct-download MSIX).
The initial failure happened during normal Claude Desktop Code-tab use, before any manual package or local-state modifications:
"There's a problem with Claude. Reinstall the application."
One potentially useful additional clue: during a later launch failure I captured an Electron/Chromium fatal GPU-process crash:
[process-id]: ERROR: gpu_process_host.cc
GPU process exited unexpectedly: exit_code=101457950
GPU process launch failed: error_code=18
FATAL: GPU process isn't usable. Goodbye.
Immediately afterward, launching via claude:// failed with:
"Cannot start the application. Try reinstalling the application to fix the problem."
The package subsequently reported:
Status: Modified, NeedsRemediation
I cannot prove that the GPU crash caused the original package wedge, but it may be useful for correlation because the resulting MSIX/Cowork failure chain closely matches this issue.
I can provide the full ClaudeSetup.log and the console output with the GPU failure if useful.
Thanks @LucasHenriqueDiniz - that GPU-process fatal is the most useful clue in this thread. In my incident the original faulting process was unrecoverable (the Crashpad data lived in the package profile that had to be removed to un-wedge the install - the circular-evidence problem in my addendum), but your capture matches the fingerprint exactly: hard exit mid-use, no WER entry, package left needing remediation, then the identical CoworkVMService / 0x80073CFA / 0x80073CF9 chain. Also confirming your "Status: Modified, NeedsRemediation" observation is useful as an early warning: my reinstalled package currently reports Ok, and I now check the status daily so any drift gets caught while the app still launches. If you can attach your ClaudeSetup.log and the GPU console output, that gives the maintainers two independent full traces to correlate.
Addendum: two more data points from this install (Windows 10 Pro 19045, Alienware Aurora R12, Claude Desktop 1.24012.9 MSIX)
1. Second GPU-process crash, this time WITHOUT the MSIX wedge (2026-08-01)
Mid-session (heavy background-subagent fan-out running), the app window went dead at 16:09 local. The app's own
logs\main.logis the only place it shows up:Logged twice back-to-back (looks like once per window),
exitCode 101457950=0x060C201E. The main process never exited: main.log goes silent after this line until the post-reinstall app start 35 minutes later, and the OS has no record of the event at all - no WER report, no Application event log entry, no Crashpad dump. So this failure class is invisible to OS-level telemetry; the dead window plus aGPU process goneline inmain.logis the whole signature. Fastest user-side triage:Select-String "GPU process" logs\main.log.The important contrast with my 07-25 incident: the package did NOT wedge.
Get-AppxPackageStatus stayedOk, and an over-the-top reinstall preserved all package state - sessions, groups, pins, wrappers. Losses were limited to in-flight background tasks, which correctly resolved as "stopped / No completion" on relaunch, and the session transcript kept every completed turn. So the GPU-death class has a benign variant when the package survives; what made 07-25 catastrophic was theNeedsRemediationwedge that followed, not the crash itself. This also correlates with the independent GPU-process repro reported earlier in this thread (theerror_code=18launch failure): same class, different aftermath.2. Mechanism for the duplicated sidebar rows ("ghost pins")
Diagnosed 2026-07-27 on the same install. The duplicates are purely client-side render state:
ccd/dframe-starred-codein user_settings) holds only unique session ids, and the server session list has zero duplicate rows. Server state is clean.react-query-cache-ls), querysessions_api_list_sessions: its single cached page accumulates n+1 ids for n unique sessions, and the sidebar renders one row per occurrence.status_bucket: workingwithunread: false- sessions that were killed mid-turn and therefore parse as "running" forever. Non-pinned sessions duplicate too (found one at x2); Pinned is just where it is visible.workingbucket is derived state and reverts on unarchive). Unpinning stops NEW growth but does not clear existing ghost rows - they are stale row objects decoupled from pin state. Only an app relaunch clears the ones on screen.Happy to provide the raw notes for either item if useful.