Windows: hidden Browser-pane preview kills the app via Code Integrity block on packaged vk_swiftshader.dll, then "Repair" dialog
Environment
- Claude Desktop 1.24012.1.0 and 1.24012.9.0 (both reproduce; .9 was latest at time of crash), sideloaded MSIX
Claude_..._x64__pzs8sxrjxfjjc, SignatureKind=Developer - Windows 11 Enterprise 26100 (corporate-managed device: CrowdStrike, Trellix, BeyondTrust present; VBS/HVCI/CredentialGuard disabled)
- Hybrid GPU laptop (Intel UHD + NVIDIA T1200 Laptop GPU) — investigated and ruled out as a factor (see below)
What happens
Twice in one night (2026-07-25 00:51:39 and 01:12:01 local, UTC+3), the app died hard about 11 seconds after a Claude Code session created an in-app Browser preview while the Browser pane was not displayed (the first crash occurred while the machine was in Modern Standby — screen off, no screenshot calls involved at all; the second crash did have capturePreviewScreenshot 5s-timeout warnings first). After each death, every relaunch showed Windows' "Can't open this app — go to advanced options and select Repair" dialog.
Root-cause chain (from Windows event logs, identical both times, on both app versions)
- Hidden Browser preview → no compositing surface → Chromium's GPU process falls back to the SwiftShader software renderer and tries to load the package's own
app\vk_swiftshader.dll. Microsoft-Windows-CodeIntegrity/OperationalEvent 3033 blocks the load — Status 0xC0000428 STATUS_INVALID_IMAGE_HASH. Verbatim:Code Integrity determined that a process (...\claude.exe) attempted to load ...\vk_swiftshader.dll that did not meet the Microsoft signing level requirements.Timestamps: 00:51:38.920 (v1.24012.1.0) and 01:12:00.510 (v1.24012.9.0) — the only Claude-related 3033 events in the whole retained log.
- Companion Event 3089: the DLL is validly Authenticode-signed by "Anthropic, PBC" (DigiCert Trusted G4 chain) but
PageHash=false,ValidatedSigningLevel=1,PolicyBits=16. - Companion Event 3010 (x3, ~50ms earlier): catalog
AppxMetadata\CodeIntegrity.catnot found (0xC000003A OBJECT_PATH_NOT_FOUND). Confirmed on disk: the installed MSIX has noAppxMetadatafolder at all. - An embedded Authenticode signature without page hashes, and with no catalog to fall back to, cannot be validated at image-map time under the GPU process's Microsoft-signed-only child-process mitigation → deterministic block.
- The GPU process is killed. This is exactly what shows up in
main.logas:
```
GPU process gone: { type: 'GPU', reason: 'crashed', exitCode: 101457950, serviceName: 'GPU' }
101457950
= 0x060C201E` — this is a Windows AppModel/integrity kill code, not a Chromium/Electron internal crash code (it does not appear anywhere in Chromium or Electron source/issue trackers).
- Within about a second, the package's machine-level status gets flagged Modified (
0x2):Microsoft-Windows-AppModel-Runtime/AdminEvent 6, fired 5x in ~15-40ms:
```
0x3CFC: Cannot create the process for package <NULL> because an error was encountered while checking the
machine-level package status. The application cannot be started. Try reinstalling the application to fix the problem.
0x80073CFC
( / Win32 15612 = ERROR_NEEDS_REMEDIATION) — every attempt by Electron to respawn the dead GPU process fails at CreateProcess, Chromium exhausts its GPU-mode fallback ladder, and the whole app terminates (Chromium's own LOG(FATAL) << "GPU process isn't usable. Goodbye."` path). No Crashpad dump is produced.
- Every subsequent app activation then hits the same Modified flag → the "Repair" dialog.
What this rules out
- Not a hybrid/Optimus GPU driver fault. Zero Display 4101 /
nvlddmkm/Dxgkrnl141-117-119 / WHEA / LiveKernelEvent events anywhere in the window; GPU process memory was flat (~160MB) right up to both crashes; drivers are current andStatus=OK; crash 1 happened with the display off. - Not caused by the screenshot capture itself. Crash 1 had zero
capturePreviewScreenshotcalls before it died — hidden preview creation alone was sufficient. - Not package/update corruption. Crash 2 happened on a freshly installed 1.24012.9.0, freshly rebooted machine, with no pending update staged — the Modified flag is set live by the Code Integrity enforcement event each time, not by stale update state.
- Not fixed by reinstalling or updating. Both installed versions (1.24012.1.0 and the then-latest 1.24012.9.0) hit the identical chain.
Suggested fixes
- Sign
vk_swiftshader.dll(and the other Chromium runtime DLLs —libEGL.dll,libGLESv2.dll,vulkan-1.dll,ffmpeg.dll,d3dcompiler_47.dll,dxcompiler.dll,dxil.dll) with page hashes (signtool sign ... /ph), and/or ship anAppxMetadata\CodeIntegrity.catcatalog in the MSIX so these binaries validate without page hashes. - Alternatively, scope/relax the Microsoft-signed-only child-process signature mitigation applied to the GPU process so it can load the app's own validly-signed DLLs.
- Defensively: don't let a hidden/off-screen Browser preview push the GPU process into software (SwiftShader) fallback in the first place; and consider porting the existing Linux "auto-disable acceleration on repeated GPU crash" recovery (shipped in v1.19367.0) to Windows, so a GPU-process death degrades gracefully instead of killing the whole app and leaving the MSIX package flagged Modified.
Recovery (for anyone hitting this)
Full uninstall + reinstall + PC restart is not required. Settings > Apps > Installed apps > Claude > Advanced options > Repair clears the Modified flag (confirmed from the event log — Repair reset the status bit without any data loss). Full uninstall/reinstall works too but is unnecessarily destructive for this specific failure.
Happy to share the raw Event Viewer exports (CodeIntegrity/Operational, AppModel-Runtime/Admin, AppXDeploymentServer/Operational) if useful — all captured read-only, no elevation.
Showing cached comments. Read the full discussion on GitHub ↗
8 Comments
+1 — independent repro on a consumer machine, which rules out two confounds in the original report.
Same signature:
GPU process gone: { reason: 'crashed', exitCode: 101457950 }(0x060C201E) from a Browser-pane preview, thenModified, NeedsRemediationand the Repair dialog.| | #80999 original | here |
|---|---|---|
| Windows | 11 Enterprise 26100, corporate-managed | 11 Home 26200, personal |
| Security | CrowdStrike, Trellix, BeyondTrust | Defender only |
| VBS / HVCI | disabled | enabled |
| GPU | Intel UHD + NVIDIA T1200 | AMD Radeon iGPU + RTX 4070 Ti |
| Version | 1.24012.1.0 / 1.24012.9.0 | 1.24012.9.0 |
Preconditions confirmed here:
The minidump contains no vendor GPU driver modules at all (only
dxcore.dll/dxgi.dll) — consistent with the GPU process already being on the software path when it died.Run-up, from
[process-memory](once/min):Second crash 12 min later, same shape.
children(0)=0MBthroughout — Claude Code subagents were running the whole time and never enter the app's process tree, so the growth is purely Browser-pane renderers.Repair race reproduced too (#63397):
0x80073D02x4 before one succeeded.-ForceTargetApplicationShutdownavoids it.Windows logged the mechanism directly, at the exact crash second, on both crashes — so this is observed here rather than inferred.
Microsoft-Windows-CodeIntegrity/Operational:Same second, app log:
0xC000003AisOBJECT_PATH_NOT_FOUND— catalog confirmed absent on disk. Second crash at11:50:46is identical (3x 3010 + 1x 3033).Environment delta is in my comment above; the short version is that it reproduces with no third-party EDR and with HVCI enabled, on a different GPU vendor pairing.
Event-log exports and a minidump of the second crash are available if useful.
Workaround worth listing: use the
claude-in-chromeextension instead of the in-app Browser pane.It drives real Chrome via the native-messaging host, so no
electron_rendereris created inside Claude Desktop, the GPU process never falls back to SwiftShader, andvk_swiftshader.dllis never image-mapped. The trigger isn't present.WebFetch/WebSearchcover read-only cases.For agent work, restate the constraint in subagent prompts — the previews get opened by subagents, and
children(0)=0MBmeans they never appear in the app's process tree, so this misreads as "too many agents" and sends you tuning concurrency instead.Workaround, not a fix. Also note
chrome-native-host.execan be left file-locked after a crash (#68956).Confirming this on a consumer machine with no EDR and no hybrid graphics, which should rule out
the security stack and the GPU-switching angle as confounds.
Same fingerprint
AppxMetadatafolder is empty —CodeIntegrity.catis absent here too, and Code Integrityblocks
vk_swiftshader.dllat the exact second of each GPU-process death. Three for three:Followed by the AppX cascade you documented: 603/607 → 638
(
Running apps: {Claude_pzs8sxrjxfjjc!Claude}) → 419/4040x80073D02, plus 8104(
Failed to set the Trust Label ... 0x80070057) and 8107 (Illegal non-AppStore or).non-AppInstaller package integrity validation attempted
Recovery here: automatic remediation, no manual reinstall, no reboot
Worth adding because it differs from your recovery path. I only clicked the taskbar icon; no
installer was run by hand (there is no
ClaudeSetup.logon this machine at all). Windows drovethe whole thing:
So the self-block you describe reproduces exactly — but only the Register half failed. The
Add had already completed, which is presumably why the package ended up
Status: Okhereinstead of bricking. The app launched normally afterwards.
That suggests the difference between "recovers by itself" and "unlaunchable until clean-boot
reinstall" may just be whether the Add half of the repair finishes before the Register half hits
the still-running process — i.e. a race, not an environmental difference.
What this environment removes as a confound
| | Original report | Here |
| --- | --- | --- |
| Security stack | CrowdStrike + Trellix + BeyondTrust, corporate-managed | Windows Defender only, unmanaged consumer machine |
| GPU | Hybrid: Intel UHD + NVIDIA T1200 | AMD Radeon 780M, integrated only — no hybrid switching |
| OS | Windows 11 Enterprise 26100 | Windows 11 Pro 26200 |
| App | 1.24012.1.0 / 1.24012.9.0, Developer-signed sideload | 1.24012.9.0, Developer-signed sideload |
Also reproduced across two AMD driver versions (32.0.22029.9039 → 32.0.31021.5001), so it is
not a driver regression.
WebGL burst immediately before each death
Consistent with the SwiftShader-fallback path: context is lost, Chromium reaches for the software
renderer, the DLL load is blocked, the GPU process dies.
Useful contrast: a GPU crash not on this path is survivable
No browser pane open, no CodeIntegrity 3033 at that timestamp,
exitCode 34instead of101457950— and the app respawned the GPU process and carried on. So the app's GPU-crashrecovery works fine in general; it is specifically this blocked-DLL path that is fatal.
One caution on version
The delay between opening the pane and the crash varied a lot here — 6.5 min, 43 s, 1 s — so the
trigger looks page-driven (whatever pushes the renderer into SwiftShader) rather than tied to pane
creation. On this machine 1.24012.1 happened not to crash, but given #80444 and your own 1.24012.1
data, I'd read that as which sites were visited, not as a version boundary. Flagging it so nobody
chases a false regression point.
Workaround note
Settings > Apps > Claude > Advanced options > Repairclears theModifiedflag, but since thecatalog is missing from the MSIX itself, it does not stop the crash. Blocking the browser pane
outright does — in Claude Code,
permissions.deny: ["mcp__Claude_Browser"].Environment
| Item | Value |
| --- | --- |
| App |
Claude_1.24012.9.0_x64__pzs8sxrjxfjjc, SignatureKind: Developer || Claude Code CLI | 2.1.219 |
| Electron node | 24.18.0 |
| OS | Windows 11 Pro 10.0.26200 |
| CPU | AMD Ryzen 7 7840HS |
| GPU | AMD Radeon 780M (integrated, sole adapter) |
| GPU driver | 32.0.22029.9039 and 32.0.31021.5001 — both affected |
| AV | Windows Defender only |
| RAM | 28 GB, ~18.5 GB free at crash time |
Confirming the same root-cause chain on another environment, this time Windows Server 2022 Standard 10.0.20348.5139.
Reproduction
1.24012.9.0,SignatureKind: DeveloperExact Windows fingerprint
At the failure second:
The package then reported:
Subsequent activations logged AppModel-Runtime Event 6 /
0x3CFC: machine-level package status check failed and the application could not be started.Independent checks
claude.exeandvk_swiftshader.dllboth have valid Authenticode signatures from Anthropic.AppxBlockMap.xmlexactly (0 mismatched blocks; 3,554 blocks forclaude.exe, 85 forvk_swiftshader.dll).DISM /Online /Cleanup-Image /CheckHealthreports no component-store corruption.An in-place rollback to
1.24012.1.0restored package status toOk. A multi-profile launch test then completed without new Code Integrity or AppModel errors. We are avoiding the in-app Browser pane; I am not claiming.1fixes the underlying packaging issue, since this issue already demonstrates the same chain there.This adds Windows Server 2022 to the affected environments and independently confirms that the Browser/SwiftShader path, not auto-update or profile data, is the trigger.
Cross-reference sweep: this is now a multi-report Windows incident
I searched the repository on 2026-07-28 for
vk_swiftshader.dll,101457950/0x060C201E,CodeIntegrity.cat,NeedsRemediation, and Browser/preview GPU failures. At least 21 open issues appear to be part of this incident cluster.1. Direct Code Integrity / SwiftShader evidence
These independently document the late
vk_swiftshader.dllload, Code Integrity rejection, and/or the resultingNeedsRemediationstate:2. Same Browser -> GPU death -> AppX activation/repair damage
These report the same in-app Browser/preview trigger, fatal GPU failure, and package activation or repair failure:
3. Same Browser-pane + exit-code fingerprint
These independently report the in-app Browser/preview followed by GPU exit
101457950/0x060C201Eand loss of the desktop app:4. Same fatal GPU / relaunch cluster, with a less explicit trigger or integrity trace
This spans Windows 10, Windows 11, and Windows Server 2022; Intel, AMD, NVIDIA, hybrid graphics, and WARP/software rendering; Defender-only and enterprise-managed machines; and desktop builds including 1.24012.1 and 1.24012.9. Disabling hardware acceleration has also reproduced the same failure, so a GPU-driver-only explanation does not fit the combined evidence.
The reports point to two related product defects:
One reporter in #81398 verified that the official non-MSIX EXE build survives the same multi-window workload with zero Code Integrity 3033 events. That is a useful packaging control, but it is a community workaround, not an official fix.
I found no linked fix PR or maintainer acknowledgement in this cluster yet. Could these reports be consolidated under a single tracked regression, assigned the Windows/Desktop labels and an owner, and given a confirmed safe-build or remediation status?
Adding one more data point on the browser-process crash mechanism — a case with an actual Crashpad dump, which several reports here noted they were missing.
From anthropics/claude-code#81664 (my own report, same fingerprint, Intel UHD integrated graphics): a repro produced a Crashpad
.dmp, parsed directly from the minidump streams (no debugger/symbols available):ExceptionCode: 0x80000003(EXCEPTION_BREAKPOINT) — not an access violation.Claude.exeitself.CrBrowserMain— the browser process's own main UI thread, not the GPU child process.ProcessIdmatches the main/browser process, not the GPU process.This lines up exactly with the
LOG(FATAL) << "GPU process isn't usable. Goodbye."mechanism described above: once Chromium exhausts its GPU-mode fallback ladder, the browser process deliberately self-terminates via aCHECK()/IMMEDIATE_CRASH()-style breakpoint trap on its main thread — which is why the whole app dies hard instead of just losing/respawning the GPU child. Whether Crashpad manages to catch that trap before the process fully unwinds looks timing-dependent, which would explain why it's absent in most other reports here.Trigger in my repro was a Browser-pane viewport resize (
resize_window), consistent with anything that forces the pane's compositing surface to reallocate while it's already destabilized — in my case, by the app's own internal preview-thumbnail capture failing on a hidden pane just beforehand.Independent confirmation on a different Windows SKU and build.
Environment: Windows 11 Home 26200 (reporter: 11 Enterprise 26100),
Claude 1.24012.9.0, Intel i5-12400, 64 GB RAM. No managed policy configured
(
SOFTWARE\Policies\Claudeabsent), so this is not enterprise-config-specific.Same 3033, same DLL:
Id=3033 Code Integrity determined that a process
(...\Claude_1.24012.9.0_x64__pzs8sxrjxfjjc\app\claude.exe)
attempted to load ...\app\vk_swiftshader.dll
that did not meet the Microsoft signing level requirements.
Runtime confirmation that the catalog is absent. The report infers this
from inspecting the MSIX; here Windows says so directly at load time —
three of these fired in the same second as the 3033:
Id=3010 Code Integrity was unable to load the
...\Claude_1.24012.9.0_x64__pzs8sxrjxfjjc\AppxMetadata\CodeIntegrity.cat
catalog. Status 0xC000003A.
0xC000003Ais STATUS_OBJECT_PATH_NOT_FOUND — the file isn't there, ratherthan being present-but-invalid. That supports fix suggestion #2 specifically.
The remediation loop is visible in AppXDeploymentServer/Operational. The
same version was re-Added four times in under two hours, bracketed by repair
operations — consistent with the Modified-flag path in the report rather than
with ordinary updates, which would install differing versions:
20:28:33 RepairPackageOperation
20:28:52 Add Claude_1.24012.9.0 <- same version
20:34:41 RepairPackageOperation
20:34:59 Add Claude_1.24012.9.0 <- same version
22:14:59 ResetPackageOperation
22:15:18 Remove -> StageUserData -> Register
22:17:53 Remove
Each deployment carried
ForceTargetApplicationShutdownOption, so any runningsession was terminated.
Two notes for anyone else collecting evidence:
single APPCRASH, AppHang, MoAppCrash or Application Error naming claude.exe
— consistent with an AppModel integrity kill rather than a fault. Users
hitting this will reasonably conclude "no crash was logged" and look
elsewhere.
Microsoft-Windows-CodeIntegrity/Operationalis 1 MB circular. On amachine where AV AMSI components log heavily, it retained only ~2.5 hours
here — my own crash-storm evidence from two days earlier had already rolled
off. Worth raising it to 20–50 MB before trying to reproduce, otherwise
the 3033/3010 pair will likely be gone by the time you look.