Skip to content

[BUG] Windows auto-update deploys into running claude.exe + CoworkVMService (0x80073CF9/0x80073D02), app left unlaunchable (NeedsRemediation); recovery churn incl. dev-only PreserveApplicationData (0x80073CFA) — twice in one day #83932

Description

@DonSmirelo

Summary

Windows auto-update deployments run while the app (claude.exe) and the packaged service CoworkVMService (cowork-svc.exe) are still running, and fail: 0x80073CF9 with inner 0x80070020 (ERROR_SHARING_VIOLATION) on cowork-svc.exe, or 0x80073D02 ("the following apps must be closed"). To the user this looks like Claude suddenly crashed mid-session, after which the app never launches again (no window, no error). What follows in the log is recovery churn: register attempts that "succeed" at the AppX layer without producing a launchable app, repair attempts that race the very processes they're repairing, and — in both incidents — an identical removal attempt with PreserveApplicationData, which is dev-mode-only and guaranteed to fail with 0x80073CFA on a store-signed package.

This hit the same machine twice within one day (2026-08-04, ~01:14 and ~22:52 local). Both times the app was down for 10+ minutes and needed assisted recovery.

Environment

  • Windows 10 Pro 10.0.19045 x64, Russian locale (log excerpts translated; codes/paths/options verbatim)
  • Claude Desktop MSIX, package family Claude_pzs8sxrjxfjjc
  • Update path: 1.24012.11.01.25927.0.0, payload https://downloads.claude.ai/releases/win32/x64/1.25927.0/Claude-003700efafbc2ccb4b1177a5e637b14da381799e.msix

All excerpts are from Microsoft-Windows-AppXDeploymentServer/Operational, times local. The log records operations, options and outcomes but not the initiating process, so per-attempt attribution (updater retry logic vs. Windows repair vs. our assisted recovery) is inference; your updater telemetry can correlate.

Incident 1 — 2026-08-04 01:14–01:26: repair/re-add of the running version

01:14:10 #603/#638/#401/#404  RegisterByPackageFullName (RepairAppRegistration) of 1.24012.11.0
                              → 0x80073D02 — blocked by the running app it is repairing
01:15:16 #603/#717/#404 (x2)  Remove 1.24012.11.0, first with PreserveApplicationData,RemoveForAllUsers,
                              then PreserveApplicationData alone → 0x80073CFA both times
                              ("flag allowed only for packages deployed in development mode")
01:15:16 #603  Add of 1.24012.11.0 (Claude-2908984492.msix), options:
               ForceApplicationShutdownOption,ForceUpdateFromAnyVersion
01:15:18 #462  Error 0x80070020: failed to create file
               \\?\C:\Program Files\WindowsApps\Claude_1.24012.11.0_...\app\resources\cowork-svc.exe
01:15:18 #605  Last successful state: PreStagePackagesInUseClosed. Failed before reaching: Staged.
01:15:18 #404  → 0x80073CF9 (inner 0x80070020)
01:19:49       identical Add failure, payload Claude-279551963.msix
01:25:23 #404  Add retry → 0x80070005 (failed to open package location)
01:26:03 #603  Add of 1.24012.11.0 (same Force options) — after lingering processes/service
               were stopped out-of-band
01:26:19 #646/#400  running app terminated for servicing; Add completed successfully (16 s)

Sharp edge here: the failing Adds at 01:15/01:19 did request ForceApplicationShutdownOption, yet still died on a sharing violation — same-version re-staging writes into the live package folder (#605: between PreStagePackagesInUseClosed and Staged) before the shutdown machinery terminates the service that holds cowork-svc.exe.

Incident 2 — 2026-08-04 22:08–23:12: deferred update commits into lingering processes, then churn

22:08:28–42 #603/#638/#400  Add 1.25927.0.0 (DeferRegistrationWhenPackagesAreInUse) → staged OK,
                            registration deferred, app still running   [normal designed flow]
22:18:37–38                 same deferred Add again (cached, 734 ms)
22:52:59 #638/#401/#404     deferred Register fires → 0x80073D02 — blocked by running 1.24012.11.0
22:58:48–59:19 #603/#646/#9648/#400  RegisterByPackageFamilyName (ForceApplicationShutdownOption):
                            app terminated, CoworkVMService terminated → Register SUCCESS (31 s)
                            — but no durably working app followed; churn continues:
23:06:21–22 #603/#638/#404  RegisterByPackageFullName (RepairAppRegistration) → 0x80073D02 —
                            blocked by the now-running 1.25927.0.0 itself
23:08:20 #400               Register SUCCESS (219 ms)
23:09:11 #603/#9648/#400    RepairAppRegistration + TerminateSingleService(CoworkVMService) →
                            Register SUCCESS (203 ms) — still no working app
23:10:44 #603/#717/#404(x2) Remove 1.25927.0.0 with PreserveApplicationData(,RemoveForAllUsers) →
                            0x80073CFA — same dev-mode-only dead end as incident 1
23:10:44–51 #603/#9648/#400 Add of OLD 1.24012.11.0 (Claude-817307799.msix, Force options) →
                            SUCCESS — temporary downgrade to the previous version
23:11:30–39 #603/#638/#400  Add 1.25927.0.0 fetched fresh from downloads.claude.ai (Defer...InUse)
                            → staged OK, deferred (blocker: 1.24012.11.0 now running again)
23:12:13–44 #603/#646/#9648/#400  RegisterByPackageFamilyName (ForceApplicationShutdownOption):
                            app + CoworkVMService terminated → Register 1.25927.0.0 SUCCESS (31 s),
                            1.24012.11.0 moved to \WindowsApps\Deleted

The 23:12:44 result held: Get-AppxPackage now reports 1.25927.0.0, Status: Ok, CoworkVMService runs from the new package folder, app healthy. During the broken window Get-AppxPackage showed the package as Modified, NeedsRemediation (observed live during recovery, not preserved in a transcript; identical signature to #83893).

Observations

  1. The deferred-registration flow commits into lingering processes. The designed path (Add + DeferRegistrationWhenPackagesAreInUse) staged fine at 22:08, but the deferred Register at 22:52:59 ran while claude.exe/cowork-svc.exe still lived → 0x80073D02. Window closed ≠ processes exited.
  2. Same-version repair Add races its own service at staging time, before force-shutdown applies → 0x80073CF9/0x80070020 on cowork-svc.exe (incident 1). Force flags don't help there.
  3. RepairAppRegistration is blocked by the app it repairs (01:14:10, 23:06:21) → 0x80073D02.
  4. AppX-layer "success" ≠ working app. Three registrations reported #400 completed successfully (22:59:19, 23:08:20, 23:09:11) with no launchable app afterwards — churn continued for another ~13 minutes. Nothing verifies end-to-end health before declaring the update done.
  5. PreserveApplicationData removal is a scripted-looking dead end that fired in both incidents (01:15:16 and 23:10:44, both times as a pair: with RemoveForAllUsers, then without). The flag is dev-mode-only, so it fails with 0x80073CFA on the store-signed package every time. Whatever issues it (updater rollback logic or recovery tooling — the log doesn't name the caller), "remove but keep user data" is not available as a rollback path for this package.
  6. No automatic recovery to a working state. The package sat in Modified, NeedsRemediation until an out-of-band sequence (temporary downgrade to 1.24012.11.0, fresh payload re-download, defer-Add + force-shutdown Register) landed the update. Why the 23:12:44 attempt held while the 22:59:19 one (same options, same duration) did not is not decidable from this log — flagging for whoever owns the updater's state machine.

Suggested fix

  1. Before the deferred Register commits: enumerate active AUMIDs, gracefully close the GUI, stop CoworkVMService, and wait for cowork-svc.exe/claude.exe to actually exit (no open handles into the package folder) — don't rely on window-close as a proxy.
  2. Treat 0x80070020 / 0x80073D02 as retryable: re-stop processes, retry registration; don't abandon the package in NeedsRemediation.
  3. After Register reports success, verify end-to-end (app activates, service starts from the new folder, package Status == Ok) before considering the update finished — that's the gap behind observation 4.
  4. Drop PreserveApplicationData from any removal path for the store-signed package (0x80073CFA is unconditional there); user data survives normal in-place update anyway.
  5. If the new version can't reach a verified-working state, roll back to the previous version automatically — the 23:10:51 downgrade shows the mechanics work.
  6. Start CoworkVMService / relaunch the app only after the AppX operation has committed.

User impact

The failed update presents as an out-of-the-blue crash; afterwards the app simply never opens — no window, no error, shortcut present. Messages typed into the dead window are lost. User data survives on disk, but recovery requires AppX/service surgery far beyond a typical user. Twice in one day on this machine.

Related

Same lock/race cluster: #73694, #81756, #80502, #82494, #81267, #83893, #78873. This report adds a detailed two-incident same-day timeline from AppXDeploymentServer/Operational, the repeated dev-mode-only PreserveApplicationData rollback dead end (0x80073CFA), and the "AppX success without a working app" churn pattern.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions